aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/rrect.cpp
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-12-17 13:39:25 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-12-17 13:39:25 +0000
commitec93bf92339d923dbf5964f7844b9f8366eeba13 (patch)
treed56d48a771cc4c740c90edd3a0b9eefae7810cea /gm/rrect.cpp
parent5138638143b4ebaa60a0b75e816118c35ff220f7 (diff)
add 4th test
git-svn-id: http://skia.googlecode.com/svn/trunk@6835 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/rrect.cpp')
-rw-r--r--gm/rrect.cpp64
1 files changed, 57 insertions, 7 deletions
diff --git a/gm/rrect.cpp b/gm/rrect.cpp
index 6f3e031c3c..0106ec75fd 100644
--- a/gm/rrect.cpp
+++ b/gm/rrect.cpp
@@ -48,6 +48,54 @@ static void inset1(const SkRRect& src, SkScalar dx, SkScalar dy, SkRRect* dst) {
dst->setRectRadii(r, radii);
}
+static void inset2(const SkRRect& src, SkScalar dx, SkScalar dy, SkRRect* dst) {
+ SkRect r = src.rect();
+
+ r.inset(dx, dy);
+ if (r.isEmpty()) {
+ dst->setEmpty();
+ return;
+ }
+
+ SkVector radii[4];
+ for (int i = 0; i < 4; ++i) {
+ radii[i] = src.radii((SkRRect::Corner)i);
+ }
+ for (int i = 0; i < 4; ++i) {
+ if (radii[i].fX) {
+ radii[i].fX -= dx;
+ }
+ if (radii[i].fY) {
+ radii[i].fY -= dy;
+ }
+ }
+ dst->setRectRadii(r, radii);
+}
+
+static SkScalar prop(SkScalar radius, SkScalar delta, SkScalar newSize, SkScalar oldSize) {
+ return newSize * radius / oldSize;
+}
+
+static void inset3(const SkRRect& src, SkScalar dx, SkScalar dy, SkRRect* dst) {
+ SkRect r = src.rect();
+
+ r.inset(dx, dy);
+ if (r.isEmpty()) {
+ dst->setEmpty();
+ return;
+ }
+
+ SkVector radii[4];
+ for (int i = 0; i < 4; ++i) {
+ radii[i] = src.radii((SkRRect::Corner)i);
+ }
+ for (int i = 0; i < 4; ++i) {
+ radii[i].fX = prop(radii[i].fX, dx, r.width(), src.rect().width());
+ radii[i].fY = prop(radii[i].fY, dy, r.height(), src.rect().height());
+ }
+ dst->setRectRadii(r, radii);
+}
+
static void draw_rrect_color(SkCanvas* canvas, const SkRRect& rrect) {
SkPaint paint;
paint.setAntiAlias(true);
@@ -83,16 +131,18 @@ protected:
}
virtual SkISize onISize() {
- return SkISize::Make(640, 480);
+ return SkISize::Make(820, 710);
}
virtual void onDraw(SkCanvas* canvas) {
- static const InsetProc insetProcs[] = { inset0, inset1 };
+ static const InsetProc insetProcs[] = {
+ inset0, inset1, inset2, inset3
+ };
SkRRect rrect[4];
- SkRect r = { 0, 0, 120, 160 };
+ SkRect r = { 0, 0, 120, 100 };
SkVector radii[4] = {
- { 0, 0 }, { 20, 20 }, { 10, 40 }, { 40, 40 }
+ { 0, 0 }, { 30, 1 }, { 10, 40 }, { 40, 40 }
};
rrect[0].setRect(r);
@@ -100,15 +150,15 @@ protected:
rrect[2].setRectXY(r, 20, 20);
rrect[3].setRectRadii(r, radii);
- canvas->translate(50, 50);
+ canvas->translate(50.5f, 50.5f);
for (size_t j = 0; j < SK_ARRAY_COUNT(insetProcs); ++j) {
canvas->save();
for (size_t i = 0; i < SK_ARRAY_COUNT(rrect); ++i) {
drawrr(canvas, rrect[i], insetProcs[j]);
- canvas->translate(rrect[i].width() * 5 / 3, 0);
+ canvas->translate(200, 0);
}
canvas->restore();
- canvas->translate(0, rrect[0].height() * 5 / 3);
+ canvas->translate(0, 170);
}
}