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

Unified Diff: src/gpu/SkGpuDevice.cpp

Issue 144283002: Add factory class for generating various flavors of GrTextContext. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Add placement delete for ManagedTextContext Created 6 years, 11 months 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.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/SkGpuDevice.cpp
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 5ba174cafcc53e9f483b7844c1f1d98b173629ac..0e91182f9d3f5fabbb0f26a44b00a0a10c27c948 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -200,6 +200,12 @@ void SkGpuDevice::initFromRenderTarget(GrContext* context,
fContext = context;
fContext->ref();
+#if SK_DISTANCEFIELD_FONTS
+ fTextContextManager = SkNEW(GrTTextContextManager<GrDistanceFieldTextContext>);
+#else
+ fTextContextManager = SkNEW(GrTTextContextManager<GrBitmapTextContext>);
+#endif
+
fRenderTarget = NULL;
fNeedClear = false;
@@ -235,6 +241,12 @@ SkGpuDevice::SkGpuDevice(GrContext* context,
fContext = context;
fContext->ref();
+#if SK_DISTANCEFIELD_FONTS
+ fTextContextManager = SkNEW(GrTTextContextManager<GrDistanceFieldTextContext>);
+#else
+ fTextContextManager = SkNEW(GrTTextContextManager<GrBitmapTextContext>);
+#endif
+
fRenderTarget = NULL;
fNeedClear = false;
@@ -279,6 +291,8 @@ SkGpuDevice::~SkGpuDevice() {
if (fDrawProcs) {
delete fDrawProcs;
}
+
+ delete fTextContextManager;
// The GrContext takes a ref on the target. We don't want to cause the render
// target to be unnecessarily kept alive.
@@ -1820,13 +1834,15 @@ void SkGpuDevice::drawText(const SkDraw& draw, const void* text,
SkDEBUGCODE(this->validate();)
- GrDistanceFieldTextContext context(fContext, grPaint, paint);
+ SkAutoTDelete<GrTextContext> context(fTextContextManager->create(fContext, grPaint, paint));
+ GrDistanceFieldTextContext* dfContext =
+ static_cast<GrDistanceFieldTextContext*>(context.get());
- SkAutoGlyphCache autoCache(context.getSkPaint(), &this->fLeakyProperties, NULL);
+ SkAutoGlyphCache autoCache(dfContext->getSkPaint(), &this->fLeakyProperties, NULL);
SkGlyphCache* cache = autoCache.getCache();
GrFontScaler* fontScaler = get_gr_font_scaler(cache);
- context.drawText((const char *)text, byteLength, x, y, cache, fontScaler);
+ dfContext->drawText((const char *)text, byteLength, x, y, cache, fontScaler);
#endif
} else {
SkDraw myDraw(draw);
@@ -1836,8 +1852,8 @@ void SkGpuDevice::drawText(const SkDraw& draw, const void* text,
return;
}
- GrBitmapTextContext context(fContext, grPaint, paint.getColor());
- myDraw.fProcs = this->initDrawForText(&context);
+ SkAutoTDelete<GrTextContext> context(fTextContextManager->create(fContext, grPaint, paint));
+ myDraw.fProcs = this->initDrawForText(context.get());
this->INHERITED::drawText(myDraw, text, byteLength, x, y, paint);
}
}
@@ -1861,13 +1877,15 @@ void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text,
SkDEBUGCODE(this->validate();)
- GrDistanceFieldTextContext context(fContext, grPaint, paint);
-
- SkAutoGlyphCache autoCache(context.getSkPaint(), &this->fLeakyProperties, NULL);
+ SkAutoTDelete<GrTextContext> context(fTextContextManager->create(fContext, grPaint, paint));
+ GrDistanceFieldTextContext* dfContext =
+ static_cast<GrDistanceFieldTextContext*>(context.get());
+
+ SkAutoGlyphCache autoCache(dfContext->getSkPaint(), &this->fLeakyProperties, NULL);
SkGlyphCache* cache = autoCache.getCache();
GrFontScaler* fontScaler = get_gr_font_scaler(cache);
-
- context.drawPosText((const char *)text, byteLength, pos, constY, scalarsPerPos,
+
+ dfContext->drawPosText((const char *)text, byteLength, pos, constY, scalarsPerPos,
cache, fontScaler);
#endif
} else {
@@ -1877,8 +1895,9 @@ void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text,
if (!skPaint2GrPaintShader(this, paint, true, &grPaint)) {
return;
}
- GrBitmapTextContext context(fContext, grPaint, paint.getColor());
- myDraw.fProcs = this->initDrawForText(&context);
+
+ SkAutoTDelete<GrTextContext> context(fTextContextManager->create(fContext, grPaint, paint));
+ myDraw.fProcs = this->initDrawForText(context.get());
this->INHERITED::drawPosText(myDraw, text, byteLength, pos, constY,
scalarsPerPos, paint);
}
« no previous file with comments | « src/gpu/GrTextContext.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698