2c5c0e43cb088c261513c7c26febee24a731326b
[platform/upstream/libSkiaSharp.git] / src / gpu / GrBitmapTextContext.h
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 GrBitmapTextContext_DEFINED
9 #define GrBitmapTextContext_DEFINED
10
11 #include "GrTextContext.h"
12
13 #include "GrGeometryProcessor.h"
14
15 class GrTextStrike;
16
17 /*
18  * This class implements GrTextContext using standard bitmap fonts
19  */
20 class GrBitmapTextContext : public GrTextContext {
21 public:
22     static GrBitmapTextContext* Create(GrContext*, SkGpuDevice*,  const SkDeviceProperties&);
23
24     virtual ~GrBitmapTextContext() {}
25
26 private:
27     GrTextStrike*                     fStrike;
28     void*                             fVertices;
29     int                               fCurrVertex;
30     int                               fAllocVertexCount;
31     int                               fTotalVertexCount;
32     SkRect                            fVertexBounds;
33     GrTexture*                        fCurrTexture;
34     GrMaskFormat                      fCurrMaskFormat;
35     SkAutoTUnref<const GrGeometryProcessor> fCachedGeometryProcessor;
36     // Used to check whether fCachedEffect is still valid.
37     uint32_t                          fEffectTextureUniqueID;
38     SkMatrix                          fLocalMatrix;
39
40     GrBitmapTextContext(GrContext*, SkGpuDevice*, const SkDeviceProperties&);
41
42     bool canDraw(const GrRenderTarget*, const GrClip&, const GrPaint&,
43                  const SkPaint&, const SkMatrix& viewMatrix) SK_OVERRIDE;
44
45     void onDrawText(GrRenderTarget*, const GrClip&, const GrPaint&, const SkPaint&,
46                     const SkMatrix& viewMatrix, const char text[], size_t byteLength,
47                     SkScalar x, SkScalar y, const SkIRect& regionClipBounds) SK_OVERRIDE;
48     void onDrawPosText(GrRenderTarget*, const GrClip&, const GrPaint&, const SkPaint&,
49                        const SkMatrix& viewMatrix,
50                        const char text[], size_t byteLength,
51                        const SkScalar pos[], int scalarsPerPosition,
52                        const SkPoint& offset, const SkIRect& regionClipBounds) SK_OVERRIDE;
53
54     void init(GrRenderTarget*, const GrClip&, const GrPaint&, const SkPaint&,
55               const SkIRect& regionClipBounds);
56     void appendGlyph(GrGlyph::PackedID, SkFixed left, SkFixed top, GrFontScaler*);
57     bool uploadGlyph(GrGlyph*, GrFontScaler*);
58     void flush();                 // automatically called by destructor
59     void finish();
60 };
61
62 #endif