/* * Copyright 2015 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "gm.h" #include "SkCanvas.h" #include "SkPath.h" #include "SkTArray.h" namespace skiagm { // this GM tests hairlines which fill nearly the entire render target class StLouisArchGM : public GM { protected: SkString onShortName() override { return SkString("stlouisarch"); } SkISize onISize() override { return SkISize::Make((int)kWidth, (int)kHeight); } void onOnceBeforeDraw() override { { SkPath* bigQuad = &fPaths.push_back(); bigQuad->moveTo(0, 0); bigQuad->quadTo(kWidth/2, kHeight, kWidth, 0); } { SkPath* degenBigQuad = &fPaths.push_back(); SkScalar yPos = kHeight / 2 + 10; degenBigQuad->moveTo(0, yPos); degenBigQuad->quadTo(0, yPos, kWidth, yPos); } { SkPath* bigCubic = &fPaths.push_back(); bigCubic->moveTo(0, 0); bigCubic->cubicTo(0, kHeight, kWidth, kHeight, kWidth, 0); } { SkPath* degenBigCubic = &fPaths.push_back(); SkScalar yPos = kHeight / 2; degenBigCubic->moveTo(0, yPos); degenBigCubic->cubicTo(0, yPos, 0, yPos, kWidth, yPos); } { SkPath* bigConic = &fPaths.push_back(); bigConic->moveTo(0, 0); bigConic->conicTo(kWidth/2, kHeight, kWidth, 0, .5); } { SkPath* degenBigConic = &fPaths.push_back(); SkScalar yPos = kHeight / 2 - 10; degenBigConic->moveTo(0, yPos); degenBigConic->conicTo(0, yPos, kWidth, yPos, .5); } } void onDraw(SkCanvas* canvas) override { canvas->save(); canvas->scale(1, -1); canvas->translate(0, -kHeight); for (int p = 0; p < fPaths.count(); ++p) { SkPaint paint; paint.setARGB(0xff, 0, 0, 0); paint.setAntiAlias(true); paint.setStyle(SkPaint::kStroke_Style); paint.setStrokeWidth(0); canvas->drawPath(fPaths[p], paint); } canvas->restore(); } const SkScalar kWidth = 256; const SkScalar kHeight = 256; private: SkTArray<SkPath> fPaths; typedef GM INHERITED; }; ////////////////////////////////////////////////////////////////////////////// static GM* MyFactory(void*) { return new StLouisArchGM; } static GMRegistry reg(MyFactory); }