aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2016-05-06 11:07:03 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-05-06 11:07:04 -0700
commit1a0b9ed7d8e16a8ebc34732b5e54246003921423 (patch)
treef0fa04c9308db0223d25d3593ccdbd3caada65bf /src
parent4d0cd764771a6c52ae80157d2915baa4844944c8 (diff)
Fix issue where GrStyle::applyToPath exited before applying stroke
Diffstat (limited to 'src')
-rw-r--r--src/gpu/GrStyle.cpp10
-rw-r--r--src/gpu/GrStyle.h12
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 {