Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Unified Diff: src/gpu/GrTextContext.cpp

Issue 1514933002: Create GrTextUtils (Closed) Base URL: https://skia.googlesource.com/skia.git@cleanuptext9
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrTextContext.h ('k') | src/gpu/GrTextUtils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrTextContext.cpp
diff --git a/src/gpu/GrTextContext.cpp b/src/gpu/GrTextContext.cpp
index 7ce7a3163ca0e130b0a3f7efa132f13b65814206..8ff2523a73b49d5e7c1d2cc45bb802684987c47e 100644
--- a/src/gpu/GrTextContext.cpp
+++ b/src/gpu/GrTextContext.cpp
@@ -6,20 +6,14 @@
*/
#include "GrTextContext.h"
-#include "GrBlurUtils.h"
#include "GrContext.h"
-#include "GrDrawContext.h"
#include "GrFontScaler.h"
+#include "GrTextUtils.h"
-#include "SkAutoKern.h"
#include "SkDrawFilter.h"
-#include "SkDrawProcs.h"
#include "SkGlyphCache.h"
-#include "SkGpuDevice.h"
#include "SkGrPriv.h"
#include "SkTextBlobRunIterator.h"
-#include "SkTextMapStateProc.h"
-#include "SkTextToPathIter.h"
GrTextContext::GrTextContext(GrContext* context, const SkSurfaceProps& surfaceProps)
: fFallbackTextContext(nullptr)
@@ -51,7 +45,8 @@ void GrTextContext::drawText(GrDrawContext* dc,
} while (textContext);
// fall back to drawing as a path
- this->drawTextAsPath(dc, clip, skPaint, viewMatrix, text, byteLength, x, y, clipBounds);
+ GrTextUtils::DrawTextAsPath(fContext, dc, clip, skPaint, viewMatrix, text, byteLength, x, y,
+ clipBounds);
}
void GrTextContext::drawPosText(GrDrawContext* dc,
@@ -76,8 +71,8 @@ void GrTextContext::drawPosText(GrDrawContext* dc,
} while (textContext);
// fall back to drawing as a path
- this->drawPosTextAsPath(dc, clip, skPaint, viewMatrix, text, byteLength, pos,
- scalarsPerPosition, offset, clipBounds);
+ GrTextUtils::DrawPosTextAsPath(fContext, dc, fSurfaceProps, clip, skPaint, viewMatrix, text,
+ byteLength, pos, scalarsPerPosition, offset, clipBounds);
}
bool GrTextContext::ShouldDisableLCD(const SkPaint& paint) {
@@ -160,105 +155,6 @@ void GrTextContext::drawTextBlob(GrDrawContext* dc,
}
}
-void GrTextContext::drawTextAsPath(GrDrawContext* dc,
- const GrClip& clip,
- const SkPaint& skPaint, const SkMatrix& viewMatrix,
- const char text[], size_t byteLength, SkScalar x, SkScalar y,
- const SkIRect& clipBounds) {
- SkTextToPathIter iter(text, byteLength, skPaint, true);
-
- SkMatrix matrix;
- matrix.setScale(iter.getPathScale(), iter.getPathScale());
- matrix.postTranslate(x, y);
-
- const SkPath* iterPath;
- SkScalar xpos, prevXPos = 0;
-
- while (iter.next(&iterPath, &xpos)) {
- matrix.postTranslate(xpos - prevXPos, 0);
- if (iterPath) {
- const SkPaint& pnt = iter.getPaint();
- GrBlurUtils::drawPathWithMaskFilter(fContext, dc, clip, *iterPath,
- pnt, viewMatrix, &matrix, clipBounds, false);
- }
- prevXPos = xpos;
- }
-}
-
-void GrTextContext::drawPosTextAsPath(GrDrawContext* dc,
- const GrClip& clip,
- const SkPaint& origPaint, const SkMatrix& viewMatrix,
- const char text[], size_t byteLength,
- const SkScalar pos[], int scalarsPerPosition,
- const SkPoint& offset, const SkIRect& clipBounds) {
- // setup our std paint, in hopes of getting hits in the cache
- SkPaint paint(origPaint);
- SkScalar matrixScale = paint.setupForAsPaths();
-
- SkMatrix matrix;
- matrix.setScale(matrixScale, matrixScale);
-
- // Temporarily jam in kFill, so we only ever ask for the raw outline from the cache.
- paint.setStyle(SkPaint::kFill_Style);
- paint.setPathEffect(nullptr);
-
- SkDrawCacheProc glyphCacheProc = paint.getDrawCacheProc();
- SkAutoGlyphCache autoCache(paint, &fSurfaceProps, nullptr);
- SkGlyphCache* cache = autoCache.getCache();
-
- const char* stop = text + byteLength;
- SkTextAlignProc alignProc(paint.getTextAlign());
- SkTextMapStateProc tmsProc(SkMatrix::I(), offset, scalarsPerPosition);
-
- // Now restore the original settings, so we "draw" with whatever style/stroking.
- paint.setStyle(origPaint.getStyle());
- paint.setPathEffect(origPaint.getPathEffect());
-
- while (text < stop) {
- const SkGlyph& glyph = glyphCacheProc(cache, &text, 0, 0);
- if (glyph.fWidth) {
- const SkPath* path = cache->findPath(glyph);
- if (path) {
- SkPoint tmsLoc;
- tmsProc(pos, &tmsLoc);
- SkPoint loc;
- alignProc(tmsLoc, glyph, &loc);
-
- matrix[SkMatrix::kMTransX] = loc.fX;
- matrix[SkMatrix::kMTransY] = loc.fY;
- GrBlurUtils::drawPathWithMaskFilter(fContext, dc, clip, *path, paint,
- viewMatrix, &matrix, clipBounds, false);
- }
- }
- pos += scalarsPerPosition;
- }
-}
-
-// *** change to output positions?
-int GrTextContext::MeasureText(SkGlyphCache* cache, SkDrawCacheProc glyphCacheProc,
- const char text[], size_t byteLength, SkVector* stopVector) {
- SkFixed x = 0, y = 0;
- const char* stop = text + byteLength;
-
- SkAutoKern autokern;
-
- int numGlyphs = 0;
- while (text < stop) {
- // don't need x, y here, since all subpixel variants will have the
- // same advance
- const SkGlyph& glyph = glyphCacheProc(cache, &text, 0, 0);
-
- x += autokern.adjust(glyph) + glyph.fAdvanceX;
- y += glyph.fAdvanceY;
- ++numGlyphs;
- }
- stopVector->set(SkFixedToScalar(x), SkFixedToScalar(y));
-
- SkASSERT(text == stop);
-
- return numGlyphs;
-}
-
static void GlyphCacheAuxProc(void* data) {
GrFontScaler* scaler = (GrFontScaler*)data;
SkSafeUnref(scaler);
« no previous file with comments | « src/gpu/GrTextContext.h ('k') | src/gpu/GrTextUtils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698