Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 /* | |
| 2 * Copyright 2014 Google Inc. | |
| 3 * | |
| 4 * Use of this source code is governed by a BSD-style license that can be | |
| 5 * found in the LICENSE file. | |
| 6 */ | |
| 7 | |
| 8 #ifndef SkTextBlob_DEFINED | |
| 9 #define SkTextBlob_DEFINED | |
| 10 | |
| 11 #include "SkPaint.h" | |
| 12 #include "SkRect.h" | |
| 13 #include "SkRefCnt.h" | |
| 14 #include "SkTDArray.h" | |
| 15 | |
| 16 class SkBaseDevice; | |
| 17 class SkDraw; | |
| 18 struct SkPoint; | |
| 19 | |
| 20 /** \class SkTextChunk | |
| 21 | |
| 22 A text chunk is a sequence of (optionally positioned) glyphs sharing the sam e | |
| 23 font data/metrics. | |
| 24 */ | |
| 25 class SK_API SkTextChunk { | |
| 26 public: | |
| 27 static const SkTextChunk* Create(const uint16_t* glyphs, size_t count, const SkPaint& paint, | |
| 28 const SkRect* bounds = NULL); | |
| 29 static const SkTextChunk* Create(const uint16_t* glyphs, size_t count, const SkScalar* pos, | |
| 30 const SkPaint& paint, const SkRect* bounds = NULL); | |
| 31 static const SkTextChunk* Create(const uint16_t* glyphs, size_t count, const SkPoint* pos, | |
| 32 const SkPaint& paint, const SkRect* bounds = NULL); | |
| 33 | |
| 34 ~SkTextChunk(); | |
| 35 | |
| 36 void draw(SkBaseDevice*, const SkDraw&, const SkPaint&) const; | |
| 37 | |
| 38 const SkRect& bounds() const; | |
| 39 | |
| 40 private: | |
| 41 SkTextChunk(const uint16_t* glyphs, size_t count, const SkScalar* pos, unsig ned scalarsPerPos, | |
| 42 const SkPaint& paint, const SkRect* bounds); | |
| 43 | |
| 44 friend class SkPictureRecord; | |
| 45 | |
| 46 size_t fGlyphCount; | |
| 47 uint16_t* fGlyphs; | |
| 48 SkScalar* fPos; // FIXME: merge glyphs/pos storage? | |
| 49 | |
| 50 SkPaint fFont; // FIXME: SkFont | |
| 51 | |
| 52 mutable SkRect fBounds; | |
| 53 mutable bool fBoundsDirty; | |
| 54 | |
| 55 unsigned short fScalarsPerPos; | |
| 56 }; | |
| 57 | |
| 58 /** \class SkTextBlob | |
| 59 | |
| 60 SkTextBlob combines multiple text chunks into an immutable, ref-counted stru cture. | |
| 61 */ | |
| 62 class SK_API SkTextBlob : public SkRefCnt { | |
| 63 public: | |
| 64 static const SkTextBlob* Create(const SkTextChunk* chunk); | |
| 65 static const SkTextBlob* Create(const SkTDArray<const SkTextChunk*>& chunks) ; | |
| 66 | |
| 67 ~SkTextBlob(); | |
| 68 | |
| 69 uint32_t uniqueID() const; | |
| 70 | |
| 71 class SK_API Iter { | |
| 72 public: | |
| 73 Iter(const SkTextBlob* blob) : fBlob(blob), fIndex(0) { SkASSERT(blob); } | |
| 74 const SkTextChunk* next() { | |
| 75 return (fIndex < fBlob->fChunks.count()) ? fBlob->fChunks[fIndex++] : NULL; | |
| 76 } | |
| 77 | |
| 78 private: | |
| 79 const SkTextBlob* fBlob; | |
| 80 int fIndex; | |
| 81 }; | |
| 82 | |
| 83 private: | |
| 84 SkTextBlob(const SkTDArray<const SkTextChunk*>& chunks); | |
| 85 | |
| 86 const SkTDArray<const SkTextChunk*> fChunks; | |
| 87 mutable uint32_t fUniqueID; | |
| 88 }; | |
| 89 | |
| 90 /** \class SkTextBlobBuilder | |
| 91 | |
| 92 Helper class for constructing SkTextBlobs. | |
| 93 */ | |
| 94 class SK_API SkTextBlobBuilder { | |
| 95 public: | |
| 96 SkTextBlobBuilder(); | |
| 97 ~SkTextBlobBuilder(); | |
| 98 | |
| 99 void addChunk(const SkTextChunk* chunk); | |
|
reed1
2014/08/14 15:55:49
Hmmm, I was imagining an alternate adder style:
u
f(malita)
2014/08/14 16:27:01
I like this idea, and there's no reason not to hav
| |
| 100 | |
| 101 // FIXME: should we support glyph-wise ops? Not sure whether this is interes ting | |
| 102 // for clients at this point -- they likely have a better idea of chunking. | |
| 103 /* | |
| 104 void addGlyph(uint16_t glyph, const SkPaint& font, const SkRect* bounds = NU LL); | |
| 105 void addGlyph(uint16_t glyph, const SkScalar pos, const SkPaint& font, | |
| 106 const SkRect* bounds = NULL); | |
| 107 void addGlyph(uint16_t glyph, const SkPoint pos, const SkPaint& font, | |
| 108 const SkRect* bounds = NULL); | |
| 109 */ | |
| 110 | |
| 111 const SkTextBlob* build(); | |
| 112 | |
| 113 private: | |
| 114 | |
| 115 SkTDArray<const SkTextChunk*> fChunks; | |
| 116 }; | |
| 117 | |
| 118 #endif // SkTextBlob_DEFINED | |
| OLD | NEW |