OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "sky/engine/config.h" | 5 #include "sky/engine/config.h" |
6 #include "sky/engine/core/painting/PictureRecorder.h" | 6 #include "sky/engine/core/painting/PictureRecorder.h" |
7 | 7 |
8 #include "sky/engine/core/dom/Document.h" | 8 #include "sky/engine/core/dom/Document.h" |
9 #include "sky/engine/core/dom/Element.h" | 9 #include "sky/engine/core/dom/Element.h" |
10 #include "sky/engine/core/painting/PaintingTasks.h" | 10 #include "sky/engine/core/painting/PaintingTasks.h" |
11 #include "sky/engine/platform/geometry/IntRect.h" | 11 #include "sky/engine/platform/geometry/IntRect.h" |
12 #include "third_party/skia/include/core/SkCanvas.h" | 12 #include "third_party/skia/include/core/SkCanvas.h" |
13 | 13 |
14 namespace blink { | 14 namespace blink { |
15 | 15 |
16 SkRect toSkRect(Vector<float> rect) | |
17 { | |
18 ASSERT(rect.size() == 4); | |
19 SkRect sk_rect; | |
20 sk_rect.set(rect[0], rect[1], rect[2], rect[3]); | |
21 return sk_rect; | |
22 } | |
23 | |
16 Canvas::Canvas(const FloatSize& size) | 24 Canvas::Canvas(const FloatSize& size) |
17 : m_size(size) | 25 : m_size(size) |
18 { | 26 { |
19 m_displayList = adoptRef(new DisplayList); | 27 m_displayList = adoptRef(new DisplayList); |
20 m_canvas = m_displayList->beginRecording(expandedIntSize(m_size)); | 28 m_canvas = m_displayList->beginRecording(expandedIntSize(m_size)); |
21 } | 29 } |
22 | 30 |
23 Canvas::~Canvas() | 31 Canvas::~Canvas() |
24 { | 32 { |
25 } | 33 } |
26 | 34 |
35 void Canvas::save() | |
36 { | |
37 if (!m_canvas) | |
38 return; | |
39 ASSERT(m_displayList->isRecording()); | |
40 m_canvas->save(); | |
41 } | |
42 | |
43 void Canvas::saveLayer(Vector<float> bounds, Paint* paint) | |
44 { | |
45 if (!m_canvas) | |
46 return; | |
47 ASSERT(m_displayList->isRecording()); | |
48 SkRect sk_bounds; | |
49 if (bounds.size() != 0) | |
eseidel
2015/05/13 20:24:37
isEmpty()
| |
50 sk_bounds = toSkRect(bounds); | |
51 m_canvas->saveLayer(bounds.size() != 0 ? &sk_bounds : nullptr, | |
eseidel
2015/05/13 20:24:38
isEmpty() again.
| |
52 paint ? &paint->paint() : nullptr); | |
53 } | |
54 | |
55 void Canvas::restore() | |
56 { | |
57 if (!m_canvas) | |
58 return; | |
59 ASSERT(m_displayList->isRecording()); | |
60 m_canvas->restore(); | |
61 } | |
62 | |
63 void Canvas::translate(float dx, float dy) | |
64 { | |
65 if (!m_canvas) | |
66 return; | |
67 ASSERT(m_displayList->isRecording()); | |
68 m_canvas->translate(dx, dy); | |
69 } | |
70 | |
71 void Canvas::scale(float sx, float sy) | |
72 { | |
73 if (!m_canvas) | |
74 return; | |
75 ASSERT(m_displayList->isRecording()); | |
76 m_canvas->scale(sx, sy); | |
77 } | |
78 | |
79 void Canvas::rotate(float degrees) | |
80 { | |
81 if (!m_canvas) | |
82 return; | |
83 ASSERT(m_displayList->isRecording()); | |
84 m_canvas->rotate(degrees); | |
85 } | |
86 | |
87 void Canvas::skew(float sx, float sy) | |
88 { | |
89 if (!m_canvas) | |
90 return; | |
91 ASSERT(m_displayList->isRecording()); | |
92 m_canvas->skew(sx, sy); | |
93 } | |
94 | |
95 void Canvas::concat(Vector<float> matrix) | |
96 { | |
97 if (!m_canvas) | |
98 return; | |
99 ASSERT(m_displayList->isRecording()); | |
100 ASSERT(matrix.size() == 9); | |
101 SkMatrix sk_matrix; | |
102 sk_matrix.set9(matrix.data()); | |
103 m_canvas->concat(sk_matrix); | |
104 } | |
105 | |
106 void Canvas::clipRect(Vector<float> rect) | |
107 { | |
108 if (!m_canvas) | |
109 return; | |
110 ASSERT(m_displayList->isRecording()); | |
111 m_canvas->clipRect(toSkRect(rect)); | |
112 } | |
113 | |
114 void Canvas::drawPaint(Paint* paint) | |
115 { | |
116 if (!m_canvas) | |
117 return; | |
118 ASSERT(paint); | |
119 ASSERT(m_displayList->isRecording()); | |
120 m_canvas->drawPaint(paint->paint()); | |
121 } | |
122 | |
123 void Canvas::drawOval(Vector<float> rect, Paint* paint) | |
124 { | |
125 if (!m_canvas) | |
126 return; | |
127 ASSERT(paint); | |
128 ASSERT(m_displayList->isRecording()); | |
129 m_canvas->drawOval(toSkRect(rect), paint->paint()); | |
130 } | |
131 | |
132 void Canvas::drawRect(Vector<float> rect, Paint* paint) | |
133 { | |
134 if (!m_canvas) | |
135 return; | |
136 ASSERT(paint); | |
137 ASSERT(m_displayList->isRecording()); | |
138 m_canvas->drawRect(toSkRect(rect), paint->paint()); | |
139 } | |
140 | |
27 void Canvas::drawCircle(double x, double y, double radius, Paint* paint) | 141 void Canvas::drawCircle(double x, double y, double radius, Paint* paint) |
28 { | 142 { |
29 if (!m_canvas) | 143 if (!m_canvas) |
30 return; | 144 return; |
31 ASSERT(paint); | 145 ASSERT(paint); |
32 ASSERT(m_displayList->isRecording()); | 146 ASSERT(m_displayList->isRecording()); |
33 m_canvas->drawCircle(x, y, radius, paint->paint()); | 147 m_canvas->drawCircle(x, y, radius, paint->paint()); |
34 } | 148 } |
35 | 149 |
36 PassRefPtr<DisplayList> Canvas::finishRecording() | 150 PassRefPtr<DisplayList> Canvas::finishRecording() |
37 { | 151 { |
38 if (!isRecording()) | 152 if (!isRecording()) |
39 return nullptr; | 153 return nullptr; |
40 m_canvas = nullptr; | 154 m_canvas = nullptr; |
41 m_displayList->endRecording(); | 155 m_displayList->endRecording(); |
42 return m_displayList.release(); | 156 return m_displayList.release(); |
43 } | 157 } |
44 | 158 |
45 } // namespace blink | 159 } // namespace blink |
OLD | NEW |