Index: tests/BlurTest.cpp |
diff --git a/tests/BlurTest.cpp b/tests/BlurTest.cpp |
index 6ccb0471aaefd951f080d384b5ccf1033aab0b9b..32e2930171211c97e70edc14ebbf42ac073fee0d 100644 |
--- a/tests/BlurTest.cpp |
+++ b/tests/BlurTest.cpp |
@@ -574,4 +574,66 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SmallBoxBlurBug, reporter, ctxInfo) { |
#endif |
+ |
+DEF_TEST(BlurredRRectNinePatchComputation, reporter) { |
+ const SkRect r = SkRect::MakeXYWH(10, 10, 100, 100); |
+ |
+ bool ninePatchable; |
+ SkRRect rrectToDraw; |
+ SkISize size; |
+ SkScalar xs[4], ys[4]; |
+ int numXs, numYs; |
+ |
+ // not nine-patchable |
+ { |
+ SkVector radii[4] = { { 100, 100 }, { 0, 0 }, { 100, 100 }, { 0, 0 } }; |
+ |
+ SkRRect rr; |
+ rr.setRectRadii(r, radii); |
+ |
+ ninePatchable = SkBlurMaskFilter::ComputeBlurredRRectParams(rr, 3.0f, &rrectToDraw, &size, |
+ xs, &numXs, ys, &numYs); |
+ REPORTER_ASSERT(reporter, !ninePatchable); |
+ } |
+ |
+ // simple circular |
+ { |
+ SkRRect rr; |
+ rr.setRectXY(r, 10, 10); |
+ |
+ ninePatchable = SkBlurMaskFilter::ComputeBlurredRRectParams(rr, 3.0f, &rrectToDraw, &size, |
+ xs, &numXs, ys, &numYs); |
+ REPORTER_ASSERT(reporter, ninePatchable); |
+ REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fWidth), 57.0f)); |
+ REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fHeight), 57.0)); |
+ REPORTER_ASSERT(reporter, 4 == numXs && 4 == numYs); |
+ for (int i = 0; i < numXs; ++i) { |
+ REPORTER_ASSERT(reporter, xs[i] >= 0.0f && xs[i] <= 1.0f); |
+ } |
+ for (int i = 0; i < numYs; ++i) { |
+ REPORTER_ASSERT(reporter, ys[i] >= 0.0f && ys[i] <= 1.0f); |
+ } |
+ } |
+ |
+ // simple elliptical |
+ { |
+ SkRRect rr; |
+ rr.setRectXY(r, 2, 10); |
+ |
+ ninePatchable = SkBlurMaskFilter::ComputeBlurredRRectParams(rr, 3.0f, &rrectToDraw, &size, |
+ xs, &numXs, ys, &numYs); |
+ REPORTER_ASSERT(reporter, ninePatchable); |
+ REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fWidth), 41.0f)); |
+ REPORTER_ASSERT(reporter, SkScalarNearlyEqual(SkIntToScalar(size.fHeight), 57.0)); |
+ REPORTER_ASSERT(reporter, 4 == numXs && 4 == numYs); |
+ for (int i = 0; i < numXs; ++i) { |
+ REPORTER_ASSERT(reporter, xs[i] >= 0.0f && xs[i] <= 1.0f); |
+ } |
+ for (int i = 0; i < numYs; ++i) { |
+ REPORTER_ASSERT(reporter, ys[i] >= 0.0f && ys[i] <= 1.0f); |
+ } |
+ } |
+ |
+} |
+ |
/////////////////////////////////////////////////////////////////////////////////////////// |