1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2015 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "gm/gm.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPath.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTArray.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker using namespace skia_private; 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker namespace skiagm { 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker // this GM tests hairlines which fill nearly the entire render target 22*c8dee2aaSAndroid Build Coastguard Worker class StLouisArchGM : public GM { 23*c8dee2aaSAndroid Build Coastguard Worker protected: getName() const24*c8dee2aaSAndroid Build Coastguard Worker SkString getName() const override { return SkString("stlouisarch"); } 25*c8dee2aaSAndroid Build Coastguard Worker getISize()26*c8dee2aaSAndroid Build Coastguard Worker SkISize getISize() override { return SkISize::Make((int)kWidth, (int)kHeight); } 27*c8dee2aaSAndroid Build Coastguard Worker onOnceBeforeDraw()28*c8dee2aaSAndroid Build Coastguard Worker void onOnceBeforeDraw() override { 29*c8dee2aaSAndroid Build Coastguard Worker { 30*c8dee2aaSAndroid Build Coastguard Worker SkPath* bigQuad = &fPaths.push_back(); 31*c8dee2aaSAndroid Build Coastguard Worker bigQuad->moveTo(0, 0); 32*c8dee2aaSAndroid Build Coastguard Worker bigQuad->quadTo(kWidth/2, kHeight, kWidth, 0); 33*c8dee2aaSAndroid Build Coastguard Worker } 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker { 36*c8dee2aaSAndroid Build Coastguard Worker SkPath* degenBigQuad = &fPaths.push_back(); 37*c8dee2aaSAndroid Build Coastguard Worker SkScalar yPos = kHeight / 2 + 10; 38*c8dee2aaSAndroid Build Coastguard Worker degenBigQuad->moveTo(0, yPos); 39*c8dee2aaSAndroid Build Coastguard Worker degenBigQuad->quadTo(0, yPos, kWidth, yPos); 40*c8dee2aaSAndroid Build Coastguard Worker } 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker { 44*c8dee2aaSAndroid Build Coastguard Worker SkPath* bigCubic = &fPaths.push_back(); 45*c8dee2aaSAndroid Build Coastguard Worker bigCubic->moveTo(0, 0); 46*c8dee2aaSAndroid Build Coastguard Worker bigCubic->cubicTo(0, kHeight, 47*c8dee2aaSAndroid Build Coastguard Worker kWidth, kHeight, 48*c8dee2aaSAndroid Build Coastguard Worker kWidth, 0); 49*c8dee2aaSAndroid Build Coastguard Worker } 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker { 52*c8dee2aaSAndroid Build Coastguard Worker SkPath* degenBigCubic = &fPaths.push_back(); 53*c8dee2aaSAndroid Build Coastguard Worker SkScalar yPos = kHeight / 2; 54*c8dee2aaSAndroid Build Coastguard Worker degenBigCubic->moveTo(0, yPos); 55*c8dee2aaSAndroid Build Coastguard Worker degenBigCubic->cubicTo(0, yPos, 56*c8dee2aaSAndroid Build Coastguard Worker 0, yPos, 57*c8dee2aaSAndroid Build Coastguard Worker kWidth, yPos); 58*c8dee2aaSAndroid Build Coastguard Worker } 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker { 61*c8dee2aaSAndroid Build Coastguard Worker SkPath* bigConic = &fPaths.push_back(); 62*c8dee2aaSAndroid Build Coastguard Worker bigConic->moveTo(0, 0); 63*c8dee2aaSAndroid Build Coastguard Worker bigConic->conicTo(kWidth/2, kHeight, kWidth, 0, .5); 64*c8dee2aaSAndroid Build Coastguard Worker } 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker { 67*c8dee2aaSAndroid Build Coastguard Worker SkPath* degenBigConic = &fPaths.push_back(); 68*c8dee2aaSAndroid Build Coastguard Worker SkScalar yPos = kHeight / 2 - 10; 69*c8dee2aaSAndroid Build Coastguard Worker degenBigConic->moveTo(0, yPos); 70*c8dee2aaSAndroid Build Coastguard Worker degenBigConic->conicTo(0, yPos, kWidth, yPos, .5); 71*c8dee2aaSAndroid Build Coastguard Worker } 72*c8dee2aaSAndroid Build Coastguard Worker } 73*c8dee2aaSAndroid Build Coastguard Worker onDraw(SkCanvas * canvas)74*c8dee2aaSAndroid Build Coastguard Worker void onDraw(SkCanvas* canvas) override { 75*c8dee2aaSAndroid Build Coastguard Worker canvas->save(); 76*c8dee2aaSAndroid Build Coastguard Worker canvas->scale(1, -1); 77*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(0, -kHeight); 78*c8dee2aaSAndroid Build Coastguard Worker for (int p = 0; p < fPaths.size(); ++p) { 79*c8dee2aaSAndroid Build Coastguard Worker SkPaint paint; 80*c8dee2aaSAndroid Build Coastguard Worker paint.setARGB(0xff, 0, 0, 0); 81*c8dee2aaSAndroid Build Coastguard Worker paint.setAntiAlias(true); 82*c8dee2aaSAndroid Build Coastguard Worker paint.setStyle(SkPaint::kStroke_Style); 83*c8dee2aaSAndroid Build Coastguard Worker paint.setStrokeWidth(0); 84*c8dee2aaSAndroid Build Coastguard Worker canvas->drawPath(fPaths[p], paint); 85*c8dee2aaSAndroid Build Coastguard Worker } 86*c8dee2aaSAndroid Build Coastguard Worker canvas->restore(); 87*c8dee2aaSAndroid Build Coastguard Worker } 88*c8dee2aaSAndroid Build Coastguard Worker 89*c8dee2aaSAndroid Build Coastguard Worker const SkScalar kWidth = 256; 90*c8dee2aaSAndroid Build Coastguard Worker const SkScalar kHeight = 256; 91*c8dee2aaSAndroid Build Coastguard Worker 92*c8dee2aaSAndroid Build Coastguard Worker private: 93*c8dee2aaSAndroid Build Coastguard Worker TArray<SkPath> fPaths; 94*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GM; 95*c8dee2aaSAndroid Build Coastguard Worker }; 96*c8dee2aaSAndroid Build Coastguard Worker 97*c8dee2aaSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 98*c8dee2aaSAndroid Build Coastguard Worker 99*c8dee2aaSAndroid Build Coastguard Worker DEF_GM( return new StLouisArchGM; ) 100*c8dee2aaSAndroid Build Coastguard Worker 101*c8dee2aaSAndroid Build Coastguard Worker } // namespace skiagm 102