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