aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-01-30 16:41:23 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-01-30 16:41:23 +0000
commitddf2bfb190b2760ef6d28efe2cdc16c68287553d (patch)
tree90643f1dbc9fe0af09815553e67ad90f2c172c84 /src
parentcf34bc06347dd2734a7fdaef5cf8853e92979d5e (diff)
Move GrTextContext to private interface
NOTRY=true R=bsalomon@google.com, reed@google.com Author: jvanverth@google.com Review URL: https://codereview.chromium.org/145073005 git-svn-id: http://skia.googlecode.com/svn/trunk@13239 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src')
-rwxr-xr-xsrc/gpu/GrBitmapTextContext.h49
-rwxr-xr-xsrc/gpu/GrDistanceFieldTextContext.h52
-rw-r--r--src/gpu/GrTextContext.h129
3 files changed, 230 insertions, 0 deletions
diff --git a/src/gpu/GrBitmapTextContext.h b/src/gpu/GrBitmapTextContext.h
new file mode 100755
index 0000000000..6550e3c079
--- /dev/null
+++ b/src/gpu/GrBitmapTextContext.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrBitmapTextContext_DEFINED
+#define GrBitmapTextContext_DEFINED
+
+#include "GrTextContext.h"
+
+class GrTextStrike;
+
+/*
+ * This class implements GrTextContext using standard bitmap fonts
+ */
+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:
+ GrTextStrike* fStrike;
+
+ void drawPackedGlyph(GrGlyph::PackedID, GrFixed left, GrFixed top, GrFontScaler*);
+ void flushGlyphs(); // automatically called by destructor
+
+ enum {
+ kMinRequestedGlyphs = 1,
+ kDefaultRequestedGlyphs = 64,
+ kMinRequestedVerts = kMinRequestedGlyphs * 4,
+ kDefaultRequestedVerts = kDefaultRequestedGlyphs * 4,
+ };
+
+ SkPoint* fVertices;
+ int32_t fMaxVertices;
+ GrTexture* fCurrTexture;
+ int fCurrVertex;
+};
+
+#endif
diff --git a/src/gpu/GrDistanceFieldTextContext.h b/src/gpu/GrDistanceFieldTextContext.h
new file mode 100755
index 0000000000..8b94038b67
--- /dev/null
+++ b/src/gpu/GrDistanceFieldTextContext.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrDistanceFieldTextContext_DEFINED
+#define GrDistanceFieldTextContext_DEFINED
+
+#include "GrTextContext.h"
+
+class GrTextStrike;
+
+/*
+ * This class implements GrTextContext using distance field fonts
+ */
+class GrDistanceFieldTextContext : public GrTextContext {
+public:
+ 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:
+ GrDistanceFieldTextContext(GrContext*, const GrPaint&, const SkPaint&,
+ const SkDeviceProperties&);
+ virtual ~GrDistanceFieldTextContext();
+ friend class GrTTextContextManager<GrDistanceFieldTextContext>;
+
+ GrTextStrike* fStrike;
+ SkScalar fTextRatio;
+
+ void drawPackedGlyph(GrGlyph::PackedID, GrFixed left, GrFixed top, GrFontScaler*);
+ void flushGlyphs(); // automatically called by destructor
+
+ enum {
+ kMinRequestedGlyphs = 1,
+ kDefaultRequestedGlyphs = 64,
+ kMinRequestedVerts = kMinRequestedGlyphs * 4,
+ kDefaultRequestedVerts = kDefaultRequestedGlyphs * 4,
+ };
+
+ SkPoint* fVertices;
+ int32_t fMaxVertices;
+ GrTexture* fCurrTexture;
+ int fCurrVertex;
+};
+
+#endif
diff --git a/src/gpu/GrTextContext.h b/src/gpu/GrTextContext.h
new file mode 100644
index 0000000000..c572d0d016
--- /dev/null
+++ b/src/gpu/GrTextContext.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrTextContext_DEFINED
+#define GrTextContext_DEFINED
+
+#include "GrPoint.h"
+#include "GrGlyph.h"
+#include "GrPaint.h"
+#include "SkDeviceProperties.h"
+
+#include "SkPostConfig.h"
+
+class GrContext;
+class GrDrawTarget;
+class GrFontScaler;
+
+/*
+ * This class wraps the state for a single text render
+ */
+class GrTextContext {
+public:
+ virtual ~GrTextContext() {}
+ virtual void drawText(const char text[], size_t byteLength, SkScalar x, SkScalar y) = 0;
+ 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&);
+
+ static GrFontScaler* GetGrFontScaler(SkGlyphCache* cache);
+ static void MeasureText(SkGlyphCache* cache, SkDrawCacheProc glyphCacheProc,
+ const char text[], size_t byteLength, SkVector* stopVector);
+
+ GrContext* fContext;
+ GrPaint fPaint;
+ SkPaint fSkPaint;
+ SkDeviceProperties fDeviceProperties;
+ GrDrawTarget* fDrawTarget;
+
+ SkIRect fClipRect;
+};
+
+/*
+ * These classes wrap the creation of a single text context for a given GPU device. The
+ * assumption is that we'll only be using one text context at a time for that device.
+ */
+class GrTextContextManager {
+public:
+ 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>
+class GrTTextContextManager : public GrTextContextManager {
+private:
+ class ManagedTextContext : public TextContextClass {
+ public:
+ virtual ~ManagedTextContext() {}
+
+ ManagedTextContext(GrContext* grContext,
+ const GrPaint& grPaint,
+ const SkPaint& skPaint,
+ const SkDeviceProperties& properties,
+ GrTTextContextManager<TextContextClass>* manager) :
+ TextContextClass(grContext, grPaint, skPaint, properties) {
+ fManager = manager;
+ }
+
+ static void operator delete(void* ptr) {
+ if (ptr == NULL) {
+ return;
+ }
+ ManagedTextContext* context = reinterpret_cast<ManagedTextContext*>(ptr);
+ context->fManager->recycle(context);
+ }
+
+ static void operator delete(void*, void*) {
+ }
+
+ GrTTextContextManager<TextContextClass>* fManager;
+ };
+
+public:
+ GrTTextContextManager() {
+ fAllocation = sk_malloc_throw(sizeof(ManagedTextContext));
+ fUsed = false;
+ }
+
+ virtual ~GrTTextContextManager() {
+ SkASSERT(!fUsed);
+ sk_free(fAllocation);
+ }
+
+ virtual GrTextContext* create(GrContext* grContext, const GrPaint& grPaint,
+ const SkPaint& skPaint, const SkDeviceProperties& properties)
+ SK_OVERRIDE {
+ // add check for usePath here?
+ SkASSERT(!fUsed);
+ ManagedTextContext* obj = SkNEW_PLACEMENT_ARGS(fAllocation, ManagedTextContext,
+ (grContext, grPaint, skPaint, properties,
+ this));
+ fUsed = true;
+ 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);
+ SkASSERT(fUsed);
+ fUsed = false;
+ }
+
+ void* fAllocation;
+ bool fUsed;
+};
+
+#endif