| Index: tests/GrShapeTest.cpp
|
| diff --git a/tests/GrShapeTest.cpp b/tests/GrShapeTest.cpp
|
| index aa46cd981c2c315238d33893e20d146c65248ec1..23ebe8a3da09714eacd38de7c7b59396b62a02f5 100644
|
| --- a/tests/GrShapeTest.cpp
|
| +++ b/tests/GrShapeTest.cpp
|
| @@ -263,10 +263,12 @@ static void test_basic(skiatest::Reporter* reporter, const GEO& geo) {
|
| }
|
|
|
| template <typename GEO, typename T>
|
| -static void test_stroke_param(skiatest::Reporter* reporter, const GEO& geo,
|
| - std::function<void(SkPaint*, T)> setter, T a, T b) {
|
| - // Set the stroke width so that we don't get hairline. However, call the function second so that
|
| - // it can override.
|
| +static void test_stroke_param_impl(skiatest::Reporter* reporter, const GEO& geo,
|
| + std::function<void(SkPaint*, T)> setter, T a, T b,
|
| + bool paramAffectsStroke,
|
| + bool paramAffectsDashAndStroke) {
|
| + // Set the stroke width so that we don't get hairline. However, call the setter afterward so
|
| + // that it can override the stroke width.
|
| SkPaint strokeA;
|
| strokeA.setStyle(SkPaint::kStroke_Style);
|
| strokeA.setStrokeWidth(2.f);
|
| @@ -278,7 +280,11 @@ static void test_stroke_param(skiatest::Reporter* reporter, const GEO& geo,
|
|
|
| TestCase strokeACase(geo, strokeA, reporter);
|
| TestCase strokeBCase(geo, strokeB, reporter);
|
| - strokeACase.compare(reporter, strokeBCase, TestCase::kSameUpToStroke_ComparisonExpecation);
|
| + if (paramAffectsStroke) {
|
| + strokeACase.compare(reporter, strokeBCase, TestCase::kSameUpToStroke_ComparisonExpecation);
|
| + } else {
|
| + strokeACase.compare(reporter, strokeBCase, TestCase::kAllSame_ComparisonExpecation);
|
| + }
|
|
|
| // Make sure stroking params don't affect fill style.
|
| SkPaint fillA = strokeA, fillB = strokeB;
|
| @@ -295,38 +301,66 @@ static void test_stroke_param(skiatest::Reporter* reporter, const GEO& geo,
|
| dashB.setPathEffect(make_dash());
|
| TestCase dashACase(geo, dashA, reporter);
|
| TestCase dashBCase(geo, dashB, reporter);
|
| - dashACase.compare(reporter, dashBCase, TestCase::kSameUpToStroke_ComparisonExpecation);
|
| + if (paramAffectsDashAndStroke) {
|
| + dashACase.compare(reporter, dashBCase, TestCase::kSameUpToStroke_ComparisonExpecation);
|
| + } else {
|
| + dashACase.compare(reporter, dashBCase, TestCase::kAllSame_ComparisonExpecation);
|
| + }
|
| }
|
|
|
| +template <typename GEO, typename T>
|
| +static void test_stroke_param(skiatest::Reporter* reporter, const GEO& geo,
|
| + std::function<void(SkPaint*, T)> setter, T a, T b) {
|
| + test_stroke_param_impl(reporter, geo, setter, a, b, true, true);
|
| +};
|
| +
|
| +template <typename GEO>
|
| +static void test_stroke_cap(skiatest::Reporter* reporter, const GEO& geo) {
|
| + GrShape shape(geo, GrStyle(SkStrokeRec::kHairline_InitStyle));
|
| + // The cap should only affect shapes that may be open.
|
| + bool affectsStroke = !shape.knownToBeClosed();
|
| + // Dashing adds ends that need caps.
|
| + bool affectsDashAndStroke = true;
|
| + test_stroke_param_impl<GEO, SkPaint::Cap>(
|
| + reporter,
|
| + geo,
|
| + [](SkPaint* p, SkPaint::Cap c) { p->setStrokeCap(c);},
|
| + SkPaint::kButt_Cap, SkPaint::kRound_Cap,
|
| + affectsStroke,
|
| + affectsDashAndStroke);
|
| +};
|
| +
|
| template <typename GEO>
|
| static void test_miter_limit(skiatest::Reporter* reporter, const GEO& geo) {
|
| - // Miter limit should only matter when stroking with miter joins. It shouldn't affect other
|
| - // joins or fills.
|
| - SkPaint miterA;
|
| - miterA.setStyle(SkPaint::kStroke_Style);
|
| - miterA.setStrokeWidth(2.f);
|
| - miterA.setStrokeJoin(SkPaint::kMiter_Join);
|
| - miterA.setStrokeMiter(0.5f);
|
| - SkPaint miterB = miterA;
|
| - miterA.setStrokeMiter(0.6f);
|
| -
|
| - TestCase miterACase(geo, miterA, reporter);
|
| - TestCase miterBCase(geo, miterB, reporter);
|
| - miterACase.compare(reporter, miterBCase, TestCase::kSameUpToStroke_ComparisonExpecation);
|
| -
|
| - SkPaint noMiterA = miterA, noMiterB = miterB;
|
| - noMiterA.setStrokeJoin(SkPaint::kRound_Join);
|
| - noMiterB.setStrokeJoin(SkPaint::kRound_Join);
|
| - TestCase noMiterACase(geo, noMiterA, reporter);
|
| - TestCase noMiterBCase(geo, noMiterB, reporter);
|
| - noMiterACase.compare(reporter, noMiterBCase, TestCase::kAllSame_ComparisonExpecation);
|
| -
|
| - SkPaint fillA = miterA, fillB = miterB;
|
| - fillA.setStyle(SkPaint::kFill_Style);
|
| - fillB.setStyle(SkPaint::kFill_Style);
|
| - TestCase fillACase(geo, fillA, reporter);
|
| - TestCase fillBCase(geo, fillB, reporter);
|
| - fillACase.compare(reporter, fillBCase, TestCase::kAllSame_ComparisonExpecation);
|
| + auto setMiterJoinAndLimit = [](SkPaint* p, SkScalar miter) {
|
| + p->setStrokeJoin(SkPaint::kMiter_Join);
|
| + p->setStrokeMiter(miter);
|
| + };
|
| +
|
| + auto setOtherJoinAndLimit = [](SkPaint* p, SkScalar miter) {
|
| + p->setStrokeJoin(SkPaint::kRound_Join);
|
| + p->setStrokeMiter(miter);
|
| + };
|
| +
|
| + // The miter limit should affect stroked and dashed-stroked cases when the join type is
|
| + // miter.
|
| + test_stroke_param_impl<GEO, SkScalar>(
|
| + reporter,
|
| + geo,
|
| + setMiterJoinAndLimit,
|
| + 0.5f, 0.75f,
|
| + true,
|
| + true);
|
| +
|
| + // The miter limit should not affect stroked and dashed-stroked cases when the join type is
|
| + // not miter.
|
| + test_stroke_param_impl<GEO, SkScalar>(
|
| + reporter,
|
| + geo,
|
| + setOtherJoinAndLimit,
|
| + 0.5f, 0.75f,
|
| + false,
|
| + false);
|
| }
|
|
|
| template<typename GEO>
|
| @@ -660,14 +694,11 @@ DEF_TEST(GrShape, reporter) {
|
| reporter, rr,
|
| [](SkPaint* p, SkScalar w) { p->setStrokeWidth(w);},
|
| SkIntToScalar(2), SkIntToScalar(4));
|
| - test_stroke_param<SkRRect, SkPaint::Cap>(
|
| - reporter, rr,
|
| - [](SkPaint* p, SkPaint::Cap c) { p->setStrokeCap(c);},
|
| - SkPaint::kButt_Cap, SkPaint::kRound_Cap);
|
| test_stroke_param<SkRRect, SkPaint::Join>(
|
| reporter, rr,
|
| [](SkPaint* p, SkPaint::Join j) { p->setStrokeJoin(j);},
|
| SkPaint::kMiter_Join, SkPaint::kRound_Join);
|
| + test_stroke_cap(reporter, rr);
|
| test_miter_limit(reporter, rr);
|
| test_path_effect_makes_rrect(reporter, rr);
|
| test_unknown_path_effect(reporter, rr);
|
| @@ -725,14 +756,11 @@ DEF_TEST(GrShape, reporter) {
|
| reporter, path,
|
| [](SkPaint* p, SkScalar w) { p->setStrokeWidth(w);},
|
| SkIntToScalar(2), SkIntToScalar(4));
|
| - test_stroke_param<SkPath, SkPaint::Cap>(
|
| - reporter, path,
|
| - [](SkPaint* p, SkPaint::Cap c) { p->setStrokeCap(c);},
|
| - SkPaint::kButt_Cap, SkPaint::kRound_Cap);
|
| test_stroke_param<SkPath, SkPaint::Join>(
|
| reporter, path,
|
| [](SkPaint* p, SkPaint::Join j) { p->setStrokeJoin(j);},
|
| SkPaint::kMiter_Join, SkPaint::kRound_Join);
|
| + test_stroke_cap(reporter, path);
|
| test_miter_limit(reporter, path);
|
| test_unknown_path_effect(reporter, path);
|
| test_path_effect_makes_empty_shape(reporter, path);
|
|
|