| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 GrAtlasTextContext_DEFINED | 8 #ifndef GrAtlasTextContext_DEFINED |
| 9 #define GrAtlasTextContext_DEFINED | 9 #define GrAtlasTextContext_DEFINED |
| 10 | 10 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 fSubRunInfo.push_back(); | 102 fSubRunInfo.push_back(); |
| 103 } | 103 } |
| 104 struct SubRunInfo { | 104 struct SubRunInfo { |
| 105 SubRunInfo() | 105 SubRunInfo() |
| 106 : fAtlasGeneration(GrBatchAtlas::kInvalidAtlasGeneration) | 106 : fAtlasGeneration(GrBatchAtlas::kInvalidAtlasGeneration) |
| 107 , fVertexStartIndex(0) | 107 , fVertexStartIndex(0) |
| 108 , fVertexEndIndex(0) | 108 , fVertexEndIndex(0) |
| 109 , fGlyphStartIndex(0) | 109 , fGlyphStartIndex(0) |
| 110 , fGlyphEndIndex(0) | 110 , fGlyphEndIndex(0) |
| 111 , fDrawAsDistanceFields(false) {} | 111 , fDrawAsDistanceFields(false) {} |
| 112 SubRunInfo(const SubRunInfo& that) |
| 113 : fBulkUseToken(that.fBulkUseToken) |
| 114 , fStrike(SkSafeRef(that.fStrike.get())) |
| 115 , fAtlasGeneration(that.fAtlasGeneration) |
| 116 , fVertexStartIndex(that.fVertexStartIndex) |
| 117 , fVertexEndIndex(that.fVertexEndIndex) |
| 118 , fGlyphStartIndex(that.fGlyphStartIndex) |
| 119 , fGlyphEndIndex(that.fGlyphEndIndex) |
| 120 , fTextRatio(that.fTextRatio) |
| 121 , fMaskFormat(that.fMaskFormat) |
| 122 , fDrawAsDistanceFields(that.fDrawAsDistanceFields) |
| 123 , fUseLCDText(that.fUseLCDText) { |
| 124 } |
| 112 // Distance field text cannot draw coloremoji, and so has to fal
l back. However, | 125 // Distance field text cannot draw coloremoji, and so has to fal
l back. However, |
| 113 // though the distance field text and the coloremoji may share t
he same run, they | 126 // though the distance field text and the coloremoji may share t
he same run, they |
| 114 // will have different descriptors. If fOverrideDescriptor is n
on-NULL, then it | 127 // will have different descriptors. If fOverrideDescriptor is n
on-NULL, then it |
| 115 // will be used in place of the run's descriptor to regen textur
e coords | 128 // will be used in place of the run's descriptor to regen textur
e coords |
| 116 // TODO we could have a descriptor cache, it would reduce the si
ze of these blobs | 129 // TODO we could have a descriptor cache, it would reduce the si
ze of these blobs |
| 117 // significantly, and then the subrun could just have a refed po
inter to the | 130 // significantly, and then the subrun could just have a refed po
inter to the |
| 118 // correct descriptor. | 131 // correct descriptor. |
| 119 GrBatchAtlas::BulkUseTokenUpdater fBulkUseToken; | 132 GrBatchAtlas::BulkUseTokenUpdater fBulkUseToken; |
| 133 SkAutoTUnref<GrBatchTextStrike> fStrike; |
| 120 uint64_t fAtlasGeneration; | 134 uint64_t fAtlasGeneration; |
| 121 size_t fVertexStartIndex; | 135 size_t fVertexStartIndex; |
| 122 size_t fVertexEndIndex; | 136 size_t fVertexEndIndex; |
| 123 uint32_t fGlyphStartIndex; | 137 uint32_t fGlyphStartIndex; |
| 124 uint32_t fGlyphEndIndex; | 138 uint32_t fGlyphEndIndex; |
| 125 SkScalar fTextRatio; // df property | 139 SkScalar fTextRatio; // df property |
| 126 GrMaskFormat fMaskFormat; | 140 GrMaskFormat fMaskFormat; |
| 127 bool fDrawAsDistanceFields; // df property | 141 bool fDrawAsDistanceFields; // df property |
| 128 bool fUseLCDText; // df property | 142 bool fUseLCDText; // df property |
| 129 }; | 143 }; |
| 130 | 144 |
| 131 SubRunInfo& push_back() { | 145 SubRunInfo& push_back() { |
| 132 // Forward glyph / vertex information to seed the new sub run | 146 // Forward glyph / vertex information to seed the new sub run |
| 133 SubRunInfo& prevSubRun = fSubRunInfo.back(); | |
| 134 SubRunInfo& newSubRun = fSubRunInfo.push_back(); | 147 SubRunInfo& newSubRun = fSubRunInfo.push_back(); |
| 148 SubRunInfo& prevSubRun = fSubRunInfo.fromBack(1); |
| 149 |
| 135 newSubRun.fGlyphStartIndex = prevSubRun.fGlyphEndIndex; | 150 newSubRun.fGlyphStartIndex = prevSubRun.fGlyphEndIndex; |
| 136 newSubRun.fGlyphEndIndex = prevSubRun.fGlyphEndIndex; | 151 newSubRun.fGlyphEndIndex = prevSubRun.fGlyphEndIndex; |
| 137 | 152 |
| 138 newSubRun.fVertexStartIndex = prevSubRun.fVertexEndIndex; | 153 newSubRun.fVertexStartIndex = prevSubRun.fVertexEndIndex; |
| 139 newSubRun.fVertexEndIndex = prevSubRun.fVertexEndIndex; | 154 newSubRun.fVertexEndIndex = prevSubRun.fVertexEndIndex; |
| 140 return newSubRun; | 155 return newSubRun; |
| 141 } | 156 } |
| 142 static const int kMinSubRuns = 1; | 157 static const int kMinSubRuns = 1; |
| 143 SkAutoTUnref<GrBatchTextStrike> fStrike; | |
| 144 SkAutoTUnref<SkTypeface> fTypeface; | 158 SkAutoTUnref<SkTypeface> fTypeface; |
| 145 SkRect fVertexBounds; | 159 SkRect fVertexBounds; |
| 146 SkSTArray<kMinSubRuns, SubRunInfo> fSubRunInfo; | 160 SkSTArray<kMinSubRuns, SubRunInfo> fSubRunInfo; |
| 147 SkAutoDescriptor fDescriptor; | 161 SkAutoDescriptor fDescriptor; |
| 148 SkAutoTDelete<SkAutoDescriptor> fOverrideDescriptor; // df propertie
s | 162 SkAutoTDelete<SkAutoDescriptor> fOverrideDescriptor; // df propertie
s |
| 149 GrColor fColor; | 163 GrColor fColor; |
| 150 bool fInitialized; | 164 bool fInitialized; |
| 151 bool fDrawAsPaths; | 165 bool fDrawAsPaths; |
| 152 }; | 166 }; |
| 153 | 167 |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 void setHasBitmap() { fTextType |= kHasBitmap_TextType; } | 266 void setHasBitmap() { fTextType |= kHasBitmap_TextType; } |
| 253 }; | 267 }; |
| 254 | 268 |
| 255 typedef BitmapTextBlob::Run Run; | 269 typedef BitmapTextBlob::Run Run; |
| 256 typedef Run::SubRunInfo PerSubRunInfo; | 270 typedef Run::SubRunInfo PerSubRunInfo; |
| 257 | 271 |
| 258 inline bool canDrawAsDistanceFields(const SkPaint&, const SkMatrix& viewMatr
ix); | 272 inline bool canDrawAsDistanceFields(const SkPaint&, const SkMatrix& viewMatr
ix); |
| 259 BitmapTextBlob* setupDFBlob(int glyphCount, const SkPaint& origPaint, | 273 BitmapTextBlob* setupDFBlob(int glyphCount, const SkPaint& origPaint, |
| 260 const SkMatrix& viewMatrix, SkGlyphCache** cache
, | 274 const SkMatrix& viewMatrix, SkGlyphCache** cache
, |
| 261 SkPaint* dfPaint, SkScalar* textRatio); | 275 SkPaint* dfPaint, SkScalar* textRatio); |
| 262 void bmpAppendGlyph(BitmapTextBlob*, int runIndex, GrGlyph::PackedID, int le
ft, int top, | 276 void bmpAppendGlyph(BitmapTextBlob*, int runIndex, const SkGlyph&, int left,
int top, |
| 263 GrColor color, GrFontScaler*, const SkIRect& clipRect); | 277 GrColor color, GrFontScaler*, const SkIRect& clipRect); |
| 264 bool dfAppendGlyph(BitmapTextBlob*, int runIndex, GrGlyph::PackedID, SkScala
r sx, SkScalar sy, | 278 bool dfAppendGlyph(BitmapTextBlob*, int runIndex, const SkGlyph&, SkScalar s
x, SkScalar sy, |
| 265 GrColor color, GrFontScaler*, const SkIRect& clipRect, Sk
Scalar textRatio, | 279 GrColor color, GrFontScaler*, const SkIRect& clipRect, Sk
Scalar textRatio, |
| 266 const SkMatrix& viewMatrix); | 280 const SkMatrix& viewMatrix); |
| 267 inline void appendGlyphPath(BitmapTextBlob* blob, GrGlyph* glyph, | 281 inline void appendGlyphPath(BitmapTextBlob*, GrGlyph*, GrFontScaler*, const
SkGlyph&, |
| 268 GrFontScaler* scaler, SkScalar x, SkScalar y); | 282 SkScalar x, SkScalar y); |
| 269 inline void appendGlyphCommon(BitmapTextBlob*, Run*, Run::SubRunInfo*, | 283 inline void appendGlyphCommon(BitmapTextBlob*, Run*, Run::SubRunInfo*, |
| 270 const SkRect& positions, GrColor color, | 284 const SkRect& positions, GrColor color, |
| 271 size_t vertexStride, bool useVertexColor, | 285 size_t vertexStride, bool useVertexColor, |
| 272 GrGlyph*); | 286 GrGlyph*); |
| 273 | 287 |
| 274 inline void flushRunAsPaths(const SkTextBlob::RunIterator&, const SkPaint&,
SkDrawFilter*, | 288 inline void flushRunAsPaths(const SkTextBlob::RunIterator&, const SkPaint&,
SkDrawFilter*, |
| 275 const SkMatrix& viewMatrix, const SkIRect& clipB
ounds, SkScalar x, | 289 const SkMatrix& viewMatrix, const SkIRect& clipB
ounds, SkScalar x, |
| 276 SkScalar y); | 290 SkScalar y); |
| 277 inline BitmapTextBatch* createBatch(BitmapTextBlob*, const PerSubRunInfo&, | 291 inline BitmapTextBatch* createBatch(BitmapTextBlob*, const PerSubRunInfo&, |
| 278 int glyphCount, int run, int subRun, | 292 int glyphCount, int run, int subRun, |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 friend class BitmapTextBatch; | 402 friend class BitmapTextBatch; |
| 389 | 403 |
| 390 #ifdef GR_TEST_UTILS | 404 #ifdef GR_TEST_UTILS |
| 391 BATCH_TEST_FRIEND(TextBlobBatch); | 405 BATCH_TEST_FRIEND(TextBlobBatch); |
| 392 #endif | 406 #endif |
| 393 | 407 |
| 394 typedef GrTextContext INHERITED; | 408 typedef GrTextContext INHERITED; |
| 395 }; | 409 }; |
| 396 | 410 |
| 397 #endif | 411 #endif |
| OLD | NEW |