Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Side by Side Diff: Source/core/rendering/TextPainter.h

Issue 554613004: TextBlob: Start caching a text blob per InlineTextBox. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rewrite in light of changed Font::drawText signature Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef TextPainter_h 5 #ifndef TextPainter_h
6 #define TextPainter_h 6 #define TextPainter_h
7 7
8 #include "core/rendering/style/RenderStyleConstants.h" 8 #include "core/rendering/style/RenderStyleConstants.h"
9 #include "platform/fonts/TextBlob.h"
f(malita) 2014/09/12 13:21:24 Could we use a forward declaration in the header?
jbroman 2014/09/13 00:06:42 Tricky because it's a typedef for a templated clas
9 #include "platform/geometry/FloatPoint.h" 10 #include "platform/geometry/FloatPoint.h"
10 #include "platform/geometry/FloatRect.h" 11 #include "platform/geometry/FloatRect.h"
11 #include "platform/graphics/Color.h" 12 #include "platform/graphics/Color.h"
12 #include "wtf/text/AtomicString.h" 13 #include "wtf/text/AtomicString.h"
13 14
14 namespace blink { 15 namespace blink {
15 16
16 class Font; 17 class Font;
17 class GraphicsContext; 18 class GraphicsContext;
18 class GraphicsContextStateSaver; 19 class GraphicsContextStateSaver;
19 class RenderCombineText; 20 class RenderCombineText;
20 class ShadowList; 21 class ShadowList;
21 class TextRun; 22 class TextRun;
22 struct TextRunPaintInfo; 23 struct TextRunPaintInfo;
23 24
24 class TextPainter { 25 class TextPainter {
25 public: 26 public:
26 struct Style; 27 struct Style;
27 28
28 TextPainter(GraphicsContext*, const Font&, const TextRun&, const FloatPoint& textOrigin, const FloatRect& textBounds, bool horizontal); 29 TextPainter(GraphicsContext*, const Font&, const TextRun&, const FloatPoint& textOrigin, const FloatRect& textBounds, bool horizontal);
29 ~TextPainter(); 30 ~TextPainter();
30 31
31 void setEmphasisMark(const AtomicString&, TextEmphasisPosition); 32 void setEmphasisMark(const AtomicString&, TextEmphasisPosition);
32 void setCombinedText(RenderCombineText* combinedText) { m_combinedText = com binedText; } 33 void setCombinedText(RenderCombineText* combinedText) { m_combinedText = com binedText; }
33 34
34 static void updateGraphicsContext(GraphicsContext*, const Style&, bool horiz ontal, GraphicsContextStateSaver&); 35 static void updateGraphicsContext(GraphicsContext*, const Style&, bool horiz ontal, GraphicsContextStateSaver&);
35 36
36 void paint(int startOffset, int endOffset, int length, const Style&); 37 void paint(int startOffset, int endOffset, int length, const Style&, TextBlo bPtr* textBlobCache = 0);
37 38
38 struct Style { 39 struct Style {
39 Color fillColor; 40 Color fillColor;
40 Color strokeColor; 41 Color strokeColor;
41 Color emphasisMarkColor; 42 Color emphasisMarkColor;
42 float strokeWidth; 43 float strokeWidth;
43 const ShadowList* shadow; 44 const ShadowList* shadow;
44 45
45 bool operator==(const Style& other) 46 bool operator==(const Style& other)
46 { 47 {
47 return fillColor == other.fillColor 48 return fillColor == other.fillColor
48 && strokeColor == other.strokeColor 49 && strokeColor == other.strokeColor
49 && emphasisMarkColor == other.emphasisMarkColor 50 && emphasisMarkColor == other.emphasisMarkColor
50 && strokeWidth == other.strokeWidth 51 && strokeWidth == other.strokeWidth
51 && shadow == other.shadow; 52 && shadow == other.shadow;
52 } 53 }
53 bool operator!=(const Style& other) { return !(*this == other); } 54 bool operator!=(const Style& other) { return !(*this == other); }
54 }; 55 };
55 56
56 private: 57 private:
57 void updateGraphicsContext(const Style& style, GraphicsContextStateSaver& sa ver) 58 void updateGraphicsContext(const Style& style, GraphicsContextStateSaver& sa ver)
58 { 59 {
59 updateGraphicsContext(m_graphicsContext, style, m_horizontal, saver); 60 updateGraphicsContext(m_graphicsContext, style, m_horizontal, saver);
60 } 61 }
61 62
62 enum PaintInternalStep { PaintText, PaintEmphasisMark }; 63 enum PaintInternalStep { PaintText, PaintEmphasisMark };
63 64
64 template <PaintInternalStep step> 65 template <PaintInternalStep step>
65 void paintInternalRun(TextRunPaintInfo&, int from, int to); 66 void paintInternalRun(TextRunPaintInfo&, int from, int to, TextBlobPtr* text BlobCache = 0);
66 67
67 template <PaintInternalStep step> 68 template <PaintInternalStep step>
68 void paintInternal(int startOffset, int endOffset, int truncationPoint); 69 void paintInternal(int startOffset, int endOffset, int truncationPoint, Text BlobPtr* textBlobCache = 0);
f(malita) 2014/09/12 13:21:24 We may avoid hauling textBlobCache all over the pl
jbroman 2014/09/13 00:06:42 I'm mostly afraid that you can pass TextRunPaintIn
69 70
70 void paintEmphasisMarkForCombinedText(); 71 void paintEmphasisMarkForCombinedText();
71 72
72 GraphicsContext* m_graphicsContext; 73 GraphicsContext* m_graphicsContext;
73 const Font& m_font; 74 const Font& m_font;
74 const TextRun& m_run; 75 const TextRun& m_run;
75 FloatPoint m_textOrigin; 76 FloatPoint m_textOrigin;
76 FloatRect m_textBounds; 77 FloatRect m_textBounds;
77 bool m_horizontal; 78 bool m_horizontal;
78 AtomicString m_emphasisMark; 79 AtomicString m_emphasisMark;
79 int m_emphasisMarkOffset; 80 int m_emphasisMarkOffset;
80 RenderCombineText* m_combinedText; 81 RenderCombineText* m_combinedText;
81 }; 82 };
82 83
83 } // namespace blink 84 } // namespace blink
84 85
85 #endif // TextPainter_h 86 #endif // TextPainter_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698