GrDistanceFieldTextContext.h revision ddf2bfb190b2760ef6d28efe2cdc16c68287553d
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    virtual void drawText(const char text[], size_t byteLength, SkScalar x, SkScalar y) SK_OVERRIDE;
21    virtual void drawPosText(const char text[], size_t byteLength,
22                             const SkScalar pos[], SkScalar constY,
23                             int scalarsPerPosition) SK_OVERRIDE;
24
25    static bool CanDraw(const SkPaint& paint, const SkMatrix& ctm);
26
27private:
28    GrDistanceFieldTextContext(GrContext*, const GrPaint&, const SkPaint&,
29                               const SkDeviceProperties&);
30    virtual ~GrDistanceFieldTextContext();
31    friend class GrTTextContextManager<GrDistanceFieldTextContext>;
32
33    GrTextStrike*           fStrike;
34    SkScalar                fTextRatio;
35
36    void drawPackedGlyph(GrGlyph::PackedID, GrFixed left, GrFixed top, GrFontScaler*);
37    void flushGlyphs();                 // automatically called by destructor
38
39    enum {
40        kMinRequestedGlyphs      = 1,
41        kDefaultRequestedGlyphs  = 64,
42        kMinRequestedVerts       = kMinRequestedGlyphs * 4,
43        kDefaultRequestedVerts   = kDefaultRequestedGlyphs * 4,
44    };
45
46    SkPoint*                fVertices;
47    int32_t                 fMaxVertices;
48    GrTexture*              fCurrTexture;
49    int                     fCurrVertex;
50};
51
52#endif
53