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