OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SkBBoxRecord.h" | 9 #include "SkBBoxRecord.h" |
10 | 10 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 } | 77 } |
78 } | 78 } |
79 | 79 |
80 void SkBBoxRecord::clear(SkColor color) { | 80 void SkBBoxRecord::clear(SkColor color) { |
81 SkISize size = this->getDeviceSize(); | 81 SkISize size = this->getDeviceSize(); |
82 SkRect bbox = {0, 0, SkIntToScalar(size.width()), SkIntToScalar(size.height(
))}; | 82 SkRect bbox = {0, 0, SkIntToScalar(size.width()), SkIntToScalar(size.height(
))}; |
83 this->handleBBox(bbox); | 83 this->handleBBox(bbox); |
84 INHERITED::clear(color); | 84 INHERITED::clear(color); |
85 } | 85 } |
86 | 86 |
87 void SkBBoxRecord::onDrawText(const void* text, size_t byteLength, SkScalar x, S
kScalar y, | 87 void SkBBoxRecord::drawText(const void* text, size_t byteLength, SkScalar x, SkS
calar y, |
88 const SkPaint& paint) { | 88 const SkPaint& paint) { |
89 SkRect bbox; | 89 SkRect bbox; |
90 paint.measureText(text, byteLength, &bbox); | 90 paint.measureText(text, byteLength, &bbox); |
91 SkPaint::FontMetrics metrics; | 91 SkPaint::FontMetrics metrics; |
92 paint.getFontMetrics(&metrics); | 92 paint.getFontMetrics(&metrics); |
93 | 93 |
94 // Vertical and aligned text need to be offset | 94 // Vertical and aligned text need to be offset |
95 if (paint.isVerticalText()) { | 95 if (paint.isVerticalText()) { |
96 SkScalar h = bbox.fBottom - bbox.fTop; | 96 SkScalar h = bbox.fBottom - bbox.fTop; |
97 if (paint.getTextAlign() == SkPaint::kCenter_Align) { | 97 if (paint.getTextAlign() == SkPaint::kCenter_Align) { |
98 bbox.fTop -= h / 2; | 98 bbox.fTop -= h / 2; |
(...skipping 22 matching lines...) Expand all Loading... |
121 // incorrect on most platforms (too small in Linux, never even set in Window
s). | 121 // incorrect on most platforms (too small in Linux, never even set in Window
s). |
122 SkScalar pad = (metrics.fBottom - metrics.fTop) / 2; | 122 SkScalar pad = (metrics.fBottom - metrics.fTop) / 2; |
123 bbox.fLeft -= pad; | 123 bbox.fLeft -= pad; |
124 bbox.fRight += pad; | 124 bbox.fRight += pad; |
125 | 125 |
126 bbox.fLeft += x; | 126 bbox.fLeft += x; |
127 bbox.fRight += x; | 127 bbox.fRight += x; |
128 bbox.fTop += y; | 128 bbox.fTop += y; |
129 bbox.fBottom += y; | 129 bbox.fBottom += y; |
130 if (this->transformBounds(bbox, &paint)) { | 130 if (this->transformBounds(bbox, &paint)) { |
131 INHERITED::onDrawText(text, byteLength, x, y, paint); | 131 INHERITED::drawText(text, byteLength, x, y, paint); |
132 } | 132 } |
133 } | 133 } |
134 | 134 |
135 void SkBBoxRecord::drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar to
p, | 135 void SkBBoxRecord::drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar to
p, |
136 const SkPaint* paint) { | 136 const SkPaint* paint) { |
137 SkRect bbox = {left, top, left + bitmap.width(), top + bitmap.height()}; | 137 SkRect bbox = {left, top, left + bitmap.width(), top + bitmap.height()}; |
138 if (this->transformBounds(bbox, paint)) { | 138 if (this->transformBounds(bbox, paint)) { |
139 INHERITED::drawBitmap(bitmap, left, top, paint); | 139 INHERITED::drawBitmap(bitmap, left, top, paint); |
140 } | 140 } |
141 } | 141 } |
(...skipping 16 matching lines...) Expand all Loading... |
158 } | 158 } |
159 } | 159 } |
160 | 160 |
161 void SkBBoxRecord::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, | 161 void SkBBoxRecord::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, |
162 const SkRect& dst, const SkPaint* paint) { | 162 const SkRect& dst, const SkPaint* paint) { |
163 if (this->transformBounds(dst, paint)) { | 163 if (this->transformBounds(dst, paint)) { |
164 INHERITED::drawBitmapNine(bitmap, center, dst, paint); | 164 INHERITED::drawBitmapNine(bitmap, center, dst, paint); |
165 } | 165 } |
166 } | 166 } |
167 | 167 |
168 void SkBBoxRecord::onDrawPosText(const void* text, size_t byteLength, const SkPo
int pos[], | 168 void SkBBoxRecord::drawPosText(const void* text, size_t byteLength, |
169 const SkPaint& paint) { | 169 const SkPoint pos[], const SkPaint& paint) { |
170 SkRect bbox; | 170 SkRect bbox; |
171 bbox.set(pos, paint.countText(text, byteLength)); | 171 bbox.set(pos, paint.countText(text, byteLength)); |
172 SkPaint::FontMetrics metrics; | 172 SkPaint::FontMetrics metrics; |
173 paint.getFontMetrics(&metrics); | 173 paint.getFontMetrics(&metrics); |
174 bbox.fTop += metrics.fTop; | 174 bbox.fTop += metrics.fTop; |
175 bbox.fBottom += metrics.fBottom; | 175 bbox.fBottom += metrics.fBottom; |
176 | 176 |
177 // pad on left and right by half of max vertical glyph extents | 177 // pad on left and right by half of max vertical glyph extents |
178 SkScalar pad = (metrics.fTop - metrics.fBottom) / 2; | 178 SkScalar pad = (metrics.fTop - metrics.fBottom) / 2; |
179 bbox.fLeft += pad; | 179 bbox.fLeft += pad; |
180 bbox.fRight -= pad; | 180 bbox.fRight -= pad; |
181 | 181 |
182 if (this->transformBounds(bbox, &paint)) { | 182 if (this->transformBounds(bbox, &paint)) { |
183 INHERITED::onDrawPosText(text, byteLength, pos, paint); | 183 INHERITED::drawPosText(text, byteLength, pos, paint); |
184 } | 184 } |
185 } | 185 } |
186 | 186 |
187 void SkBBoxRecord::onDrawPosTextH(const void* text, size_t byteLength, const SkS
calar xpos[], | 187 void SkBBoxRecord::drawPosTextH(const void* text, size_t byteLength, const SkSca
lar xpos[], |
188 SkScalar constY, const SkPaint& paint) { | 188 SkScalar constY, const SkPaint& paint) { |
189 size_t numChars = paint.countText(text, byteLength); | 189 size_t numChars = paint.countText(text, byteLength); |
190 if (numChars == 0) { | 190 if (numChars == 0) { |
191 return; | 191 return; |
192 } | 192 } |
193 | 193 |
194 const SkFlatData* flatPaintData = this->getFlatPaintData(paint); | 194 const SkFlatData* flatPaintData = this->getFlatPaintData(paint); |
195 WriteTopBot(paint, *flatPaintData); | 195 WriteTopBot(paint, *flatPaintData); |
196 | 196 |
197 SkScalar top = flatPaintData->topBot()[0]; | 197 SkScalar top = flatPaintData->topBot()[0]; |
198 SkScalar bottom = flatPaintData->topBot()[1]; | 198 SkScalar bottom = flatPaintData->topBot()[1]; |
(...skipping 29 matching lines...) Expand all Loading... |
228 } | 228 } |
229 | 229 |
230 void SkBBoxRecord::drawSprite(const SkBitmap& bitmap, int left, int top, | 230 void SkBBoxRecord::drawSprite(const SkBitmap& bitmap, int left, int top, |
231 const SkPaint* paint) { | 231 const SkPaint* paint) { |
232 SkRect bbox; | 232 SkRect bbox; |
233 bbox.set(SkIRect::MakeXYWH(left, top, bitmap.width(), bitmap.height())); | 233 bbox.set(SkIRect::MakeXYWH(left, top, bitmap.width(), bitmap.height())); |
234 this->handleBBox(bbox); // directly call handleBBox, matrix is ignored | 234 this->handleBBox(bbox); // directly call handleBBox, matrix is ignored |
235 INHERITED::drawSprite(bitmap, left, top, paint); | 235 INHERITED::drawSprite(bitmap, left, top, paint); |
236 } | 236 } |
237 | 237 |
238 void SkBBoxRecord::onDrawTextOnPath(const void* text, size_t byteLength, const S
kPath& path, | 238 void SkBBoxRecord::drawTextOnPath(const void* text, size_t byteLength, |
239 const SkMatrix* matrix, const SkPaint& paint
) { | 239 const SkPath& path, const SkMatrix* matrix, |
| 240 const SkPaint& paint) { |
240 SkRect bbox = path.getBounds(); | 241 SkRect bbox = path.getBounds(); |
241 SkPaint::FontMetrics metrics; | 242 SkPaint::FontMetrics metrics; |
242 paint.getFontMetrics(&metrics); | 243 paint.getFontMetrics(&metrics); |
243 | 244 |
244 // pad out all sides by the max glyph height above baseline | 245 // pad out all sides by the max glyph height above baseline |
245 SkScalar pad = metrics.fTop; | 246 SkScalar pad = metrics.fTop; |
246 bbox.fLeft += pad; | 247 bbox.fLeft += pad; |
247 bbox.fRight -= pad; | 248 bbox.fRight -= pad; |
248 bbox.fTop += pad; | 249 bbox.fTop += pad; |
249 bbox.fBottom -= pad; | 250 bbox.fBottom -= pad; |
250 | 251 |
251 if (this->transformBounds(bbox, &paint)) { | 252 if (this->transformBounds(bbox, &paint)) { |
252 INHERITED::onDrawTextOnPath(text, byteLength, path, matrix, paint); | 253 INHERITED::drawTextOnPath(text, byteLength, path, matrix, paint); |
253 } | 254 } |
254 } | 255 } |
255 | 256 |
256 void SkBBoxRecord::drawVertices(VertexMode mode, int vertexCount, | 257 void SkBBoxRecord::drawVertices(VertexMode mode, int vertexCount, |
257 const SkPoint vertices[], const SkPoint texs[], | 258 const SkPoint vertices[], const SkPoint texs[], |
258 const SkColor colors[], SkXfermode* xfer, | 259 const SkColor colors[], SkXfermode* xfer, |
259 const uint16_t indices[], int indexCount, | 260 const uint16_t indices[], int indexCount, |
260 const SkPaint& paint) { | 261 const SkPaint& paint) { |
261 SkRect bbox; | 262 SkRect bbox; |
262 bbox.set(vertices, vertexCount); | 263 bbox.set(vertices, vertexCount); |
(...skipping 29 matching lines...) Expand all Loading... |
292 } | 293 } |
293 | 294 |
294 if (!outBounds.isEmpty() && !this->quickReject(outBounds)) { | 295 if (!outBounds.isEmpty() && !this->quickReject(outBounds)) { |
295 this->getTotalMatrix().mapRect(&outBounds); | 296 this->getTotalMatrix().mapRect(&outBounds); |
296 this->handleBBox(outBounds); | 297 this->handleBBox(outBounds); |
297 return true; | 298 return true; |
298 } | 299 } |
299 | 300 |
300 return false; | 301 return false; |
301 } | 302 } |
OLD | NEW |