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