11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "gm.h"
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkCanvas.h"
101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkGradientShader.h"
111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
121cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// test shader w/ transparency
131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic SkShader* make_grad(SkScalar width) {
141cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkColor colors[] = { SK_ColorRED, 0x0000FF00, SK_ColorBLUE };
151cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkPoint pts[] = { { 0, 0 }, { width, 0 } };
161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    return SkGradientShader::CreateLinear(pts, colors, NULL,
171cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                                          SK_ARRAY_COUNT(colors),
181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                                          SkShader::kMirror_TileMode);
191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger}
201cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// test opaque shader
221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic SkShader* make_grad2(SkScalar width) {
231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkColor colors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE };
241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkPoint pts[] = { { 0, 0 }, { width, 0 } };
251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    return SkGradientShader::CreateLinear(pts, colors, NULL,
261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                                          SK_ARRAY_COUNT(colors),
271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                                          SkShader::kMirror_TileMode);
281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger}
291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergernamespace skiagm {
311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
321cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass GradTextGM : public GM {
331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerpublic:
341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    GradTextGM () {}
351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprotected:
371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual SkString onShortName() {
391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        return SkString("gradtext");
401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    }
411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual SkISize onISize() { return make_isize(500, 480); }
431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    static void draw_text(SkCanvas* canvas, const SkPaint& paint) {
451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        const char* text = "When in the course of human events";
461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        size_t len = strlen(text);
471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        canvas->drawText(text, len, 0, 0, paint);
481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    }
491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    static void draw_text3(SkCanvas* canvas, const SkPaint& paint) {
511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        SkPaint p(paint);
521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        p.setAntiAlias(false);
541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        draw_text(canvas, p);
551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        p.setAntiAlias(true);
561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        canvas->translate(0, paint.getTextSize() * 4/3);
571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        draw_text(canvas, p);
581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        p.setLCDRenderText(true);
591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        canvas->translate(0, paint.getTextSize() * 4/3);
601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        draw_text(canvas, p);
611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    }
621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual void onDraw(SkCanvas* canvas) {
641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        SkPaint paint;
651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        paint.setTextSize(SkIntToScalar(26));
661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        const SkISize& size = this->getISize();
681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        SkRect r = SkRect::MakeWH(SkIntToScalar(size.width()),
691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                                  SkIntToScalar(size.height()) / 2);
701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        canvas->drawRect(r, paint);
711cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        canvas->translate(SkIntToScalar(20), paint.getTextSize());
731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        for (int i = 0; i < 2; ++i) {
751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            paint.setShader(make_grad(SkIntToScalar(80)))->unref();
761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            draw_text3(canvas, paint);
771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            canvas->translate(0, paint.getTextSize() * 2);
791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            paint.setShader(make_grad2(SkIntToScalar(80)))->unref();
811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            draw_text3(canvas, paint);
821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger            canvas->translate(0, paint.getTextSize() * 2);
841cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        }
851cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    }
861cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
871cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprivate:
881cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    typedef GM INHERITED;
891cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger};
901cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
911cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger//////////////////////////////////////////////////////////////////////////////
921cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
931cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic GM* MyFactory(void*) { return new GradTextGM; }
941cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic GMRegistry reg(MyFactory);
951cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
961cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger}
971cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
98