OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
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 "SkTextBox.h" | 8 #include "SkTextBox.h" |
9 #include "SkUtils.h" | 9 #include "SkUtils.h" |
10 | 10 |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 } | 237 } |
238 return y + metrics.fDescent + metrics.fLeading; | 238 return y + metrics.fDescent + metrics.fLeading; |
239 } | 239 } |
240 | 240 |
241 /////////////////////////////////////////////////////////////////////////////// | 241 /////////////////////////////////////////////////////////////////////////////// |
242 | 242 |
243 class CanvasVisitor : public SkTextBox::Visitor { | 243 class CanvasVisitor : public SkTextBox::Visitor { |
244 SkCanvas* fCanvas; | 244 SkCanvas* fCanvas; |
245 public: | 245 public: |
246 CanvasVisitor(SkCanvas* canvas) : fCanvas(canvas) {} | 246 CanvasVisitor(SkCanvas* canvas) : fCanvas(canvas) {} |
247 | 247 |
248 virtual void operator()(const char text[], size_t length, SkScalar x, SkScal
ar y, | 248 void operator()(const char text[], size_t length, SkScalar x, SkScalar y, |
249 const SkPaint& paint) override { | 249 const SkPaint& paint) override { |
250 fCanvas->drawText(text, length, x, y, paint); | 250 fCanvas->drawText(text, length, x, y, paint); |
251 } | 251 } |
252 }; | 252 }; |
253 | 253 |
254 void SkTextBox::setText(const char text[], size_t len, const SkPaint& paint) { | 254 void SkTextBox::setText(const char text[], size_t len, const SkPaint& paint) { |
255 fText = text; | 255 fText = text; |
256 fLen = len; | 256 fLen = len; |
257 fPaint = &paint; | 257 fPaint = &paint; |
258 } | 258 } |
259 | 259 |
(...skipping 15 matching lines...) Expand all Loading... |
275 return this->countLines() * spacing; | 275 return this->countLines() * spacing; |
276 } | 276 } |
277 | 277 |
278 /////////////////////////////////////////////////////////////////////////////// | 278 /////////////////////////////////////////////////////////////////////////////// |
279 | 279 |
280 #include "SkTextBlob.h" | 280 #include "SkTextBlob.h" |
281 | 281 |
282 class TextBlobVisitor : public SkTextBox::Visitor { | 282 class TextBlobVisitor : public SkTextBox::Visitor { |
283 public: | 283 public: |
284 SkTextBlobBuilder fBuilder; | 284 SkTextBlobBuilder fBuilder; |
285 | 285 |
286 virtual void operator()(const char text[], size_t length, SkScalar x, SkScal
ar y, | 286 void operator()(const char text[], size_t length, SkScalar x, SkScalar y, |
287 const SkPaint& paint) override { | 287 const SkPaint& paint) override { |
288 SkPaint p(paint); | 288 SkPaint p(paint); |
289 p.setTextEncoding(SkPaint::kGlyphID_TextEncoding); | 289 p.setTextEncoding(SkPaint::kGlyphID_TextEncoding); |
290 const int count = paint.countText(text, length); | 290 const int count = paint.countText(text, length); |
291 paint.textToGlyphs(text, length, fBuilder.allocRun(p, count, x, y).glyph
s); | 291 paint.textToGlyphs(text, length, fBuilder.allocRun(p, count, x, y).glyph
s); |
292 } | 292 } |
293 }; | 293 }; |
294 | 294 |
295 SkTextBlob* SkTextBox::snapshotTextBlob(SkScalar* computedBottom) const { | 295 SkTextBlob* SkTextBox::snapshotTextBlob(SkScalar* computedBottom) const { |
296 TextBlobVisitor visitor; | 296 TextBlobVisitor visitor; |
297 SkScalar newB = this->visit(visitor, fText, fLen, *fPaint); | 297 SkScalar newB = this->visit(visitor, fText, fLen, *fPaint); |
298 if (computedBottom) { | 298 if (computedBottom) { |
299 *computedBottom = newB; | 299 *computedBottom = newB; |
300 } | 300 } |
301 return (SkTextBlob*)visitor.fBuilder.build(); | 301 return (SkTextBlob*)visitor.fBuilder.build(); |
302 } | 302 } |
303 | 303 |
OLD | NEW |