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

Unified Diff: sky/engine/core/painting/PaintingContext.cpp

Issue 1144483002: Flesh out the Painting API a bit. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: sky/engine/core/painting/PaintingContext.cpp
diff --git a/sky/engine/core/painting/PaintingContext.cpp b/sky/engine/core/painting/PaintingContext.cpp
index 0bac4898e52ba248bbd421c8bbed01ef0073a218..f2cdde77244a6805e580cbec593dab1a56d5a593 100644
--- a/sky/engine/core/painting/PaintingContext.cpp
+++ b/sky/engine/core/painting/PaintingContext.cpp
@@ -13,6 +13,14 @@
namespace blink {
+SkRect toSkRect(Vector<float> rect)
+{
+ ASSERT(rect.size() == 4);
+ SkRect sk_rect;
+ sk_rect.set(rect[0], rect[1], rect[2], rect[3]);
+ return sk_rect;
+}
+
PassRefPtr<PaintingContext> PaintingContext::create(PassRefPtr<Element> element, const FloatSize& size)
{
return adoptRef(new PaintingContext(element, size));
@@ -30,6 +38,112 @@ PaintingContext::~PaintingContext()
{
}
+void PaintingContext::save()
+{
+ if (!m_canvas)
+ return;
+ ASSERT(m_displayList->isRecording());
+ m_canvas->save();
+}
+
+void PaintingContext::saveLayer(Vector<float> bounds, Paint* paint)
+{
+ if (!m_canvas)
+ return;
+ ASSERT(m_displayList->isRecording());
+ SkRect sk_bounds;
+ if (bounds.size() != 0)
+ sk_bounds = toSkRect(bounds);
+ m_canvas->saveLayer(bounds.size() != 0 ? &sk_bounds : nullptr,
+ paint ? &paint->paint() : nullptr);
+}
+
+void PaintingContext::restore()
+{
+ if (!m_canvas)
+ return;
+ ASSERT(m_displayList->isRecording());
+ m_canvas->restore();
+}
+
+void PaintingContext::translate(float dx, float dy)
+{
+ if (!m_canvas)
+ return;
+ ASSERT(m_displayList->isRecording());
+ m_canvas->translate(dx, dy);
+}
+
+void PaintingContext::scale(float sx, float sy)
+{
+ if (!m_canvas)
+ return;
+ ASSERT(m_displayList->isRecording());
+ m_canvas->scale(sx, sy);
+}
+
+void PaintingContext::rotate(float degrees)
+{
+ if (!m_canvas)
+ return;
+ ASSERT(m_displayList->isRecording());
+ m_canvas->rotate(degrees);
+}
+
+void PaintingContext::skew(float sx, float sy)
+{
+ if (!m_canvas)
+ return;
+ ASSERT(m_displayList->isRecording());
+ m_canvas->skew(sx, sy);
+}
+
+void PaintingContext::concat(Vector<float> matrix)
+{
+ if (!m_canvas)
+ return;
+ ASSERT(m_displayList->isRecording());
+ ASSERT(matrix.size() == 9);
+ SkMatrix sk_matrix;
+ sk_matrix.set9(matrix.data());
+ m_canvas->concat(sk_matrix);
+}
+
+void PaintingContext::clipRect(Vector<float> rect)
+{
+ if (!m_canvas)
+ return;
+ ASSERT(m_displayList->isRecording());
+ m_canvas->clipRect(toSkRect(rect));
+}
+
+void PaintingContext::drawPaint(Paint* paint)
+{
+ if (!m_canvas)
+ return;
+ ASSERT(paint);
+ ASSERT(m_displayList->isRecording());
+ m_canvas->drawPaint(paint->paint());
+}
+
+void PaintingContext::drawOval(Vector<float> rect, Paint* paint)
+{
+ if (!m_canvas)
+ return;
+ ASSERT(paint);
+ ASSERT(m_displayList->isRecording());
+ m_canvas->drawOval(toSkRect(rect), paint->paint());
+}
+
+void PaintingContext::drawRect(Vector<float> rect, Paint* paint)
+{
+ if (!m_canvas)
+ return;
+ ASSERT(paint);
+ ASSERT(m_displayList->isRecording());
+ m_canvas->drawRect(toSkRect(rect), paint->paint());
+}
+
void PaintingContext::drawCircle(double x, double y, double radius, Paint* paint)
{
if (!m_canvas)

Powered by Google App Engine
This is Rietveld 408576698