1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2016 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "gm.h" 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvas.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPath.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkClipOpPriv.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace skiagm { 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot//this test exercise SkCanvas::setDeviceClipRestriction behavior 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ComplexClip4GM : public GM { 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ComplexClip4GM(bool aaclip) 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : fDoAAClip(aaclip) { 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot this->setBGColor(0xFFDEDFDE); 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() { 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString str; 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot str.printf("complexclip4_%s", 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fDoAAClip ? "aa" : "bw"); 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return str; 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() { return SkISize::Make(970, 780); } 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot virtual void onDraw(SkCanvas* canvas) { 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint p; 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setAntiAlias(fDoAAClip); 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setColor(SK_ColorYELLOW); 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->save(); 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // draw a yellow rect through a rect clip 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->save(); 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->androidFramework_setDeviceClipRestriction(SkIRect::MakeLTRB(100, 100, 300, 300)); 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawColor(SK_ColorGREEN); 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clipRect(SkRect::MakeLTRB(100, 200, 400, 500), 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kReplace_SkClipOp, fDoAAClip); 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawRect(SkRect::MakeLTRB(100, 200, 400, 500), p); 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->restore(); 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // draw a yellow rect through a diamond clip 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->save(); 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->androidFramework_setDeviceClipRestriction(SkIRect::MakeLTRB(500, 100, 800, 300)); 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawColor(SK_ColorGREEN); 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath pathClip; 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pathClip.moveTo(SkIntToScalar(650), SkIntToScalar(200)); 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pathClip.lineTo(SkIntToScalar(900), SkIntToScalar(300)); 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pathClip.lineTo(SkIntToScalar(650), SkIntToScalar(400)); 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pathClip.lineTo(SkIntToScalar(650), SkIntToScalar(300)); 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot pathClip.close(); 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clipPath(pathClip, kReplace_SkClipOp, fDoAAClip); 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawRect(SkRect::MakeLTRB(500, 200, 900, 500), p); 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->restore(); 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // draw a yellow rect through a round rect clip 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->save(); 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->androidFramework_setDeviceClipRestriction(SkIRect::MakeLTRB(500, 500, 800, 700)); 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawColor(SK_ColorGREEN); 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clipRRect(SkRRect::MakeOval(SkRect::MakeLTRB(500, 600, 900, 750)), 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kReplace_SkClipOp, fDoAAClip); 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawRect(SkRect::MakeLTRB(500, 600, 900, 750), p); 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->restore(); 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // fill the clip with yellow color showing that androidFramework_setDeviceClipRestriction 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // intersects with the current clip 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->save(); 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clipRect(SkRect::MakeLTRB(100, 400, 300, 750), 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kIntersect_SkClipOp, fDoAAClip); 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawColor(SK_ColorGREEN); 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->androidFramework_setDeviceClipRestriction(SkIRect::MakeLTRB(150, 450, 250, 700)); 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawColor(SK_ColorYELLOW); 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->restore(); 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->restore(); 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool fDoAAClip; 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef GM INHERITED; 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot////////////////////////////////////////////////////////////////////////////// 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM(return new ComplexClip4GM(false);) 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GM(return new ComplexClip4GM(true);) 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 98