| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright 2012 Google Inc. | |
| 3 * | |
| 4 * Use of this source code is governed by a BSD-style license that can be | |
| 5 * found in the LICENSE file. | |
| 6 */ | |
| 7 | |
| 8 #include "gm.h" | |
| 9 #include "SkCanvas.h" | |
| 10 #include "SkPaint.h" | |
| 11 #include "SkGradientShader.h" | |
| 12 | |
| 13 static void intToScalars(SkScalar dst[], const int src[], int n) { | |
| 14 for (int i = 0; i < n; ++i) { | |
| 15 dst[i] = SkIntToScalar(src[i]); | |
| 16 } | |
| 17 } | |
| 18 | |
| 19 static void drawGrad(SkCanvas* canvas, const SkScalar d0[], const SkScalar d1[])
{ | |
| 20 const SkRect bounds = SkRect::MakeXYWH(SkIntToScalar(-50), | |
| 21 SkIntToScalar(-50), | |
| 22 SkIntToScalar(200), | |
| 23 SkIntToScalar(100)); | |
| 24 | |
| 25 SkPoint c0 = { d0[0], d0[1] }; | |
| 26 SkScalar r0 = d0[2]; | |
| 27 SkPoint c1 = { d1[0], d1[1] }; | |
| 28 SkScalar r1 = d1[2]; | |
| 29 | |
| 30 SkColor colors[] = { SK_ColorGREEN, SK_ColorRED }; | |
| 31 SkPaint paint; | |
| 32 paint.setAntiAlias(true); | |
| 33 sk_tool_utils::set_portable_typeface(&paint); | |
| 34 | |
| 35 SkString str; | |
| 36 str.printf("%g,%g,%g %g,%g,%g", | |
| 37 SkScalarToFloat(c0.fX), SkScalarToFloat(c0.fY), SkScalarToFloat(r
0), | |
| 38 SkScalarToFloat(c1.fX), SkScalarToFloat(c1.fY), SkScalarToFloat(r
1)); | |
| 39 canvas->drawText(str.c_str(), str.size(), | |
| 40 bounds.fLeft, bounds.fTop - paint.getTextSize()/2, paint); | |
| 41 | |
| 42 paint.setShader(SkGradientShader::CreateTwoPointConical(c0, r0, c1, r1, | |
| 43 colors, NULL, 2, | |
| 44 SkShader::kClamp_Til
eMode))->unref(); | |
| 45 canvas->drawRect(bounds, paint); | |
| 46 | |
| 47 paint.setShader(NULL); | |
| 48 paint.setColor(0x66000000); | |
| 49 paint.setStyle(SkPaint::kStroke_Style); | |
| 50 canvas->drawCircle(c0.fX, c0.fY, r0, paint); | |
| 51 canvas->drawCircle(c1.fX, c1.fY, r1, paint); | |
| 52 canvas->drawRect(bounds, paint); | |
| 53 } | |
| 54 | |
| 55 class TwoPointRadialGM : public skiagm::GM { | |
| 56 public: | |
| 57 TwoPointRadialGM() {} | |
| 58 | |
| 59 protected: | |
| 60 SkString onShortName() { | |
| 61 return SkString("twopointconical"); | |
| 62 } | |
| 63 | |
| 64 SkISize onISize() { return SkISize::Make(480, 780); } | |
| 65 | |
| 66 virtual void onDraw(SkCanvas* canvas) { | |
| 67 if (false) { | |
| 68 SkPaint paint; | |
| 69 paint.setColor(SK_ColorBLUE); | |
| 70 canvas->drawRect( | |
| 71 SkRect::MakeWH(SkIntToScalar(this->getISize().fWidth), | |
| 72 SkIntToScalar(this->getISize().fHeight)), | |
| 73 paint); | |
| 74 } | |
| 75 SkPaint paint; | |
| 76 const int R0 = 20; | |
| 77 const int R1 = 40; | |
| 78 | |
| 79 const SkScalar DX = SkIntToScalar(250); | |
| 80 const SkScalar DY = SkIntToScalar(130); | |
| 81 | |
| 82 canvas->translate(SkIntToScalar(60), SkIntToScalar(70)); | |
| 83 | |
| 84 static const int gData[] = { | |
| 85 0, 0, R0, 0, 0, R1, | |
| 86 0, 0, R0, 20, 0, R1, | |
| 87 0, 0, R0, 25, 0, R1, | |
| 88 0, 0, R0, 100, 0, R1, | |
| 89 0, 0, R0, 25, 0, R0, | |
| 90 0, 0, R0, 100, 0, R0, | |
| 91 }; | |
| 92 | |
| 93 int count = SK_ARRAY_COUNT(gData) / 6; | |
| 94 for (int i = 0; i < count; ++i) { | |
| 95 SkScalar data[6]; | |
| 96 intToScalars(data, &gData[i * 6], 6); | |
| 97 | |
| 98 int n = canvas->save(); | |
| 99 drawGrad(canvas, &data[0], &data[3]); | |
| 100 canvas->translate(DX, 0); | |
| 101 drawGrad(canvas, &data[3], &data[0]); | |
| 102 canvas->restoreToCount(n); | |
| 103 canvas->translate(0, DY); | |
| 104 } | |
| 105 } | |
| 106 }; | |
| 107 | |
| 108 ////////////////////////////////////////////////////////////////////////////// | |
| 109 | |
| 110 static skiagm::GM* F(void*) { return new TwoPointRadialGM; } | |
| 111 | |
| 112 static skiagm::GMRegistry gR(F); | |
| OLD | NEW |