OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 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 #include "GrShape.h" | 8 #include "GrShape.h" |
9 | 9 |
10 GrShape& GrShape::operator=(const GrShape& that) { | 10 GrShape& GrShape::operator=(const GrShape& that) { |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 int parentCnt = parent.fInheritedKey.count(); | 96 int parentCnt = parent.fInheritedKey.count(); |
97 bool useParentGeoKey = !parentCnt; | 97 bool useParentGeoKey = !parentCnt; |
98 if (useParentGeoKey) { | 98 if (useParentGeoKey) { |
99 parentCnt = parent.unstyledKeySize(); | 99 parentCnt = parent.unstyledKeySize(); |
100 if (parentCnt < 0) { | 100 if (parentCnt < 0) { |
101 // The parent's geometry has no key so we will have no key. | 101 // The parent's geometry has no key so we will have no key. |
102 fPath.get()->setIsVolatile(true); | 102 fPath.get()->setIsVolatile(true); |
103 return; | 103 return; |
104 } | 104 } |
105 } | 105 } |
106 int styleCnt = GrStyle::KeySize(parent.fStyle, apply); | 106 uint32_t styleKeyFlags = 0; |
| 107 if (parent.knownToBeClosed()) { |
| 108 styleKeyFlags |= GrStyle::kClosed_KeyFlag; |
| 109 } |
| 110 int styleCnt = GrStyle::KeySize(parent.fStyle, apply, styleKeyFlags); |
107 if (styleCnt < 0) { | 111 if (styleCnt < 0) { |
108 // The style doesn't allow a key, set the path to volatile so that w
e fail when | 112 // The style doesn't allow a key, set the path to volatile so that w
e fail when |
109 // we try to get a key for the shape. | 113 // we try to get a key for the shape. |
110 fPath.get()->setIsVolatile(true); | 114 fPath.get()->setIsVolatile(true); |
111 return; | 115 return; |
112 } | 116 } |
113 fInheritedKey.reset(parentCnt + styleCnt); | 117 fInheritedKey.reset(parentCnt + styleCnt); |
114 if (useParentGeoKey) { | 118 if (useParentGeoKey) { |
115 // This will be the geo key. | 119 // This will be the geo key. |
116 parent.writeUnstyledKey(fInheritedKey.get()); | 120 parent.writeUnstyledKey(fInheritedKey.get()); |
117 } else { | 121 } else { |
118 // This should be (geo,path_effect). | 122 // This should be (geo,path_effect). |
119 memcpy(fInheritedKey.get(), parent.fInheritedKey.get(), | 123 memcpy(fInheritedKey.get(), parent.fInheritedKey.get(), |
120 parentCnt * sizeof(uint32_t)); | 124 parentCnt * sizeof(uint32_t)); |
121 } | 125 } |
122 // Now turn (geo,path_effect) or (geo) into (geo,path_effect,stroke) | 126 // Now turn (geo,path_effect) or (geo) into (geo,path_effect,stroke) |
123 GrStyle::WriteKey(fInheritedKey.get() + parentCnt, parent.fStyle, apply)
; | 127 GrStyle::WriteKey(fInheritedKey.get() + parentCnt, parent.fStyle, apply,
styleKeyFlags); |
124 } | 128 } |
125 } | 129 } |
126 | 130 |
127 GrShape::GrShape(const GrShape& that) : fType(that.fType), fStyle(that.fStyle) { | 131 GrShape::GrShape(const GrShape& that) : fType(that.fType), fStyle(that.fStyle) { |
128 switch (fType) { | 132 switch (fType) { |
129 case Type::kEmpty: | 133 case Type::kEmpty: |
130 return; | 134 return; |
131 case Type::kRRect: | 135 case Type::kRRect: |
132 fRRect = that.fRRect; | 136 fRRect = that.fRRect; |
133 return; | 137 return; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 srcForStrokeRec = tmpPath.init(); | 214 srcForStrokeRec = tmpPath.init(); |
211 parent.asPath(tmpPath.get()); | 215 parent.asPath(tmpPath.get()); |
212 } | 216 } |
213 SkASSERT(parent.fStyle.strokeRec().needToApply()); | 217 SkASSERT(parent.fStyle.strokeRec().needToApply()); |
214 SkAssertResult(parent.fStyle.strokeRec().applyToPath(fPath.get(), *srcFo
rStrokeRec)); | 218 SkAssertResult(parent.fStyle.strokeRec().applyToPath(fPath.get(), *srcFo
rStrokeRec)); |
215 fStyle.resetToInitStyle(SkStrokeRec::kFill_InitStyle); | 219 fStyle.resetToInitStyle(SkStrokeRec::kFill_InitStyle); |
216 } | 220 } |
217 this->attemptToReduceFromPath(); | 221 this->attemptToReduceFromPath(); |
218 this->setInheritedKey(*parentForKey, apply); | 222 this->setInheritedKey(*parentForKey, apply); |
219 } | 223 } |
OLD | NEW |