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 18 namespace skiagm { 19 20 class PathOpsSkpClipGM : public GM { 21 public: 22 PathOpsSkpClipGM() { 23 } 24 25 protected: 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 63 private: 64 typedef GM INHERITED; 65 }; 66 67 ////////////////////////////////////////////////////////////////////////////// 68 69 static GM* MyFactory(void*) { return new PathOpsSkpClipGM; } 70 static GMRegistry reg(MyFactory); 71 72 } 73