From b636d54ebb00ef46766da8a88ee2e242b2ec8310 Mon Sep 17 00:00:00 2001 From: Viktor Lidholt Date: Fri, 7 Aug 2015 10:05:24 -0700 Subject: [PATCH] Adds skew property to sprite node --- packages/flutter/example/game/lib/node.dart | 28 +++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/packages/flutter/example/game/lib/node.dart b/packages/flutter/example/game/lib/node.dart index 4c34d113be9..878b06ec7bd 100644 --- a/packages/flutter/example/game/lib/node.dart +++ b/packages/flutter/example/game/lib/node.dart @@ -30,6 +30,9 @@ class Node { double _scaleX = 1.0; double _scaleY = 1.0; + double _skewX = 0.0; + double _skewY = 0.0; + /// The visibility of this node and its children. bool visible = true; @@ -116,6 +119,22 @@ class Node { invalidateTransformMatrix(); } + double get skewX => _skewX; + + void set skewX (double skewX) { + assert(skewX != null); + _skewX = skewX; + invalidateTransformMatrix(); + } + + double get skewY => _skewY; + + void set skewY (double skewY) { + assert(skewY != null); + _skewY = skewY; + invalidateTransformMatrix(); + } + /// The draw order of this node compared to its parent and its siblings. /// /// By default nodes are drawn in the order that they have been added to a parent. To override this behavior the @@ -295,6 +314,15 @@ class Node { 0.0, 0.0, 1.0, 0.0, _position.x, _position.y, 0.0, 1.0); + if (_skewX != 0.0 || _skewY != 0.0) { + // Needs skew transform + Matrix4 skew = new Matrix4(1.0, math.tan(radians(_skewX)), 0.0, 0.0, + math.tan(radians(_skewY)), 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + matrix.multiply(skew); + } + return matrix; }