2 * Copyright 2012 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
13 typedef void (*InsetProc)(const SkRRect&, SkScalar dx, SkScalar dy, SkRRect*);
15 static void inset0(const SkRRect& src, SkScalar dx, SkScalar dy, SkRRect* dst) {
16 SkRect r = src.rect();
25 for (int i = 0; i < 4; ++i) {
26 radii[i] = src.radii((SkRRect::Corner)i);
28 for (int i = 0; i < 4; ++i) {
32 dst->setRectRadii(r, radii);
35 static void inset1(const SkRRect& src, SkScalar dx, SkScalar dy, SkRRect* dst) {
36 SkRect r = src.rect();
45 for (int i = 0; i < 4; ++i) {
46 radii[i] = src.radii((SkRRect::Corner)i);
48 dst->setRectRadii(r, radii);
51 static void draw_rrect_color(SkCanvas* canvas, const SkRRect& rrect) {
53 paint.setAntiAlias(true);
54 paint.setStyle(SkPaint::kStroke_Style);
57 paint.setColor(SK_ColorRED);
58 } else if (rrect.isOval()) {
59 paint.setColor(0xFF008800);
60 } else if (rrect.isSimple()) {
61 paint.setColor(SK_ColorBLUE);
63 paint.setColor(SK_ColorBLACK);
65 canvas->drawRRect(rrect, paint);
68 static void drawrr(SkCanvas* canvas, const SkRRect& rrect, InsetProc proc) {
70 for (SkScalar d = -30; d <= 30; d += 10) {
71 proc(rrect, d, d, &rr);
72 draw_rrect_color(canvas, rr);
76 class RRectGM : public skiagm::GM {
81 virtual SkString onShortName() {
82 return SkString("rrect");
85 virtual SkISize onISize() {
86 return SkISize::Make(640, 480);
89 virtual void onDraw(SkCanvas* canvas) {
90 static const InsetProc insetProcs[] = { inset0, inset1 };
93 SkRect r = { 0, 0, 120, 160 };
95 { 0, 0 }, { 20, 20 }, { 10, 40 }, { 40, 40 }
100 rrect[2].setRectXY(r, 20, 20);
101 rrect[3].setRectRadii(r, radii);
103 canvas->translate(50, 50);
104 for (size_t j = 0; j < SK_ARRAY_COUNT(insetProcs); ++j) {
106 for (size_t i = 0; i < SK_ARRAY_COUNT(rrect); ++i) {
107 drawrr(canvas, rrect[i], insetProcs[j]);
108 canvas->translate(rrect[i].width() * 5 / 3, 0);
111 canvas->translate(0, rrect[0].height() * 5 / 3);
116 typedef GM INHERITED;
119 DEF_GM( return new RRectGM; )