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