| 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 #include "GrAtlasTextContext.h" | 7 #include "GrAtlasTextContext.h" |
| 8 | 8 |
| 9 #include "GrBlurUtils.h" | 9 #include "GrBlurUtils.h" |
| 10 #include "GrDrawContext.h" | 10 #include "GrDrawContext.h" |
| (...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 882 return; | 882 return; |
| 883 } | 883 } |
| 884 | 884 |
| 885 int x = vx + glyph->fBounds.fLeft; | 885 int x = vx + glyph->fBounds.fLeft; |
| 886 int y = vy + glyph->fBounds.fTop; | 886 int y = vy + glyph->fBounds.fTop; |
| 887 | 887 |
| 888 // keep them as ints until we've done the clip-test | 888 // keep them as ints until we've done the clip-test |
| 889 int width = glyph->fBounds.width(); | 889 int width = glyph->fBounds.width(); |
| 890 int height = glyph->fBounds.height(); | 890 int height = glyph->fBounds.height(); |
| 891 | 891 |
| 892 // If the glyph is too large we fall back to paths | |
| 893 if (glyph->fTooLargeForAtlas) { | |
| 894 this->appendGlyphPath(blob, glyph, scaler, skGlyph, SkIntToScalar(vx), S
kIntToScalar(vy)); | |
| 895 return; | |
| 896 } | |
| 897 | |
| 898 SkRect r; | 892 SkRect r; |
| 899 r.fLeft = SkIntToScalar(x); | 893 r.fLeft = SkIntToScalar(x); |
| 900 r.fTop = SkIntToScalar(y); | 894 r.fTop = SkIntToScalar(y); |
| 901 r.fRight = r.fLeft + SkIntToScalar(width); | 895 r.fRight = r.fLeft + SkIntToScalar(width); |
| 902 r.fBottom = r.fTop + SkIntToScalar(height); | 896 r.fBottom = r.fTop + SkIntToScalar(height); |
| 903 | 897 |
| 904 blob->appendGlyph(runIndex, r, color, fCurrStrike, glyph); | 898 blob->appendGlyph(runIndex, r, color, fCurrStrike, glyph, scaler, skGlyph, |
| 899 SkIntToScalar(vx), SkIntToScalar(vy), 1.0f, false); |
| 905 } | 900 } |
| 906 | 901 |
| 907 bool GrAtlasTextContext::dfAppendGlyph(GrAtlasTextBlob* blob, int runIndex, | 902 bool GrAtlasTextContext::dfAppendGlyph(GrAtlasTextBlob* blob, int runIndex, |
| 908 const SkGlyph& skGlyph, | 903 const SkGlyph& skGlyph, |
| 909 SkScalar sx, SkScalar sy, GrColor color, | 904 SkScalar sx, SkScalar sy, GrColor color, |
| 910 GrFontScaler* scaler, | 905 GrFontScaler* scaler, |
| 911 SkScalar textRatio, const SkMatrix& viewM
atrix) { | 906 SkScalar textRatio, const SkMatrix& viewM
atrix) { |
| 912 if (!fCurrStrike) { | 907 if (!fCurrStrike) { |
| 913 fCurrStrike = fContext->getBatchFontCache()->getStrike(scaler); | 908 fCurrStrike = fContext->getBatchFontCache()->getStrike(scaler); |
| 914 } | 909 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 934 | 929 |
| 935 SkScalar scale = textRatio; | 930 SkScalar scale = textRatio; |
| 936 dx *= scale; | 931 dx *= scale; |
| 937 dy *= scale; | 932 dy *= scale; |
| 938 width *= scale; | 933 width *= scale; |
| 939 height *= scale; | 934 height *= scale; |
| 940 sx += dx; | 935 sx += dx; |
| 941 sy += dy; | 936 sy += dy; |
| 942 SkRect glyphRect = SkRect::MakeXYWH(sx, sy, width, height); | 937 SkRect glyphRect = SkRect::MakeXYWH(sx, sy, width, height); |
| 943 | 938 |
| 944 // TODO combine with the above | 939 blob->appendGlyph(runIndex, glyphRect, color, fCurrStrike, glyph, scaler, sk
Glyph, |
| 945 // If the glyph is too large we fall back to paths | 940 sx - dx, sy - dy, scale, true); |
| 946 if (glyph->fTooLargeForAtlas) { | |
| 947 this->appendGlyphPath(blob, glyph, scaler, skGlyph, sx - dx, sy - dy, sc
ale, true); | |
| 948 return true; | |
| 949 } | |
| 950 | |
| 951 blob->appendGlyph(runIndex, glyphRect, color, fCurrStrike, glyph); | |
| 952 return true; | 941 return true; |
| 953 } | 942 } |
| 954 | 943 |
| 955 inline void GrAtlasTextContext::appendGlyphPath(GrAtlasTextBlob* blob, GrGlyph*
glyph, | |
| 956 GrFontScaler* scaler, const SkGl
yph& skGlyph, | |
| 957 SkScalar x, SkScalar y, SkScalar
scale, | |
| 958 bool applyVM) { | |
| 959 if (nullptr == glyph->fPath) { | |
| 960 const SkPath* glyphPath = scaler->getGlyphPath(skGlyph); | |
| 961 if (!glyphPath) { | |
| 962 return; | |
| 963 } | |
| 964 | |
| 965 glyph->fPath = new SkPath(*glyphPath); | |
| 966 } | |
| 967 blob->fBigGlyphs.push_back(GrAtlasTextBlob::BigGlyph(*glyph->fPath, x, y, sc
ale, applyVM)); | |
| 968 } | |
| 969 | |
| 970 void GrAtlasTextContext::flushRunAsPaths(GrDrawContext* dc, | 944 void GrAtlasTextContext::flushRunAsPaths(GrDrawContext* dc, |
| 971 const SkTextBlobRunIterator& it, | 945 const SkTextBlobRunIterator& it, |
| 972 const GrClip& clip, const SkPaint& skPa
int, | 946 const GrClip& clip, const SkPaint& skPa
int, |
| 973 SkDrawFilter* drawFilter, const SkMatri
x& viewMatrix, | 947 SkDrawFilter* drawFilter, const SkMatri
x& viewMatrix, |
| 974 const SkIRect& clipBounds, SkScalar x,
SkScalar y) { | 948 const SkIRect& clipBounds, SkScalar x,
SkScalar y) { |
| 975 SkPaint runPaint = skPaint; | 949 SkPaint runPaint = skPaint; |
| 976 | 950 |
| 977 size_t textLen = it.glyphCount() * sizeof(uint16_t); | 951 size_t textLen = it.glyphCount() * sizeof(uint16_t); |
| 978 const SkPoint& offset = it.offset(); | 952 const SkPoint& offset = it.offset(); |
| 979 | 953 |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1186 gTextContext->createDrawTextBlob(clip, grPaint, skPaint, viewMatrix,
text, | 1160 gTextContext->createDrawTextBlob(clip, grPaint, skPaint, viewMatrix,
text, |
| 1187 static_cast<size_t>(textLen), 0, 0,
noClip)); | 1161 static_cast<size_t>(textLen), 0, 0,
noClip)); |
| 1188 | 1162 |
| 1189 SkScalar transX = static_cast<SkScalar>(random->nextU()); | 1163 SkScalar transX = static_cast<SkScalar>(random->nextU()); |
| 1190 SkScalar transY = static_cast<SkScalar>(random->nextU()); | 1164 SkScalar transY = static_cast<SkScalar>(random->nextU()); |
| 1191 const GrAtlasTextBlob::Run::SubRunInfo& info = blob->fRuns[0].fSubRunInfo[0]
; | 1165 const GrAtlasTextBlob::Run::SubRunInfo& info = blob->fRuns[0].fSubRunInfo[0]
; |
| 1192 return gTextContext->createBatch(blob, info, textLen, 0, 0, color, transX, t
ransY, skPaint); | 1166 return gTextContext->createBatch(blob, info, textLen, 0, 0, color, transX, t
ransY, skPaint); |
| 1193 } | 1167 } |
| 1194 | 1168 |
| 1195 #endif | 1169 #endif |
| OLD | NEW |