1/* 2 * Copyright 2013 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#include "gm.h" 9#include "SkBitmap.h" 10#include "SkCanvas.h" 11#include "SkClipStack.h" 12#include "SkPath.h" 13#include "SkPathOps.h" 14#include "SkPicture.h" 15#include "SkPictureRecorder.h" 16#include "SkRect.h" 17 18namespace skiagm { 19 20class PathOpsSkpClipGM : public GM { 21public: 22 PathOpsSkpClipGM() { 23 } 24 25protected: 26 SkString onShortName() override { 27 return SkString("pathopsskpclip"); 28 } 29 30 SkISize onISize() override { 31 return SkISize::Make(1200, 900); 32 } 33 34 void onDraw(SkCanvas* canvas) override { 35 SkPictureRecorder recorder; 36 SkCanvas* rec = recorder.beginRecording(1200, 900, nullptr, 0); 37 SkPath p; 38 SkRect r = { 39 SkIntToScalar(100), 40 SkIntToScalar(200), 41 SkIntToScalar(400), 42 SkIntToScalar(700) 43 }; 44 p.addRoundRect(r, SkIntToScalar(50), SkIntToScalar(50)); 45 rec->clipPath(p, true); 46 rec->translate(SkIntToScalar(250), SkIntToScalar(250)); 47 rec->clipPath(p, true); 48 rec->drawColor(0xffff0000); 49 sk_sp<SkPicture> pict(recorder.finishRecordingAsPicture()); 50 51 canvas->setAllowSimplifyClip(true); 52 canvas->save(); 53 canvas->drawPicture(pict); 54 canvas->restore(); 55 56 canvas->setAllowSimplifyClip(false); 57 canvas->save(); 58 canvas->translate(SkIntToScalar(1200 / 2), 0); 59 canvas->drawPicture(pict); 60 canvas->restore(); 61 } 62 63private: 64 typedef GM INHERITED; 65}; 66 67////////////////////////////////////////////////////////////////////////////// 68 69static GM* MyFactory(void*) { return new PathOpsSkpClipGM; } 70static GMRegistry reg(MyFactory); 71 72} 73