1/*
2 * Copyright 2010 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 GrTextContext_DEFINED
9#define GrTextContext_DEFINED
10
11#include "GrGlyph.h"
12#include "GrPaint.h"
13#include "SkDeviceProperties.h"
14
15#include "SkPostConfig.h"
16
17class GrContext;
18class GrDrawTarget;
19class GrFontScaler;
20
21/*
22 * This class wraps the state for a single text render
23 */
24class GrTextContext {
25public:
26    virtual ~GrTextContext() {}
27    virtual void drawText(const GrPaint&, const SkPaint&, const char text[], size_t byteLength,
28                          SkScalar x, SkScalar y) = 0;
29    virtual void drawPosText(const GrPaint&, const SkPaint&,
30                             const char text[], size_t byteLength,
31                             const SkScalar pos[], SkScalar constY,
32                             int scalarsPerPosition) = 0;
33
34    virtual bool canDraw(const SkPaint& paint) = 0;
35
36protected:
37    GrTextContext(GrContext*, const SkDeviceProperties&);
38
39    static GrFontScaler* GetGrFontScaler(SkGlyphCache* cache);
40    static void MeasureText(SkGlyphCache* cache, SkDrawCacheProc glyphCacheProc,
41                            const char text[], size_t byteLength, SkVector* stopVector);
42
43    void init(const GrPaint&, const SkPaint&);
44    void finish() { fDrawTarget = NULL; }
45
46    GrContext*         fContext;
47    SkDeviceProperties fDeviceProperties;
48
49    GrDrawTarget*      fDrawTarget;
50    SkIRect            fClipRect;
51    GrPaint            fPaint;
52    SkPaint            fSkPaint;
53};
54
55#endif
56