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