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"
10c090c647e48f8f9adc199fe715c773a33980f1d4Mike Reed#include "SkPath.h"
11d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed#include "SkPictureRecorder.h"
12d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
13ca2622ba051829fed5f30facd74c5b41cd4b931creedstatic sk_sp<SkPicture> make_picture() {
14d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    SkPictureRecorder rec;
15d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    SkCanvas* canvas = rec.beginRecording(100, 100);
16d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
17d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    SkPaint paint;
18d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    paint.setAntiAlias(true);
19d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    SkPath path;
20d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
21d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    paint.setColor(0x800000FF);
22d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    canvas->drawRect(SkRect::MakeWH(100, 100), paint);
23d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
24d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    paint.setColor(0x80FF0000);
25d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    path.moveTo(0, 0); path.lineTo(100, 0); path.lineTo(100, 100);
26d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    canvas->drawPath(path, paint);
279d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary
28d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    paint.setColor(0x8000FF00);
29d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    path.reset(); path.moveTo(0, 0); path.lineTo(100, 0); path.lineTo(0, 100);
30d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    canvas->drawPath(path, paint);
31d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
32d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    paint.setColor(0x80FFFFFF);
33374772bd61951f01bf84fe17bf53d8867681c9aereed    paint.setBlendMode(SkBlendMode::kPlus);
34d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    canvas->drawRect(SkRect::MakeXYWH(25, 25, 50, 50), paint);
35d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
36ca2622ba051829fed5f30facd74c5b41cd4b931creed    return rec.finishRecordingAsPicture();
37d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed}
38d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
39d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed// Exercise the optional arguments to drawPicture
40d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed//
41d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedclass PictureGM : public skiagm::GM {
42d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedpublic:
4363c684a8a609d39da11b4a656223cebf52ca85dccaryclark    PictureGM()
4496fcdcc219d2a0d3579719b84b28bede76efba64halcanary        : fPicture(nullptr)
4563c684a8a609d39da11b4a656223cebf52ca85dccaryclark    {}
46d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
47d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedprotected:
4836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onOnceBeforeDraw() override {
49ca2622ba051829fed5f30facd74c5b41cd4b931creed         fPicture = make_picture();
5063c684a8a609d39da11b4a656223cebf52ca85dccaryclark    }
5163c684a8a609d39da11b4a656223cebf52ca85dccaryclark
5236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkString onShortName() override {
53d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        return SkString("pictures");
54d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    }
55d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
5636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkISize onISize() override {
57d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        return SkISize::Make(450, 120);
58d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    }
59d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
6036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDraw(SkCanvas* canvas) override {
61d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        canvas->translate(10, 10);
62d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
63d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        SkMatrix matrix;
64d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        SkPaint paint;
65d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
66d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        canvas->drawPicture(fPicture);
679d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary
68d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        matrix.setTranslate(110, 0);
6996fcdcc219d2a0d3579719b84b28bede76efba64halcanary        canvas->drawPicture(fPicture, &matrix, nullptr);
709d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary
71d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        matrix.postTranslate(110, 0);
72d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        canvas->drawPicture(fPicture, &matrix, &paint);
73d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
74d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        paint.setAlpha(0x80);
75d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        matrix.postTranslate(110, 0);
76d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        canvas->drawPicture(fPicture, &matrix, &paint);
77d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    }
78d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
79d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedprivate:
80ca2622ba051829fed5f30facd74c5b41cd4b931creed    sk_sp<SkPicture> fPicture;
81d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
82d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    typedef skiagm::GM INHERITED;
83d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed};
84d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed
85385fe4d4b62d7d1dd76116dd570df3290a2f487bhalcanaryDEF_GM(return new PictureGM;)
86