From 5a70bc7f3cd32aaccc137c7d650cea613baa2443 Mon Sep 17 00:00:00 2001 From: caryclark Date: Tue, 23 Feb 2016 10:32:40 -0800 Subject: [PATCH] make transformed rrect radii fit rectangle one more case caught by 1M skps R=herb@google.com,reed@google.com BUG=skia:4413 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1722483003 Review URL: https://codereview.chromium.org/1722483003 --- include/core/SkRRect.h | 1 + src/core/SkRRect.cpp | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/core/SkRRect.h b/include/core/SkRRect.h index 994edd2..5564ce0 100644 --- a/include/core/SkRRect.h +++ b/include/core/SkRRect.h @@ -326,6 +326,7 @@ private: void computeType(); bool checkCornerContainment(SkScalar x, SkScalar y) const; + void scaleRadii(); // to access fRadii directly friend class SkPath; diff --git a/src/core/SkRRect.cpp b/src/core/SkRRect.cpp index 2e03f81..2195dcf 100644 --- a/src/core/SkRRect.cpp +++ b/src/core/SkRRect.cpp @@ -158,6 +158,11 @@ void SkRRect::setRectRadii(const SkRect& rect, const SkVector radii[4]) { return; } + this->scaleRadii(); +} + +void SkRRect::scaleRadii() { + // Proportionally scale down all radii to fit. Find the minimum ratio // of a side and the radii on that side (for all four sides) and use // that to scale down _all_ the radii. This algorithm is from the @@ -420,7 +425,7 @@ bool SkRRect::transform(const SkMatrix& matrix, SkRRect* dst) const { SkTSwap(dst->fRadii[kUpperRight_Corner], dst->fRadii[kLowerRight_Corner]); } - SkDEBUGCODE(dst->validate();) + dst->scaleRadii(); return true; } -- 2.7.4