Add fallback code for TextContexts that don't support all features
BUG=skia:2018
NOTRY=true
R=bsalomon@google.com, reed@google.com
Author: jvanverth@google.com
Review URL: https://codereview.chromium.org/135683006
git-svn-id: http://skia.googlecode.com/svn/trunk@13236 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/gpu/GrBitmapTextContext.h b/include/gpu/GrBitmapTextContext.h
index c66f8a8..6550e3c 100755
--- a/include/gpu/GrBitmapTextContext.h
+++ b/include/gpu/GrBitmapTextContext.h
@@ -17,16 +17,17 @@
*/
class GrBitmapTextContext : public GrTextContext {
public:
+ GrBitmapTextContext(GrContext*, const GrPaint&, const SkPaint&, const SkDeviceProperties&);
+ virtual ~GrBitmapTextContext();
+
virtual void drawText(const char text[], size_t byteLength, SkScalar x, SkScalar y) SK_OVERRIDE;
virtual void drawPosText(const char text[], size_t byteLength,
const SkScalar pos[], SkScalar constY,
int scalarsPerPosition) SK_OVERRIDE;
+ static bool CanDraw(const SkPaint& paint, const SkMatrix& ctm);
+
private:
- GrBitmapTextContext(GrContext*, const GrPaint&, const SkPaint&, const SkDeviceProperties&);
- virtual ~GrBitmapTextContext();
- friend class GrTTextContextManager<GrBitmapTextContext>;
-
GrTextStrike* fStrike;
void drawPackedGlyph(GrGlyph::PackedID, GrFixed left, GrFixed top, GrFontScaler*);
diff --git a/include/gpu/GrDistanceFieldTextContext.h b/include/gpu/GrDistanceFieldTextContext.h
index 172342a..8b94038 100755
--- a/include/gpu/GrDistanceFieldTextContext.h
+++ b/include/gpu/GrDistanceFieldTextContext.h
@@ -21,6 +21,8 @@
virtual void drawPosText(const char text[], size_t byteLength,
const SkScalar pos[], SkScalar constY,
int scalarsPerPosition) SK_OVERRIDE;
+
+ static bool CanDraw(const SkPaint& paint, const SkMatrix& ctm);
private:
GrDistanceFieldTextContext(GrContext*, const GrPaint&, const SkPaint&,
diff --git a/include/gpu/GrTextContext.h b/include/gpu/GrTextContext.h
index 273e094..c572d0d 100644
--- a/include/gpu/GrTextContext.h
+++ b/include/gpu/GrTextContext.h
@@ -29,7 +29,7 @@
virtual void drawPosText(const char text[], size_t byteLength,
const SkScalar pos[], SkScalar constY,
int scalarsPerPosition) = 0;
-
+
protected:
GrTextContext(GrContext*, const GrPaint&, const SkPaint&, const SkDeviceProperties&);
@@ -55,6 +55,7 @@
virtual ~GrTextContextManager() {}
virtual GrTextContext* create(GrContext* grContext, const GrPaint& grPaint,
const SkPaint& skPaint, const SkDeviceProperties& props) = 0;
+ virtual bool canDraw(const SkPaint& paint, const SkMatrix& ctm) = 0;
};
template <class TextContextClass>
@@ -110,6 +111,10 @@
return obj;
}
+ virtual bool canDraw(const SkPaint& paint, const SkMatrix& ctm) SK_OVERRIDE {
+ return TextContextClass::CanDraw(paint, ctm);
+ }
+
private:
void recycle(GrTextContext* textContext) {
SkASSERT((void*)textContext == fAllocation);