OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef GrStrokeInfo_DEFINED | 8 #ifndef GrStrokeInfo_DEFINED |
9 #define GrStrokeInfo_DEFINED | 9 #define GrStrokeInfo_DEFINED |
10 | 10 |
11 #include "SkStrokeRec.h" | 11 #include "SkStrokeRec.h" |
12 #include "SkPathEffect.h" | 12 #include "SkPathEffect.h" |
13 | 13 |
14 class GrUniqueKey; | |
15 | |
14 /* | 16 /* |
15 * GrStrokeInfo encapsulates all the pertinent infomation regarding the stroke. The SkStrokeRec | 17 * GrStrokeInfo encapsulates all the pertinent infomation regarding the stroke. The SkStrokeRec |
16 * which holds information on fill style, width, miter, cap, and join. It also h olds information | 18 * which holds information on fill style, width, miter, cap, and join. It also h olds information |
17 * about the dash like intervals, count, and phase. | 19 * about the dash like intervals, count, and phase. |
18 */ | 20 */ |
19 class GrStrokeInfo : public SkStrokeRec { | 21 class GrStrokeInfo : public SkStrokeRec { |
20 public: | 22 public: |
21 GrStrokeInfo(SkStrokeRec::InitStyle style) | 23 GrStrokeInfo(SkStrokeRec::InitStyle style) |
22 : INHERITED(style) | 24 : INHERITED(style) |
23 , fDashType(SkPathEffect::kNone_DashType) { | 25 , fDashType(SkPathEffect::kNone_DashType) { |
(...skipping 29 matching lines...) Expand all Loading... | |
53 fDashPhase = other.fDashPhase; | 55 fDashPhase = other.fDashPhase; |
54 fIntervals.reset(other.getDashCount()); | 56 fIntervals.reset(other.getDashCount()); |
55 memcpy(fIntervals.get(), other.fIntervals.get(), fIntervals.count() * sizeof(SkScalar)); | 57 memcpy(fIntervals.get(), other.fIntervals.get(), fIntervals.count() * sizeof(SkScalar)); |
56 } else { | 58 } else { |
57 this->removeDash(); | 59 this->removeDash(); |
58 } | 60 } |
59 this->INHERITED::operator=(other); | 61 this->INHERITED::operator=(other); |
60 return *this; | 62 return *this; |
61 } | 63 } |
62 | 64 |
65 bool hasEqualEffect(const GrStrokeInfo& other) const { | |
66 if (this->isDashed() != other.isDashed()) { | |
67 return false; | |
68 } | |
69 if (this->isDashed()) { | |
70 if (fDashPhase != other.fDashPhase || | |
71 fIntervals.count() != other.fIntervals.count() || | |
72 memcmp(fIntervals.get(), other.fIntervals.get(), | |
73 fIntervals.count() * sizeof(SkScalar)) != 0) { | |
74 return false; | |
75 } | |
76 } | |
77 return this->INHERITED::hasEqualEffect(other); | |
78 } | |
79 | |
63 /* | 80 /* |
64 * This functions takes in a patheffect and updates the dashing information if the path effect | 81 * This functions takes in a patheffect and updates the dashing information if the path effect |
65 * is a Dash type. Returns true if the path effect is a dashed effect and we are stroking, | 82 * is a Dash type. Returns true if the path effect is a dashed effect and we are stroking, |
66 * otherwise it returns false. | 83 * otherwise it returns false. |
67 */ | 84 */ |
68 bool setDashInfo(const SkPathEffect* pe) { | 85 bool setDashInfo(const SkPathEffect* pe) { |
69 if (pe && !this->isFillStyle()) { | 86 if (pe && !this->isFillStyle()) { |
70 SkPathEffect::DashInfo dashInfo; | 87 SkPathEffect::DashInfo dashInfo; |
71 fDashType = pe->asADash(&dashInfo); | 88 fDashType = pe->asADash(&dashInfo); |
72 if (SkPathEffect::kDash_DashType == fDashType) { | 89 if (SkPathEffect::kDash_DashType == fDashType) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
120 } | 137 } |
121 | 138 |
122 /** Applies the dash to a path, if the stroke info has dashing. | 139 /** Applies the dash to a path, if the stroke info has dashing. |
123 * @return true if the dashing was applied (dst and dstStrokeInfo will be mo dified). | 140 * @return true if the dashing was applied (dst and dstStrokeInfo will be mo dified). |
124 * false if the stroke info did not have dashing. The dst and dstStr okeInfo | 141 * false if the stroke info did not have dashing. The dst and dstStr okeInfo |
125 * will be unmodified. The stroking in the SkStrokeRec might s till | 142 * will be unmodified. The stroking in the SkStrokeRec might s till |
126 * be applicable. | 143 * be applicable. |
127 */ | 144 */ |
128 bool applyDashToPath(SkPath* dst, GrStrokeInfo* dstStrokeInfo, const SkPath& src) const; | 145 bool applyDashToPath(SkPath* dst, GrStrokeInfo* dstStrokeInfo, const SkPath& src) const; |
129 | 146 |
147 | |
148 int computeUniqueKeyFragmentData32Cnt() const { | |
egdaniel
2015/05/15 15:28:53
This function definitely needs some comments
Kimmo Kinnunen
2015/05/18 06:48:40
Done.
| |
149 const int kSkScalarData32Cnt = sizeof(SkScalar) / sizeof(uint32_t); | |
150 int strokeKeyData32Cnt = 1 + 2 * kSkScalarData32Cnt; | |
egdaniel
2015/05/15 15:28:53
Is this trying to account for values that are is S
Kimmo Kinnunen
2015/05/18 06:48:40
Yeah. I'll add the comments
| |
151 if (this->isDashed()) { | |
152 strokeKeyData32Cnt += (1 + this->getDashCount()) * kSkScalarData32Cn t; | |
egdaniel
2015/05/15 15:28:53
is the 1 for the phase here?
Kimmo Kinnunen
2015/05/18 06:48:40
Yeah
| |
153 } | |
154 return strokeKeyData32Cnt; | |
155 } | |
156 | |
157 void asUniqueKeyFragment(uint32_t*) const; | |
158 | |
130 private: | 159 private: |
131 | 160 |
132 void init(const SkPaint& paint) { | 161 void init(const SkPaint& paint) { |
133 const SkPathEffect* pe = paint.getPathEffect(); | 162 const SkPathEffect* pe = paint.getPathEffect(); |
134 this->setDashInfo(pe); | 163 this->setDashInfo(pe); |
135 } | 164 } |
136 | 165 |
137 bool operator==(const SkStrokeRec& other) const; | |
138 bool operator!=(const SkStrokeRec& other) const; | |
139 | |
140 SkPathEffect::DashType fDashType; | 166 SkPathEffect::DashType fDashType; |
141 SkScalar fDashPhase; | 167 SkScalar fDashPhase; |
142 SkAutoSTArray<2, SkScalar> fIntervals; | 168 SkAutoSTArray<2, SkScalar> fIntervals; |
143 typedef SkStrokeRec INHERITED; | 169 typedef SkStrokeRec INHERITED; |
144 }; | 170 }; |
145 | 171 |
146 #endif | 172 #endif |
OLD | NEW |