16364807151ddf51c4197603aa185b3336f325357joshualitt/* 26364807151ddf51c4197603aa185b3336f325357joshualitt * Copyright 2015 Google Inc. 36364807151ddf51c4197603aa185b3336f325357joshualitt * 46364807151ddf51c4197603aa185b3336f325357joshualitt * Use of this source code is governed by a BSD-style license that can be 56364807151ddf51c4197603aa185b3336f325357joshualitt * found in the LICENSE file. 66364807151ddf51c4197603aa185b3336f325357joshualitt */ 76364807151ddf51c4197603aa185b3336f325357joshualitt 86364807151ddf51c4197603aa185b3336f325357joshualitt#include "gm.h" 96364807151ddf51c4197603aa185b3336f325357joshualitt#include "SkCanvas.h" 102880df2609eba09b555ca37be04b6ad89290c765Tom Hudson#include "SkPath.h" 116364807151ddf51c4197603aa185b3336f325357joshualitt#include "SkTArray.h" 126364807151ddf51c4197603aa185b3336f325357joshualitt 136364807151ddf51c4197603aa185b3336f325357joshualittnamespace skiagm { 146364807151ddf51c4197603aa185b3336f325357joshualitt 156364807151ddf51c4197603aa185b3336f325357joshualitt// this GM tests hairlines which fill nearly the entire render target 166364807151ddf51c4197603aa185b3336f325357joshualittclass StLouisArchGM : public GM { 176364807151ddf51c4197603aa185b3336f325357joshualittprotected: 1836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { 196364807151ddf51c4197603aa185b3336f325357joshualitt return SkString("stlouisarch"); 206364807151ddf51c4197603aa185b3336f325357joshualitt } 216364807151ddf51c4197603aa185b3336f325357joshualitt 2236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { return SkISize::Make((int)kWidth, (int)kHeight); } 236364807151ddf51c4197603aa185b3336f325357joshualitt 2436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onOnceBeforeDraw() override { 256364807151ddf51c4197603aa185b3336f325357joshualitt { 266364807151ddf51c4197603aa185b3336f325357joshualitt SkPath* bigQuad = &fPaths.push_back(); 276364807151ddf51c4197603aa185b3336f325357joshualitt bigQuad->moveTo(0, 0); 286364807151ddf51c4197603aa185b3336f325357joshualitt bigQuad->quadTo(kWidth/2, kHeight, kWidth, 0); 296364807151ddf51c4197603aa185b3336f325357joshualitt } 306364807151ddf51c4197603aa185b3336f325357joshualitt 316364807151ddf51c4197603aa185b3336f325357joshualitt { 326364807151ddf51c4197603aa185b3336f325357joshualitt SkPath* degenBigQuad = &fPaths.push_back(); 336364807151ddf51c4197603aa185b3336f325357joshualitt SkScalar yPos = kHeight / 2 + 10; 346364807151ddf51c4197603aa185b3336f325357joshualitt degenBigQuad->moveTo(0, yPos); 356364807151ddf51c4197603aa185b3336f325357joshualitt degenBigQuad->quadTo(0, yPos, kWidth, yPos); 366364807151ddf51c4197603aa185b3336f325357joshualitt } 376364807151ddf51c4197603aa185b3336f325357joshualitt 386364807151ddf51c4197603aa185b3336f325357joshualitt 396364807151ddf51c4197603aa185b3336f325357joshualitt { 406364807151ddf51c4197603aa185b3336f325357joshualitt SkPath* bigCubic = &fPaths.push_back(); 416364807151ddf51c4197603aa185b3336f325357joshualitt bigCubic->moveTo(0, 0); 426364807151ddf51c4197603aa185b3336f325357joshualitt bigCubic->cubicTo(0, kHeight, 436364807151ddf51c4197603aa185b3336f325357joshualitt kWidth, kHeight, 446364807151ddf51c4197603aa185b3336f325357joshualitt kWidth, 0); 456364807151ddf51c4197603aa185b3336f325357joshualitt } 466364807151ddf51c4197603aa185b3336f325357joshualitt 476364807151ddf51c4197603aa185b3336f325357joshualitt { 486364807151ddf51c4197603aa185b3336f325357joshualitt SkPath* degenBigCubic = &fPaths.push_back(); 496364807151ddf51c4197603aa185b3336f325357joshualitt SkScalar yPos = kHeight / 2; 506364807151ddf51c4197603aa185b3336f325357joshualitt degenBigCubic->moveTo(0, yPos); 516364807151ddf51c4197603aa185b3336f325357joshualitt degenBigCubic->cubicTo(0, yPos, 526364807151ddf51c4197603aa185b3336f325357joshualitt 0, yPos, 536364807151ddf51c4197603aa185b3336f325357joshualitt kWidth, yPos); 546364807151ddf51c4197603aa185b3336f325357joshualitt } 556364807151ddf51c4197603aa185b3336f325357joshualitt 566364807151ddf51c4197603aa185b3336f325357joshualitt { 576364807151ddf51c4197603aa185b3336f325357joshualitt SkPath* bigConic = &fPaths.push_back(); 586364807151ddf51c4197603aa185b3336f325357joshualitt bigConic->moveTo(0, 0); 596364807151ddf51c4197603aa185b3336f325357joshualitt bigConic->conicTo(kWidth/2, kHeight, kWidth, 0, .5); 606364807151ddf51c4197603aa185b3336f325357joshualitt } 616364807151ddf51c4197603aa185b3336f325357joshualitt 626364807151ddf51c4197603aa185b3336f325357joshualitt { 636364807151ddf51c4197603aa185b3336f325357joshualitt SkPath* degenBigConic = &fPaths.push_back(); 646364807151ddf51c4197603aa185b3336f325357joshualitt SkScalar yPos = kHeight / 2 - 10; 656364807151ddf51c4197603aa185b3336f325357joshualitt degenBigConic->moveTo(0, yPos); 666364807151ddf51c4197603aa185b3336f325357joshualitt degenBigConic->conicTo(0, yPos, kWidth, yPos, .5); 676364807151ddf51c4197603aa185b3336f325357joshualitt } 686364807151ddf51c4197603aa185b3336f325357joshualitt } 696364807151ddf51c4197603aa185b3336f325357joshualitt 7036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 716364807151ddf51c4197603aa185b3336f325357joshualitt canvas->save(); 726364807151ddf51c4197603aa185b3336f325357joshualitt canvas->scale(1, -1); 736364807151ddf51c4197603aa185b3336f325357joshualitt canvas->translate(0, -kHeight); 746364807151ddf51c4197603aa185b3336f325357joshualitt for (int p = 0; p < fPaths.count(); ++p) { 756364807151ddf51c4197603aa185b3336f325357joshualitt SkPaint paint; 766364807151ddf51c4197603aa185b3336f325357joshualitt paint.setARGB(0xff, 0, 0, 0); 776364807151ddf51c4197603aa185b3336f325357joshualitt paint.setAntiAlias(true); 786364807151ddf51c4197603aa185b3336f325357joshualitt paint.setStyle(SkPaint::kStroke_Style); 796364807151ddf51c4197603aa185b3336f325357joshualitt paint.setStrokeWidth(0); 806364807151ddf51c4197603aa185b3336f325357joshualitt canvas->drawPath(fPaths[p], paint); 816364807151ddf51c4197603aa185b3336f325357joshualitt } 826364807151ddf51c4197603aa185b3336f325357joshualitt canvas->restore(); 836364807151ddf51c4197603aa185b3336f325357joshualitt } 846364807151ddf51c4197603aa185b3336f325357joshualitt 856364807151ddf51c4197603aa185b3336f325357joshualitt const SkScalar kWidth = 256; 866364807151ddf51c4197603aa185b3336f325357joshualitt const SkScalar kHeight = 256; 876364807151ddf51c4197603aa185b3336f325357joshualitt 886364807151ddf51c4197603aa185b3336f325357joshualittprivate: 896364807151ddf51c4197603aa185b3336f325357joshualitt SkTArray<SkPath> fPaths; 906364807151ddf51c4197603aa185b3336f325357joshualitt typedef GM INHERITED; 916364807151ddf51c4197603aa185b3336f325357joshualitt}; 926364807151ddf51c4197603aa185b3336f325357joshualitt 936364807151ddf51c4197603aa185b3336f325357joshualitt////////////////////////////////////////////////////////////////////////////// 946364807151ddf51c4197603aa185b3336f325357joshualitt 956364807151ddf51c4197603aa185b3336f325357joshualittstatic GM* MyFactory(void*) { return new StLouisArchGM; } 966364807151ddf51c4197603aa185b3336f325357joshualittstatic GMRegistry reg(MyFactory); 976364807151ddf51c4197603aa185b3336f325357joshualitt 986364807151ddf51c4197603aa185b3336f325357joshualitt} 99