141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com/*
241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com * Copyright 2011 Google Inc.
341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com *
441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com * Use of this source code is governed by a BSD-style license that can be
541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com * found in the LICENSE file.
641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com */
741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com#include "gm.h"
841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com#include "SkCanvas.h"
941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com#include "SkGradientShader.h"
1041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
1141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.comnamespace skiagm {
1241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
13dac522589e9395b4654a1a708f1bd971f37f95a5commit-bot@chromium.orgstatic void makebm(SkBitmap* bm, int w, int h) {
14dac522589e9395b4654a1a708f1bd971f37f95a5commit-bot@chromium.org    bm->allocN32Pixels(w, h);
15dbfac8a72393eaf01670aeb3244de0e18d8faf98junov@google.com    bm->eraseColor(SK_ColorTRANSPARENT);
1641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
1741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    SkCanvas    canvas(*bm);
1841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    SkScalar    s = SkIntToScalar(SkMin32(w, h));
1941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    static const SkPoint     kPts0[] = { { 0, 0 }, { s, s } };
2041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    static const SkPoint     kPts1[] = { { s, 0 }, { 0, s } };
2141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    static const SkScalar    kPos[] = { 0, SK_Scalar1/2, SK_Scalar1 };
2241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    static const SkColor kColors0[] = {0x40FF00FF, 0xF0FFFF00, 0x4000FFFF };
2341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    static const SkColor kColors1[] = {0xF0FF00FF, 0x80FFFF00, 0xF000FFFF };
24fc84359aa920567e72742877a1249f52d076ad35skia.committer@gmail.com
2541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
2641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    SkPaint     paint;
2741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
2841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    paint.setShader(SkGradientShader::CreateLinear(kPts0, kColors0, kPos,
2983f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org                    SK_ARRAY_COUNT(kColors0), SkShader::kClamp_TileMode))->unref();
3041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    canvas.drawPaint(paint);
3141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    paint.setShader(SkGradientShader::CreateLinear(kPts1, kColors1, kPos,
3241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    SK_ARRAY_COUNT(kColors1), SkShader::kClamp_TileMode))->unref();
3341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    canvas.drawPaint(paint);
3441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com}
3541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
3641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com///////////////////////////////////////////////////////////////////////////////
3741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
3841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.comstruct LabeledMatrix {
3941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    SkMatrix    fMatrix;
4041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    const char* fLabel;
4141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com};
4241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
4341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.comclass ShaderText2GM : public GM {
4441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.compublic:
4541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    ShaderText2GM() {
4641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        this->setBGColor(0xFFDDDDDD);
4741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    }
4841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
4941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.comprotected:
5041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
5141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    SkString onShortName() {
5241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        return SkString("shadertext2");
5341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    }
5441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
55f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina    SkISize onISize() { return SkISize::Make(1800, 900); }
5641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
5741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    virtual void onDraw(SkCanvas* canvas) {
5841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        static const char kText[] = "SKIA";
5941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        static const int kTextLen = SK_ARRAY_COUNT(kText) - 1;
6041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        static const int kPointSize = 55;
6141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
6241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        SkTDArray<LabeledMatrix> matrices;
6341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        matrices.append()->fMatrix.reset();
6441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        matrices.top().fLabel = "Identity";
6541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        matrices.append()->fMatrix.setScale(1.2f, 0.8f);
6641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        matrices.top().fLabel = "Scale";
6741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        matrices.append()->fMatrix.setRotate(10.f);
6841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        matrices.top().fLabel = "Rotate";
6941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        matrices.append()->fMatrix.reset();
7041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        matrices.top().fMatrix.setPerspX(-0.0015f);
7141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        matrices.top().fMatrix.setPerspY(+0.0015f);
7241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        matrices.top().fLabel = "Persp";
7341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
7441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        SkTDArray<LabeledMatrix> localMatrices;
7541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        localMatrices.append()->fMatrix.reset();
7641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        localMatrices.top().fLabel = "Identity";
7741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        localMatrices.append()->fMatrix.setScale(2.5f, 0.2f);
7841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        localMatrices.top().fLabel = "Scale";
7941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        localMatrices.append()->fMatrix.setRotate(45.f);
8041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        localMatrices.top().fLabel = "Rotate";
8141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        localMatrices.append()->fMatrix.reset();
8241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        localMatrices.top().fMatrix.setPerspX(-0.007f);
8341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        localMatrices.top().fMatrix.setPerspY(+0.008f);
8441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        localMatrices.top().fLabel = "Persp";
8541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
8641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        static SkBitmap bmp;
8741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        if (bmp.isNull()) {
88dac522589e9395b4654a1a708f1bd971f37f95a5commit-bot@chromium.org            makebm(&bmp, kPointSize / 2, kPointSize / 2);
8941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        }
90fc84359aa920567e72742877a1249f52d076ad35skia.committer@gmail.com
9141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        SkPaint fillPaint;
9241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        fillPaint.setAntiAlias(true);
93992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark        sk_tool_utils::set_portable_typeface(&fillPaint);
9441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        fillPaint.setTextSize(SkIntToScalar(kPointSize));
954469938e92d779dff05e745559e67907bbf21e78reed@google.com        fillPaint.setFilterLevel(SkPaint::kLow_FilterLevel);
9641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
9741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        SkPaint outlinePaint;
9841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        outlinePaint.setAntiAlias(true);
99992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark        sk_tool_utils::set_portable_typeface(&outlinePaint);
10041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        outlinePaint.setTextSize(SkIntToScalar(kPointSize));
10141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        outlinePaint.setStyle(SkPaint::kStroke_Style);
10241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        outlinePaint.setStrokeWidth(0.f);
10341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
10441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        SkScalar w = fillPaint.measureText(kText, kTextLen);
10541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        static SkScalar kPadY = 0.5f * kPointSize;
10641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        static SkScalar kPadX = 1.5f * kPointSize;
10741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
10841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        SkPaint strokePaint(fillPaint);
10941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        strokePaint.setStyle(SkPaint::kStroke_Style);
11041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        strokePaint.setStrokeWidth(kPointSize * 0.1f);
11141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
11241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        SkPaint labelPaint;
11341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        labelPaint.setColor(0xff000000);
11441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        labelPaint.setAntiAlias(true);
115992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark        sk_tool_utils::set_portable_typeface(&labelPaint);
11641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        labelPaint.setTextSize(12.f);
11741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
11841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        canvas->translate(15.f, 15.f);
11941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        canvas->drawBitmap(bmp, 0, 0);
12041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        canvas->translate(0, bmp.height() + labelPaint.getTextSize() + 15.f);
12141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
12241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        static const char kLabelLabel[] = "localM / canvasM";
12341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        canvas->drawText(kLabelLabel, strlen(kLabelLabel), 0, 0, labelPaint);
12441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        canvas->translate(0, 15.f);
12541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
12641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        canvas->save();
12741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        SkScalar maxLabelW = 0;
12841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        canvas->translate(0, kPadY / 2 + kPointSize);
12941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        for (int lm = 0; lm < localMatrices.count(); ++lm) {
13041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com            canvas->drawText(matrices[lm].fLabel, strlen(matrices[lm].fLabel),
13141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                             0, labelPaint.getTextSize() - 1, labelPaint);
13241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com            SkScalar labelW = labelPaint.measureText(matrices[lm].fLabel,
13341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                                                     strlen(matrices[lm].fLabel));
13441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com            maxLabelW = SkMaxScalar(maxLabelW, labelW);
13541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com            canvas->translate(0.f, 2 * kPointSize + 2.5f * kPadY);
13641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        }
13741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        canvas->restore();
13841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
13941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        canvas->translate(maxLabelW + kPadX / 2.f, 0.f);
14041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
14141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        for (int s = 0; s < 2; ++s) {
14241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com            SkPaint& paint = s ? strokePaint : fillPaint;
14341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
14435d4872f9a4d49395dd387677eb828ce0e8176bfcommit-bot@chromium.org            SkScalar columnH = 0;
14541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com            for (int m = 0; m < matrices.count(); ++m) {
14641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                columnH = 0;
14741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                canvas->save();
14841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                canvas->drawText(matrices[m].fLabel, strlen(matrices[m].fLabel),
14941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                                 0, labelPaint.getTextSize() - 1, labelPaint);
15041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                canvas->translate(0, kPadY / 2 + kPointSize);
15141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                columnH += kPadY / 2 + kPointSize;
15241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                for (int lm = 0; lm < localMatrices.count(); ++lm) {
153bd090452530d2de98e1601de36be9ce3c91d1bdccommit-bot@chromium.org                    paint.setShader(
154bd090452530d2de98e1601de36be9ce3c91d1bdccommit-bot@chromium.org                            SkShader::CreateBitmapShader(bmp,
155bd090452530d2de98e1601de36be9ce3c91d1bdccommit-bot@chromium.org                                                         SkShader::kMirror_TileMode,
156bd090452530d2de98e1601de36be9ce3c91d1bdccommit-bot@chromium.org                                                         SkShader::kRepeat_TileMode,
157bd090452530d2de98e1601de36be9ce3c91d1bdccommit-bot@chromium.org                                                         &localMatrices[lm].fMatrix))->unref();
15841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
15941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    canvas->save();
16041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                        canvas->concat(matrices[m].fMatrix);
16141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                        canvas->drawText(kText, kTextLen, 0, 0, paint);
16241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                        canvas->drawText(kText, kTextLen, 0, 0, outlinePaint);
16341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    canvas->restore();
16441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
16541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    SkPath path;
16641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    path.arcTo(SkRect::MakeXYWH(-0.1f * w, 0.f,
16741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                                                1.2f * w, 2.f * kPointSize),
16841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                                                225.f, 359.f,
16941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                                                false);
17041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    path.close();
17141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
17241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    canvas->translate(0.f, kPointSize + kPadY);
17341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    columnH += kPointSize + kPadY;
17441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
17541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    canvas->save();
17641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                        canvas->concat(matrices[m].fMatrix);
17741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                        canvas->drawTextOnPath(kText, kTextLen, path, NULL, paint);
17841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                        canvas->drawTextOnPath(kText, kTextLen, path, NULL, outlinePaint);
17941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    canvas->restore();
18041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    SkPaint stroke;
18141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    stroke.setStyle(SkPaint::kStroke_Style);
18241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    canvas->translate(0.f, kPointSize + kPadY);
18341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                    columnH += kPointSize + kPadY;
18441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                }
18541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                canvas->restore();
18641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                canvas->translate(w + kPadX, 0.f);
18741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com            }
18841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com            if (0 == s) {
18941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                canvas->drawLine(0.f, -kPadY, 0.f, columnH + kPadY, outlinePaint);
19041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                canvas->translate(kPadX / 2, 0.f);
19141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                static const char kFillLabel[] = "Filled";
19241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                static const char kStrokeLabel[] = "Stroked";
19341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                SkScalar y = columnH + kPadY / 2;
19441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                SkScalar fillX = -outlinePaint.measureText(kFillLabel, strlen(kFillLabel)) - kPadX;
19541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                SkScalar strokeX = kPadX;
19641fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                canvas->drawText(kFillLabel, strlen(kFillLabel), fillX, y, labelPaint);
19741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com                canvas->drawText(kStrokeLabel, strlen(kStrokeLabel), strokeX, y, labelPaint);
19841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com            }
19941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com        }
20041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    }
20141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
2021b6c73d67a8a7666e13fe774cfed3bc6f38538f5reed@google.com    virtual uint32_t onGetFlags() const SK_OVERRIDE {
2031b6c73d67a8a7666e13fe774cfed3bc6f38538f5reed@google.com        // disable 565 for now, til mike fixes the debug assert
204a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        return kSkip565_Flag | kSkipTiled_Flag;
2051b6c73d67a8a7666e13fe774cfed3bc6f38538f5reed@google.com    }
2061b6c73d67a8a7666e13fe774cfed3bc6f38538f5reed@google.com
20741fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.comprivate:
20841fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com    typedef GM INHERITED;
20941fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com};
21041fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
21141fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com///////////////////////////////////////////////////////////////////////////////
21241fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com
21341fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.comstatic GM* MyFactory(void*) { return new ShaderText2GM; }
21441fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.comstatic GMRegistry reg(MyFactory);
21541fe45b955dc2f572bb1b6598d3b2f9d0c0447a4bsalomon@google.com}
216