diff options
author | bsalomon <bsalomon@google.com> | 2016-05-06 11:07:03 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-05-06 11:07:04 -0700 |
commit | 1a0b9ed7d8e16a8ebc34732b5e54246003921423 (patch) | |
tree | f0fa04c9308db0223d25d3593ccdbd3caada65bf /src | |
parent | 4d0cd764771a6c52ae80157d2915baa4844944c8 (diff) |
Fix issue where GrStyle::applyToPath exited before applying stroke
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1954123002
Review-Url: https://codereview.chromium.org/1954123002
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/GrStyle.cpp | 10 | ||||
-rw-r--r-- | src/gpu/GrStyle.h | 12 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/gpu/GrStyle.cpp b/src/gpu/GrStyle.cpp index 6480fb341a..68238dded9 100644 --- a/src/gpu/GrStyle.cpp +++ b/src/gpu/GrStyle.cpp @@ -137,14 +137,20 @@ bool GrStyle::applyToPath(SkPath* dst, SkStrokeRec::InitStyle* style, const SkPa SkASSERT(style); SkASSERT(dst); SkStrokeRec strokeRec = fStrokeRec; - if (!apply_path_effect(dst, &strokeRec, fPathEffect, src)) { + const SkPath* pathForStrokeRec = &src; + if (apply_path_effect(dst, &strokeRec, fPathEffect, src)) { + pathForStrokeRec = dst; + } else if (fPathEffect) { return false; } if (strokeRec.needToApply()) { - if (!strokeRec.applyToPath(dst, *dst)) { + if (!strokeRec.applyToPath(dst, *pathForStrokeRec)) { return false; } *style = SkStrokeRec::kFill_InitStyle; + } else if (!fPathEffect) { + // Nothing to do for path effect or stroke, fail. + return false; } else { SkASSERT(SkStrokeRec::kFill_Style == strokeRec.getStyle() || SkStrokeRec::kHairline_Style == strokeRec.getStyle()); diff --git a/src/gpu/GrStyle.h b/src/gpu/GrStyle.h index bc87ebd61f..2ca037a463 100644 --- a/src/gpu/GrStyle.h +++ b/src/gpu/GrStyle.h @@ -135,14 +135,18 @@ public: /** * Applies just the path effect and returns remaining stroke information. This will fail if - * there is no path effect. + * there is no path effect. dst may or may not have been overwritten on failure. */ - bool applyPathEffectToPath(SkPath* dst, SkStrokeRec* remainingStoke, const SkPath& src) const; + bool SK_WARN_UNUSED_RESULT applyPathEffectToPath(SkPath* dst, SkStrokeRec* remainingStoke, + const SkPath& src) const; /** If this succeeds then the result path should be filled or hairlined as indicated by the returned SkStrokeRec::InitStyle value. Will fail if there is no path effect and the - strokerec doesn't change the geometry. */ - bool applyToPath(SkPath* dst, SkStrokeRec::InitStyle* fillOrHairline, const SkPath& src) const; + strokerec doesn't change the geometry. When this fails the outputs may or may not have + been overwritten. + */ + bool SK_WARN_UNUSED_RESULT applyToPath(SkPath* dst, SkStrokeRec::InitStyle* fillOrHairline, + const SkPath& src) const; /** Given bounds of a path compute the bounds of path with the style applied. */ void adjustBounds(SkRect* dst, const SkRect& src) const { |