Index: sky/engine/core/painting/Canvas.cpp |
diff --git a/sky/engine/core/painting/Canvas.cpp b/sky/engine/core/painting/Canvas.cpp |
index 1fa585569f7064fcb3a07ecd2a2d8101a3604345..ccd4fafaaab251d0ded2f7588551e66505796281 100644 |
--- a/sky/engine/core/painting/Canvas.cpp |
+++ b/sky/engine/core/painting/Canvas.cpp |
@@ -83,14 +83,27 @@ void Canvas::skew(float sx, float sy) |
m_canvas->skew(sx, sy); |
} |
-void Canvas::concat(const Vector<float>& matrix) |
+void Canvas::concat(const Float32List& matrix4) |
{ |
if (!m_canvas) |
return; |
ASSERT(m_displayList->isRecording()); |
- ASSERT(matrix.size() == 9); |
+ ASSERT(matrix4.data()); |
+ |
+ // TODO(mpcomplete): how can we raise an error in this case? |
+ if (matrix4.num_elements() != 16) |
+ return; |
+ |
SkMatrix sk_matrix; |
- sk_matrix.set9(matrix.data()); |
+ // Mappings from SkMatrix-index to input-index. |
+ static const int kMappings[] = { |
+ 0, 4, 12, |
+ 1, 5, 13, |
+ 3, 7, 15, |
+ }; |
+ for (intptr_t i = 0; i < 9; ++i) |
+ sk_matrix[i] = matrix4.data()[kMappings[i]]; |
+ |
m_canvas->concat(sk_matrix); |
} |