blob: edc157552a02fd04f5c22b9735b36b560770227d [file] [log] [blame]
joshualitt1d89e8d2015-04-01 12:40:54 -07001/*
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
joshualitt374b2f72015-07-21 08:05:03 -070011#include "GrAtlasTextBlob.h"
joshualitt1acabf32015-12-10 09:10:10 -080012#include "GrDistanceFieldAdjustTable.h"
joshualitt1d89e8d2015-04-01 12:40:54 -070013#include "GrGeometryProcessor.h"
halcanary33779752015-10-27 14:01:05 -070014#include "SkTextBlobRunIterator.h"
joshualitt1d89e8d2015-04-01 12:40:54 -070015
joshualitt79dfb2b2015-05-11 08:58:08 -070016#ifdef GR_TEST_UTILS
17#include "GrBatchTest.h"
18#endif
19
bsalomonabd30f52015-08-13 13:34:48 -070020class GrDrawBatch;
robertphillipsea461502015-05-26 11:38:03 -070021class GrDrawContext;
robertphillips2334fb62015-06-17 05:43:33 -070022class GrDrawTarget;
joshualitt1d89e8d2015-04-01 12:40:54 -070023class GrPipelineBuilder;
joshualittb7133be2015-04-08 09:08:31 -070024class GrTextBlobCache;
joshualitt6c2c2b02015-07-24 10:37:00 -070025class SkGlyph;
joshualitt1d89e8d2015-04-01 12:40:54 -070026
27/*
joshualitt8e84a1e2016-02-16 11:09:25 -080028 * Renders text using some kind of an atlas, ie BitmapText or DistanceField text
joshualitt1d89e8d2015-04-01 12:40:54 -070029 */
joshualitt8e84a1e2016-02-16 11:09:25 -080030class GrAtlasTextContext {
joshualitt1d89e8d2015-04-01 12:40:54 -070031public:
joshualitt27004b72016-02-11 12:00:33 -080032 static GrAtlasTextContext* Create();
joshualitt1d89e8d2015-04-01 12:40:54 -070033
joshualitt27004b72016-02-11 12:00:33 -080034 bool canDraw(const SkPaint&, const SkMatrix& viewMatrix, const SkSurfaceProps&,
35 const GrShaderCaps&);
36 void drawText(GrContext*, GrDrawContext*, const GrClip&, const GrPaint&, const SkPaint&,
joshualitt2c89bc12016-02-11 05:42:30 -080037 const SkMatrix& viewMatrix, const SkSurfaceProps&, const char text[],
38 size_t byteLength, SkScalar x, SkScalar y,
joshualitt8e84a1e2016-02-16 11:09:25 -080039 const SkIRect& regionClipBounds);
joshualitt27004b72016-02-11 12:00:33 -080040 void drawPosText(GrContext*, GrDrawContext*, const GrClip&, const GrPaint&,
joshualitt2c89bc12016-02-11 05:42:30 -080041 const SkPaint&, const SkMatrix& viewMatrix, const SkSurfaceProps&,
joshualitte55750e2016-02-10 12:52:21 -080042 const char text[], size_t byteLength,
43 const SkScalar pos[], int scalarsPerPosition,
joshualitt8e84a1e2016-02-16 11:09:25 -080044 const SkPoint& offset, const SkIRect& regionClipBounds);
joshualitt27004b72016-02-11 12:00:33 -080045 void drawTextBlob(GrContext*, GrDrawContext*, const GrClip&, const SkPaint&,
joshualitt2c89bc12016-02-11 05:42:30 -080046 const SkMatrix& viewMatrix, const SkSurfaceProps&, const SkTextBlob*,
47 SkScalar x, SkScalar y,
joshualitt8e84a1e2016-02-16 11:09:25 -080048 SkDrawFilter*, const SkIRect& clipBounds);
joshualitt1d89e8d2015-04-01 12:40:54 -070049
joshualitte55750e2016-02-10 12:52:21 -080050private:
joshualitt27004b72016-02-11 12:00:33 -080051 GrAtlasTextContext();
joshualitte55750e2016-02-10 12:52:21 -080052
joshualitt1d89e8d2015-04-01 12:40:54 -070053 // sets up the descriptor on the blob and returns a detached cache. Client must attach
joshualitt9e36c1a2015-04-14 12:17:27 -070054 inline static GrColor ComputeCanonicalColor(const SkPaint&, bool lcd);
joshualitt27004b72016-02-11 12:00:33 -080055 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);
joshualitt9e36c1a2015-04-14 12:17:27 -070063 inline static bool HasLCD(const SkTextBlob*);
joshualitt9bd2daf2015-04-17 09:30:06 -070064
joshualitt27004b72016-02-11 12:00:33 -080065 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);
joshualitt2e2202e2015-12-10 11:22:08 -080081 const GrDistanceFieldAdjustTable* dfAdjustTable() const { return fDistanceAdjustTable; }
joshualitt79dfb2b2015-05-11 08:58:08 -070082
joshualitt1acabf32015-12-10 09:10:10 -080083 SkAutoTUnref<const GrDistanceFieldAdjustTable> fDistanceAdjustTable;
joshualitt1d89e8d2015-04-01 12:40:54 -070084
joshualitt79dfb2b2015-05-11 08:58:08 -070085#ifdef GR_TEST_UTILS
bsalomonabd30f52015-08-13 13:34:48 -070086 DRAW_BATCH_TEST_FRIEND(TextBlobBatch);
joshualitt79dfb2b2015-05-11 08:58:08 -070087#endif
joshualitt1d89e8d2015-04-01 12:40:54 -070088};
89
90#endif