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

Side by Side Diff: sky/engine/core/painting/Canvas.cpp

Issue 1144483002: Flesh out the Painting API a bit. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: constify Created 5 years, 7 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
OLDNEW
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(const 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
27 void Canvas::drawCircle(double x, double y, double radius, Paint* paint) 35 void Canvas::save()
28 { 36 {
29 if (!m_canvas) 37 if (!m_canvas)
30 return; 38 return;
39 ASSERT(m_displayList->isRecording());
40 m_canvas->save();
41 }
42
43 void Canvas::saveLayer(const Vector<float>& bounds, const Paint* paint)
44 {
45 if (!m_canvas)
46 return;
47 ASSERT(m_displayList->isRecording());
48 SkRect sk_bounds;
49 if (!bounds.isEmpty())
50 sk_bounds = toSkRect(bounds);
51 m_canvas->saveLayer(!bounds.isEmpty() ? &sk_bounds : nullptr,
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::rotateDegrees(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(const 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(const 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::drawRect(const Vector<float>& rect, const Paint* paint)
124 {
125 if (!m_canvas)
126 return;
127 ASSERT(paint);
128 ASSERT(m_displayList->isRecording());
129 m_canvas->drawRect(toSkRect(rect), paint->paint());
130 }
131
132 void Canvas::drawOval(const Vector<float>& rect, const Paint* paint)
133 {
134 if (!m_canvas)
135 return;
136 ASSERT(paint);
137 ASSERT(m_displayList->isRecording());
138 m_canvas->drawOval(toSkRect(rect), paint->paint());
139 }
140
141 void Canvas::drawCircle(float x, float y, float radius, Paint* paint)
142 {
143 if (!m_canvas)
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698