michael@0: /* michael@0: * Copyright 2013 Google Inc. michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: #ifndef GrDistanceFieldTextContext_DEFINED michael@0: #define GrDistanceFieldTextContext_DEFINED michael@0: michael@0: #include "GrTextContext.h" michael@0: michael@0: class GrTextStrike; michael@0: michael@0: /* michael@0: * This class implements GrTextContext using distance field fonts michael@0: */ michael@0: class GrDistanceFieldTextContext : public GrTextContext { michael@0: public: michael@0: GrDistanceFieldTextContext(GrContext*, const SkDeviceProperties&); michael@0: virtual ~GrDistanceFieldTextContext(); michael@0: michael@0: virtual void drawText(const GrPaint&, const SkPaint&, const char text[], size_t byteLength, michael@0: SkScalar x, SkScalar y) SK_OVERRIDE; michael@0: virtual void drawPosText(const GrPaint&, const SkPaint&, michael@0: const char text[], size_t byteLength, michael@0: const SkScalar pos[], SkScalar constY, michael@0: int scalarsPerPosition) SK_OVERRIDE; michael@0: michael@0: virtual bool canDraw(const SkPaint& paint) SK_OVERRIDE; michael@0: michael@0: private: michael@0: GrTextStrike* fStrike; michael@0: SkScalar fTextRatio; michael@0: michael@0: void init(const GrPaint&, const SkPaint&); michael@0: void drawPackedGlyph(GrGlyph::PackedID, GrFixed left, GrFixed top, GrFontScaler*); michael@0: void flushGlyphs(); // automatically called by destructor michael@0: void finish(); michael@0: michael@0: enum { michael@0: kMinRequestedGlyphs = 1, michael@0: kDefaultRequestedGlyphs = 64, michael@0: kMinRequestedVerts = kMinRequestedGlyphs * 4, michael@0: kDefaultRequestedVerts = kDefaultRequestedGlyphs * 4, michael@0: }; michael@0: michael@0: SkPoint* fVertices; michael@0: int32_t fMaxVertices; michael@0: GrTexture* fCurrTexture; michael@0: int fCurrVertex; michael@0: }; michael@0: michael@0: #endif