gradtext.cpp revision fb82300d1b41f21d1d154847b6bf3fb73d5b6f81
1e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com/*
2e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com * Copyright 2011 Google Inc.
3e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com *
4e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com * Use of this source code is governed by a BSD-style license that can be
5e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com * found in the LICENSE file.
6e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com */
7e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
8e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com#include "gm.h"
9e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com#include "SkCanvas.h"
10e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com#include "SkGradientShader.h"
11e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
12fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com// test shader w/ transparency
13e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.comstatic SkShader* make_grad(SkScalar width) {
14fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com    SkColor colors[] = { SK_ColorRED, 0x0000FF00, SK_ColorBLUE };
15e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    SkPoint pts[] = { { 0, 0 }, { width, 0 } };
16fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com    return SkGradientShader::CreateLinear(pts, colors, NULL,
17e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com                                          SK_ARRAY_COUNT(colors),
18e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com                                          SkShader::kMirror_TileMode);
19e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com}
20e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
21fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com// test opaque shader
22e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.comstatic SkShader* make_grad2(SkScalar width) {
23e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    SkColor colors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE };
24e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    SkPoint pts[] = { { 0, 0 }, { width, 0 } };
25e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    return SkGradientShader::CreateLinear(pts, colors, NULL,
26e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com                                          SK_ARRAY_COUNT(colors),
27e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com                                          SkShader::kMirror_TileMode);
28e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com}
29e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
30e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.comnamespace skiagm {
31e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
32e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.comclass GradTextGM : public GM {
33e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.compublic:
34e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    GradTextGM () {}
35e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
36e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.comprotected:
37e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
38e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    virtual SkString onShortName() {
39e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com        return SkString("gradtext");
40e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    }
41e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
42fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com    virtual SkISize onISize() { return make_isize(500, 480); }
43e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
44e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    static void draw_text(SkCanvas* canvas, const SkPaint& paint) {
45e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com        const char* text = "When in the course of human events";
46e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com        size_t len = strlen(text);
47e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com        canvas->drawText(text, len, 0, 0, paint);
48e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    }
49e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
50e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    static void draw_text3(SkCanvas* canvas, const SkPaint& paint) {
51e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com        SkPaint p(paint);
52e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
53e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com        p.setAntiAlias(false);
54e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com        draw_text(canvas, p);
55e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com        p.setAntiAlias(true);
56fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com        canvas->translate(0, paint.getTextSize() * 4/3);
57e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com        draw_text(canvas, p);
58e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com        p.setLCDRenderText(true);
59fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com        canvas->translate(0, paint.getTextSize() * 4/3);
60e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com        draw_text(canvas, p);
61e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    }
62e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
63e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    virtual void onDraw(SkCanvas* canvas) {
64fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com        SkPaint paint;
65fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com        paint.setTextSize(SkIntToScalar(26));
66e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
67fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com        const SkISize& size = this->getISize();
68fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com        SkRect r = SkRect::MakeWH(SkIntToScalar(size.width()),
69fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com                                  SkIntToScalar(size.height()) / 2);
70fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com        canvas->drawRect(r, paint);
71e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
72fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com        canvas->translate(SkIntToScalar(20), paint.getTextSize());
73fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com
74fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com        for (int i = 0; i < 2; ++i) {
75fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com            paint.setShader(make_grad(SkIntToScalar(80)))->unref();
76fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com            draw_text3(canvas, paint);
77fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com
78fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com            canvas->translate(0, paint.getTextSize() * 2);
79e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
80fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com            paint.setShader(make_grad2(SkIntToScalar(80)))->unref();
81fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com            draw_text3(canvas, paint);
82fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com
83fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com            canvas->translate(0, paint.getTextSize() * 2);
84fb82300d1b41f21d1d154847b6bf3fb73d5b6f81reed@google.com        }
85e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    }
86e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
87e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.comprivate:
88e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com    typedef GM INHERITED;
89e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com};
90e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
91e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com//////////////////////////////////////////////////////////////////////////////
92e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
93e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.comstatic GM* MyFactory(void*) { return new GradTextGM; }
94e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.comstatic GMRegistry reg(MyFactory);
95e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
96e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com}
97e805535b19e0e3d5459b69ed53d6986a1fe6663dreed@google.com
98