GrDistanceFieldTextContext.h revision 4d517fdbb145cb95e5e935470df331e1b6667cfc
1/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrDistanceFieldTextContext_DEFINED
9#define GrDistanceFieldTextContext_DEFINED
10
11#include "GrTextContext.h"
12
13class GrTextStrike;
14
15/*
16 * This class implements GrTextContext using distance field fonts
17 */
18class GrDistanceFieldTextContext : public GrTextContext {
19public:
20    GrDistanceFieldTextContext(GrContext*, const SkDeviceProperties&, bool enable);
21    virtual ~GrDistanceFieldTextContext();
22
23    virtual void drawText(const GrPaint&, const SkPaint&, const char text[], size_t byteLength,
24                          SkScalar x, SkScalar y) SK_OVERRIDE;
25    virtual void drawPosText(const GrPaint&, const SkPaint&,
26                             const char text[], size_t byteLength,
27                             const SkScalar pos[], SkScalar constY,
28                             int scalarsPerPosition) SK_OVERRIDE;
29
30    virtual bool canDraw(const SkPaint& paint) SK_OVERRIDE;
31
32private:
33    GrTextStrike*           fStrike;
34    SkScalar                fTextRatio;
35    bool                    fUseLCDText;
36    bool                    fEnableDFRendering;
37    GrTexture*              fGammaTexture;
38
39    void init(const GrPaint&, const SkPaint&);
40    void drawPackedGlyph(GrGlyph::PackedID, SkFixed left, SkFixed top, GrFontScaler*);
41    void flushGlyphs();                 // automatically called by destructor
42    void finish();
43
44    enum {
45        kMinRequestedGlyphs      = 1,
46        kDefaultRequestedGlyphs  = 64,
47        kMinRequestedVerts       = kMinRequestedGlyphs * 4,
48        kDefaultRequestedVerts   = kDefaultRequestedGlyphs * 4,
49    };
50
51    SkPoint*                fVertices;
52    int32_t                 fMaxVertices;
53    GrTexture*              fCurrTexture;
54    int                     fCurrVertex;
55};
56
57#endif
58