• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2015 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 GrAtlasTextContext_DEFINED
9 #define GrAtlasTextContext_DEFINED
10 
11 #include "GrAtlasTextBlob.h"
12 #include "GrDistanceFieldAdjustTable.h"
13 #include "GrGeometryProcessor.h"
14 #include "SkTextBlobRunIterator.h"
15 
16 #ifdef GR_TEST_UTILS
17 #include "GrBatchTest.h"
18 #endif
19 
20 class GrDrawBatch;
21 class GrDrawContext;
22 class GrDrawTarget;
23 class GrPipelineBuilder;
24 class GrTextBlobCache;
25 class SkGlyph;
26 
27 /*
28  * Renders text using some kind of an atlas, ie BitmapText or DistanceField text
29  */
30 class GrAtlasTextContext {
31 public:
32     static GrAtlasTextContext* Create();
33 
34     bool canDraw(const SkPaint&, const SkMatrix& viewMatrix, const SkSurfaceProps&,
35                  const GrShaderCaps&);
36     void drawText(GrContext*, GrDrawContext*, const GrClip&, const GrPaint&, const SkPaint&,
37                   const SkMatrix& viewMatrix, const SkSurfaceProps&, const char text[],
38                   size_t byteLength, SkScalar x, SkScalar y,
39                   const SkIRect& regionClipBounds);
40     void drawPosText(GrContext*, GrDrawContext*, const GrClip&, const GrPaint&,
41                      const SkPaint&, const SkMatrix& viewMatrix, const SkSurfaceProps&,
42                      const char text[], size_t byteLength,
43                      const SkScalar pos[], int scalarsPerPosition,
44                      const SkPoint& offset, const SkIRect& regionClipBounds);
45     void drawTextBlob(GrContext*, GrDrawContext*, const GrClip&, const SkPaint&,
46                       const SkMatrix& viewMatrix, const SkSurfaceProps&, const SkTextBlob*,
47                       SkScalar x, SkScalar y,
48                       SkDrawFilter*, const SkIRect& clipBounds);
49 
50 private:
51     GrAtlasTextContext();
52 
53     // sets up the descriptor on the blob and returns a detached cache.  Client must attach
54     inline static GrColor ComputeCanonicalColor(const SkPaint&, bool lcd);
55     static void RegenerateTextBlob(GrAtlasTextBlob* bmp,
56                                    GrBatchFontCache*,
57                                    const GrShaderCaps&,
58                                    const SkPaint& skPaint, GrColor,
59                                    const SkMatrix& viewMatrix,
60                                    const SkSurfaceProps&,
61                                    const SkTextBlob* blob, SkScalar x, SkScalar y,
62                                    SkDrawFilter* drawFilter);
63     inline static bool HasLCD(const SkTextBlob*);
64 
65     static inline GrAtlasTextBlob* CreateDrawTextBlob(GrTextBlobCache*,
66                                                       GrBatchFontCache*, const GrShaderCaps&,
67                                                       const GrPaint&,
68                                                       const SkPaint&, const SkMatrix& viewMatrix,
69                                                       const SkSurfaceProps&,
70                                                       const char text[], size_t byteLength,
71                                                       SkScalar x, SkScalar y);
72     static inline GrAtlasTextBlob* CreateDrawPosTextBlob(GrTextBlobCache*, GrBatchFontCache*,
73                                                          const GrShaderCaps&,
74                                                          const GrPaint&,
75                                                          const SkPaint&, const SkMatrix& viewMatrix,
76                                                          const SkSurfaceProps&,
77                                                          const char text[], size_t byteLength,
78                                                          const SkScalar pos[],
79                                                          int scalarsPerPosition,
80                                                          const SkPoint& offset);
dfAdjustTable()81     const GrDistanceFieldAdjustTable* dfAdjustTable() const { return fDistanceAdjustTable; }
82 
83     SkAutoTUnref<const GrDistanceFieldAdjustTable> fDistanceAdjustTable;
84 
85 #ifdef GR_TEST_UTILS
86     DRAW_BATCH_TEST_FRIEND(TextBlobBatch);
87 #endif
88 };
89 
90 #endif
91