14384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com/* 24384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com * Copyright 2012 Google Inc. 34384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com * 44384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com * Use of this source code is governed by a BSD-style license that can be 54384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com * found in the LICENSE file. 64384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com */ 74384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 84384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com#include "gm.h" 94384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com#include "SkCanvas.h" 104384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com#include "SkPaint.h" 114384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com#include "SkGradientShader.h" 124384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 134384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic void intToScalars(SkScalar dst[], const int src[], int n) { 144384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com for (int i = 0; i < n; ++i) { 154384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com dst[i] = SkIntToScalar(src[i]); 164384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 174384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com} 184384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 194384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic void drawGrad(SkCanvas* canvas, const SkScalar d0[], const SkScalar d1[]) { 20cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com const SkRect bounds = SkRect::MakeXYWH(SkIntToScalar(-50), 21cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com SkIntToScalar(-50), 22cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com SkIntToScalar(200), 23cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com SkIntToScalar(100)); 24cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com 254384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPoint c0 = { d0[0], d0[1] }; 264384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkScalar r0 = d0[2]; 274384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPoint c1 = { d1[0], d1[1] }; 284384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkScalar r1 = d1[2]; 294384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 304384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkColor colors[] = { SK_ColorGREEN, SK_ColorRED }; 314384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPaint paint; 324384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com paint.setAntiAlias(true); 33992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark sk_tool_utils::set_portable_typeface(&paint); 34ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 35cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com SkString str; 36cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com str.printf("%g,%g,%g %g,%g,%g", 37cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com SkScalarToFloat(c0.fX), SkScalarToFloat(c0.fY), SkScalarToFloat(r0), 38cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com SkScalarToFloat(c1.fX), SkScalarToFloat(c1.fY), SkScalarToFloat(r1)); 39cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com canvas->drawText(str.c_str(), str.size(), 40cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com bounds.fLeft, bounds.fTop - paint.getTextSize()/2, paint); 41ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 42cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com paint.setShader(SkGradientShader::CreateTwoPointConical(c0, r0, c1, r1, 43cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com colors, NULL, 2, 44cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com SkShader::kClamp_TileMode))->unref(); 45cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com canvas->drawRect(bounds, paint); 46ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 474384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com paint.setShader(NULL); 48cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com paint.setColor(0x66000000); 494384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com paint.setStyle(SkPaint::kStroke_Style); 504384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->drawCircle(c0.fX, c0.fY, r0, paint); 514384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->drawCircle(c1.fX, c1.fY, r1, paint); 52cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com canvas->drawRect(bounds, paint); 534384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com} 544384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 554384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comclass TwoPointRadialGM : public skiagm::GM { 564384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.compublic: 574384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com TwoPointRadialGM() {} 584384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 594384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comprotected: 604384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkString onShortName() { 61cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com return SkString("twopointconical"); 624384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 634384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 64f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina SkISize onISize() { return SkISize::Make(480, 780); } 654384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 664384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com virtual void onDraw(SkCanvas* canvas) { 674384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com if (false) { 684384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPaint paint; 694384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com paint.setColor(SK_ColorBLUE); 704bdfb8c9d6482a56c7212034a6f73046227ed023robertphillips@google.com canvas->drawRect( 71ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com SkRect::MakeWH(SkIntToScalar(this->getISize().fWidth), 72ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com SkIntToScalar(this->getISize().fHeight)), 734bdfb8c9d6482a56c7212034a6f73046227ed023robertphillips@google.com paint); 744384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 754384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkPaint paint; 764384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com const int R0 = 20; 774384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com const int R1 = 40; 78ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 794384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com const SkScalar DX = SkIntToScalar(250); 80cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com const SkScalar DY = SkIntToScalar(130); 814384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 82cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com canvas->translate(SkIntToScalar(60), SkIntToScalar(70)); 834384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 844384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com static const int gData[] = { 854384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 0, 0, R0, 0, 0, R1, 86cb7be694c31f833c00a0dfb3529aaead3a4db62dreed@google.com 0, 0, R0, 20, 0, R1, 874384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 0, 0, R0, 25, 0, R1, 884384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 0, 0, R0, 100, 0, R1, 894384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 0, 0, R0, 25, 0, R0, 904384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 0, 0, R0, 100, 0, R0, 914384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com }; 92ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 934384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com int count = SK_ARRAY_COUNT(gData) / 6; 944384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com for (int i = 0; i < count; ++i) { 954384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com SkScalar data[6]; 964384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com intToScalars(data, &gData[i * 6], 6); 97ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 984384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com int n = canvas->save(); 994384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com drawGrad(canvas, &data[0], &data[3]); 1004384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->translate(DX, 0); 1014384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com drawGrad(canvas, &data[3], &data[0]); 1024384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->restoreToCount(n); 1034384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com canvas->translate(0, DY); 1044384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 1054384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com } 1064384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com}; 1074384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 1084384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com////////////////////////////////////////////////////////////////////////////// 1094384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 1104384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GM* F(void*) { return new TwoPointRadialGM; } 1114384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com 1124384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GMRegistry gR(F); 113