1d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed/*
2d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed * Copyright 2014 Google Inc.
3d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed *
4d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed * Use of this source code is governed by a BSD-style license that can be
5d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed * found in the LICENSE file.
6d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed */
7d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
8d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed#include "gm.h"
9d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed#include "SkPaint.h"
10d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed#include "SkPictureRecorder.h"
11d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
12d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedstatic SkPicture* make_picture() {
13d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    SkPictureRecorder rec;
14d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    SkCanvas* canvas = rec.beginRecording(100, 100);
15d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
16d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    SkPaint paint;
17d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    paint.setAntiAlias(true);
18d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    SkPath path;
19d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
20d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    paint.setColor(0x800000FF);
21d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    canvas->drawRect(SkRect::MakeWH(100, 100), paint);
22d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
23d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    paint.setColor(0x80FF0000);
24d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    path.moveTo(0, 0); path.lineTo(100, 0); path.lineTo(100, 100);
25d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    canvas->drawPath(path, paint);
26d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
27d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    paint.setColor(0x8000FF00);
28d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    path.reset(); path.moveTo(0, 0); path.lineTo(100, 0); path.lineTo(0, 100);
29d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    canvas->drawPath(path, paint);
30d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
31d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    paint.setColor(0x80FFFFFF);
32d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    paint.setXfermodeMode(SkXfermode::kPlus_Mode);
33d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    canvas->drawRect(SkRect::MakeXYWH(25, 25, 50, 50), paint);
34d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
35d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    return rec.endRecording();
36d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed}
37d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
38d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed// Exercise the optional arguments to drawPicture
39d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed//
40d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedclass PictureGM : public skiagm::GM {
41d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedpublic:
4263c684a8a609d39da11b4a656223cebf52ca85dccaryclark    PictureGM()
4363c684a8a609d39da11b4a656223cebf52ca85dccaryclark        : fPicture(NULL)
4463c684a8a609d39da11b4a656223cebf52ca85dccaryclark    {}
45d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
46d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedprotected:
4736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onOnceBeforeDraw() override {
4863c684a8a609d39da11b4a656223cebf52ca85dccaryclark         fPicture.reset(make_picture());
4963c684a8a609d39da11b4a656223cebf52ca85dccaryclark    }
5063c684a8a609d39da11b4a656223cebf52ca85dccaryclark
5136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkString onShortName() override {
52d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        return SkString("pictures");
53d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    }
54d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
5536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkISize onISize() override {
56d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        return SkISize::Make(450, 120);
57d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    }
58d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
5936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDraw(SkCanvas* canvas) override {
60d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        canvas->translate(10, 10);
61d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
62d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        SkMatrix matrix;
63d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        SkPaint paint;
64d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
65d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        canvas->drawPicture(fPicture);
66d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
67d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        matrix.setTranslate(110, 0);
68d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        canvas->drawPicture(fPicture, &matrix, NULL);
69d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
70d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        matrix.postTranslate(110, 0);
71d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        canvas->drawPicture(fPicture, &matrix, &paint);
72d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
73d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        paint.setAlpha(0x80);
74d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        matrix.postTranslate(110, 0);
75d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        canvas->drawPicture(fPicture, &matrix, &paint);
76d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    }
77d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
78d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedprivate:
79d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    SkAutoTUnref<SkPicture> fPicture;
80d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
81d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    typedef skiagm::GM INHERITED;
82d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed};
83d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
84d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedDEF_GM( return SkNEW(PictureGM); )
85