1a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org/* 2a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org * Copyright 2014 Google Inc. 3a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org * 4a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 5a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org * found in the LICENSE file. 6a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org */ 7a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 8a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org#include "gm.h" 933d2055e594177b27360f84e0631b26d74a55a9bMike Klein#include "sk_tool_utils.h" 10a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 11a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org#include "SkBitmap.h" 12a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org#include "SkGradientShader.h" 13d3ebb48320cf1b7e969974673e4bd7743816985ebungeman#include "SkPath.h" 14a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org#include "SkTLList.h" 15a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 16a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.orgstatic SkBitmap make_bmp(int w, int h) { 17a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkBitmap bmp; 18a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org bmp.allocN32Pixels(w, h, true); 19a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 20a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkCanvas canvas(bmp); 21a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkScalar wScalar = SkIntToScalar(w); 22a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkScalar hScalar = SkIntToScalar(h); 23a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 24a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkPoint pt = { wScalar / 2, hScalar / 2 }; 25a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 26a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkScalar radius = 3 * SkMaxScalar(wScalar, hScalar); 27a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 282e096609b2f09512234ce69dcc0c30f8ab2d1b8fcaryclark SkColor colors[] = { sk_tool_utils::color_to_565(SK_ColorDKGRAY), 292e096609b2f09512234ce69dcc0c30f8ab2d1b8fcaryclark sk_tool_utils::color_to_565(0xFF222255), 302e096609b2f09512234ce69dcc0c30f8ab2d1b8fcaryclark sk_tool_utils::color_to_565(0xFF331133), 312e096609b2f09512234ce69dcc0c30f8ab2d1b8fcaryclark sk_tool_utils::color_to_565(0xFF884422), 322e096609b2f09512234ce69dcc0c30f8ab2d1b8fcaryclark sk_tool_utils::color_to_565(0xFF000022), SK_ColorWHITE, 332e096609b2f09512234ce69dcc0c30f8ab2d1b8fcaryclark sk_tool_utils::color_to_565(0xFFAABBCC) }; 34a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 35a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkScalar pos[] = {0, 36a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SK_Scalar1 / 6, 37a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 2 * SK_Scalar1 / 6, 38a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 3 * SK_Scalar1 / 6, 39a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 4 * SK_Scalar1 / 6, 40a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 5 * SK_Scalar1 / 6, 41a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SK_Scalar1}; 42a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 43a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkPaint paint; 44a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkRect rect = SkRect::MakeWH(wScalar, hScalar); 45a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkMatrix mat = SkMatrix::I(); 46a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org for (int i = 0; i < 4; ++i) { 472ad1aa67c6894696cdd65ec56057f81031d1c24areed paint.setShader(SkGradientShader::MakeRadial( 489c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org pt, radius, 499c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org colors, pos, 509c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org SK_ARRAY_COUNT(colors), 519c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org SkShader::kRepeat_TileMode, 522ad1aa67c6894696cdd65ec56057f81031d1c24areed 0, &mat)); 53a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org canvas.drawRect(rect, paint); 54a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org rect.inset(wScalar / 8, hScalar / 8); 55a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org mat.preTranslate(6 * wScalar, 6 * hScalar); 56a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org mat.postScale(SK_Scalar1 / 3, SK_Scalar1 / 3); 57a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org } 58a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 59a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org paint.setAntiAlias(true); 601818acb6a4b11cd9a1d44ce5dde77452502a9796caryclark sk_tool_utils::set_portable_typeface(&paint); 61a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org paint.setTextSize(wScalar / 2.2f); 62a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org paint.setShader(0); 632e096609b2f09512234ce69dcc0c30f8ab2d1b8fcaryclark paint.setColor(sk_tool_utils::color_to_565(SK_ColorLTGRAY)); 64dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein constexpr char kTxt[] = "Skia"; 65a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkPoint texPos = { wScalar / 17, hScalar / 2 + paint.getTextSize() / 2.5f }; 66a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org canvas.drawText(kTxt, SK_ARRAY_COUNT(kTxt)-1, texPos.fX, texPos.fY, paint); 67a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org paint.setColor(SK_ColorBLACK); 68a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org paint.setStyle(SkPaint::kStroke_Style); 69a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org paint.setStrokeWidth(SK_Scalar1); 70a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org canvas.drawText(kTxt, SK_ARRAY_COUNT(kTxt)-1, texPos.fX, texPos.fY, paint); 71a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org return bmp; 72a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org} 73a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 74a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.orgnamespace skiagm { 75a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org/** 76a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org * This GM tests convex polygon clips. 77a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org */ 78a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.orgclass ConvexPolyClip : public GM { 79a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.orgpublic: 80a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org ConvexPolyClip() { 81a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org this->setBGColor(0xFFFFFFFF); 82a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org } 83a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 84a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.orgprotected: 8536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { 86a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org return SkString("convex_poly_clip"); 87a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org } 88a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 8936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { 90b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org // When benchmarking the saveLayer set of draws is skipped. 91b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org int w = 435; 92b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org if (kBench_Mode != this->getMode()) { 93b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org w *= 2; 94b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org } 95f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(w, 540); 96a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org } 97a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 9836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onOnceBeforeDraw() override { 99a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkPath tri; 100a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org tri.moveTo(5.f, 5.f); 101a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org tri.lineTo(100.f, 20.f); 102a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org tri.lineTo(15.f, 100.f); 103a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 104b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org fClips.addToTail()->setPath(tri); 105a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 106a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkPath hexagon; 107dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein constexpr SkScalar kRadius = 45.f; 108a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org const SkPoint center = { kRadius, kRadius }; 109a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org for (int i = 0; i < 6; ++i) { 110a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkScalar angle = 2 * SK_ScalarPI * i / 6; 111a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkPoint point; 112a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org point.fY = SkScalarSinCos(angle, &point.fX); 113a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org point.scale(kRadius); 114a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org point = center + point; 115a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org if (0 == i) { 116a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org hexagon.moveTo(point); 117a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org } else { 118a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org hexagon.lineTo(point); 119a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org } 120a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org } 121b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org fClips.addToTail()->setPath(hexagon); 122a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 123a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkMatrix scaleM; 124a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org scaleM.setScale(1.1f, 0.4f, kRadius, kRadius); 125a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org hexagon.transform(scaleM); 126b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org fClips.addToTail()->setPath(hexagon); 127b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org 128b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org fClips.addToTail()->setRect(SkRect::MakeXYWH(8.3f, 11.6f, 78.2f, 72.6f)); 129a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 130a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkPath rotRect; 131a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkRect rect = SkRect::MakeLTRB(10.f, 12.f, 80.f, 86.f); 132a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org rotRect.addRect(rect); 133a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkMatrix rotM; 134a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org rotM.setRotate(23.f, rect.centerX(), rect.centerY()); 135a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org rotRect.transform(rotM); 136b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org fClips.addToTail()->setPath(rotRect); 1371dab403e447f4f663690e018651338304fe6e86askia.committer@gmail.com 138a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org fBmp = make_bmp(100, 100); 139a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org } 140a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 14136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 142a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkScalar y = 0; 143dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein constexpr SkScalar kMargin = 10.f; 144a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 145a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkPaint bgPaint; 146a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org bgPaint.setAlpha(0x15); 1473661bc997620899695041010a750d11dbe8a972dMike Reed SkISize size = canvas->getBaseLayerSize(); 148a5517e2b190a8083b38964972b031c13e99f1012reed canvas->drawBitmapRect(fBmp, SkRect::MakeIWH(size.fWidth, size.fHeight), &bgPaint); 149a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 150dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein constexpr char kTxt[] = "Clip Me!"; 151b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org SkPaint txtPaint; 152b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org txtPaint.setTextSize(23.f); 153b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org txtPaint.setAntiAlias(true); 1541818acb6a4b11cd9a1d44ce5dde77452502a9796caryclark sk_tool_utils::set_portable_typeface(&txtPaint); 1552e096609b2f09512234ce69dcc0c30f8ab2d1b8fcaryclark txtPaint.setColor(sk_tool_utils::color_to_565(SK_ColorDKGRAY)); 156b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org SkScalar textW = txtPaint.measureText(kTxt, SK_ARRAY_COUNT(kTxt)-1); 157b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org 158b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org SkScalar startX = 0; 159b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org int testLayers = kBench_Mode != this->getMode(); 160b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org for (int doLayer = 0; doLayer <= testLayers; ++doLayer) { 161f045d600fc5c17f8a3537401baf45043e7617368bsalomon for (ClipList::Iter iter(fClips, ClipList::Iter::kHead_IterStart); 16249f085dddff10473b6ebf832a974288300224e60bsalomon iter.get(); 163b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org iter.next()) { 164b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org const Clip* clip = iter.get(); 165b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org SkScalar x = startX; 166b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org for (int aa = 0; aa < 2; ++aa) { 167b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org if (doLayer) { 168b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org SkRect bounds; 169b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org clip->getBounds(&bounds); 170b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org bounds.outset(2, 2); 171b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org bounds.offset(x, y); 17296fcdcc219d2a0d3579719b84b28bede76efba64halcanary canvas->saveLayer(&bounds, nullptr); 173b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org } else { 174b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org canvas->save(); 175b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org } 176b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org canvas->translate(x, y); 177c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reed clip->setOnCanvas(canvas, kIntersect_SkClipOp, SkToBool(aa)); 178b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org canvas->drawBitmap(fBmp, 0, 0); 179b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org canvas->restore(); 180b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org x += fBmp.width() + kMargin; 181b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org } 182b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org for (int aa = 0; aa < 2; ++aa) { 183b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org 184b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org SkPaint clipOutlinePaint; 185b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org clipOutlinePaint.setAntiAlias(true); 186b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org clipOutlinePaint.setColor(0x50505050); 187b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org clipOutlinePaint.setStyle(SkPaint::kStroke_Style); 188b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org clipOutlinePaint.setStrokeWidth(0); 189b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org 190b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org if (doLayer) { 191b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org SkRect bounds; 192b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org clip->getBounds(&bounds); 193b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org bounds.outset(2, 2); 194b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org bounds.offset(x, y); 19596fcdcc219d2a0d3579719b84b28bede76efba64halcanary canvas->saveLayer(&bounds, nullptr); 196b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org } else { 197b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org canvas->save(); 198b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org } 199b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org canvas->translate(x, y); 200b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org SkPath closedClipPath; 201b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org clip->asClosedPath(&closedClipPath); 202b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org canvas->drawPath(closedClipPath, clipOutlinePaint); 203c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reed clip->setOnCanvas(canvas, kIntersect_SkClipOp, SkToBool(aa)); 204b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org canvas->scale(1.f, 1.8f); 205b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org canvas->drawText(kTxt, SK_ARRAY_COUNT(kTxt)-1, 206b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org 0, 1.5f * txtPaint.getTextSize(), 207b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org txtPaint); 208b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org canvas->restore(); 209b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org x += textW + 2 * kMargin; 210b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org } 211b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org y += fBmp.height() + kMargin; 212a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org } 213b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org y = 0; 214b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org startX += 2 * fBmp.width() + SkScalarCeilToInt(2 * textW) + 6 * kMargin; 215a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org } 216a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org } 217a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 21836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein bool runAsBench() const override { return true; } 219cf5d9c993dcbd75d4cefe2d1de25c2b9645f6957mtklein 220a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.orgprivate: 221b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org class Clip { 222b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org public: 223b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org enum ClipType { 224b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org kNone_ClipType, 225b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org kPath_ClipType, 226b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org kRect_ClipType 227b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org }; 228b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org 229b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org Clip () : fClipType(kNone_ClipType) {} 2301dab403e447f4f663690e018651338304fe6e86askia.committer@gmail.com 231c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reed void setOnCanvas(SkCanvas* canvas, SkClipOp op, bool aa) const { 232b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org switch (fClipType) { 233b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org case kPath_ClipType: 234b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org canvas->clipPath(fPath, op, aa); 235b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org break; 236b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org case kRect_ClipType: 237b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org canvas->clipRect(fRect, op, aa); 238b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org break; 239b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org case kNone_ClipType: 240b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org SkDEBUGFAIL("Uninitialized Clip."); 241b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org break; 242b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org } 243b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org } 2441dab403e447f4f663690e018651338304fe6e86askia.committer@gmail.com 245b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org void asClosedPath(SkPath* path) const { 246b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org switch (fClipType) { 247b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org case kPath_ClipType: 248b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org *path = fPath; 249b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org path->close(); 250b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org break; 251b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org case kRect_ClipType: 252b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org path->reset(); 253b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org path->addRect(fRect); 254b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org break; 255b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org case kNone_ClipType: 256b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org SkDEBUGFAIL("Uninitialized Clip."); 257b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org break; 258b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org } 259b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org } 2601dab403e447f4f663690e018651338304fe6e86askia.committer@gmail.com 261b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org void setPath(const SkPath& path) { 262b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org fClipType = kPath_ClipType; 263b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org fPath = path; 264b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org } 2651dab403e447f4f663690e018651338304fe6e86askia.committer@gmail.com 266b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org void setRect(const SkRect& rect) { 267b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org fClipType = kRect_ClipType; 268b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org fRect = rect; 269b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org fPath.reset(); 270b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org } 2711dab403e447f4f663690e018651338304fe6e86askia.committer@gmail.com 272b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org ClipType getType() const { return fClipType; } 2731dab403e447f4f663690e018651338304fe6e86askia.committer@gmail.com 274b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org void getBounds(SkRect* bounds) const { 275b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org switch (fClipType) { 276b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org case kPath_ClipType: 277b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org *bounds = fPath.getBounds(); 278b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org break; 279b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org case kRect_ClipType: 280b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org *bounds = fRect; 281b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org break; 282b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org case kNone_ClipType: 283b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org SkDEBUGFAIL("Uninitialized Clip."); 284b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org break; 285b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org } 286b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org } 287b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org 288b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org private: 289b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org ClipType fClipType; 290b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org SkPath fPath; 291b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org SkRect fRect; 292b511be5a9b6bf194062b79206ac1ec0204aed8eecommit-bot@chromium.org }; 2931dab403e447f4f663690e018651338304fe6e86askia.committer@gmail.com 294f045d600fc5c17f8a3537401baf45043e7617368bsalomon typedef SkTLList<Clip, 1> ClipList; 295f045d600fc5c17f8a3537401baf45043e7617368bsalomon ClipList fClips; 296a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org SkBitmap fBmp; 297a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 298a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org typedef GM INHERITED; 299a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org}; 300a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org 301385fe4d4b62d7d1dd76116dd570df3290a2f487bhalcanaryDEF_GM(return new ConvexPolyClip;) 302a343c844ecefd743d23f7fba1683db14cfb3540fcommit-bot@chromium.org} 303