Commit 7fa9579
Move objects
Changed files (11)
modifiedlibsvgbird/Circle.valamodifiedlibsvgbird/Ellipse.valamodifiedlibsvgbird/EmptyObject.valamodifiedlibsvgbird/Layer.valamodifiedlibsvgbird/Line.valamodifiedlibsvgbird/Object.valamodifiedlibsvgbird/Polygon.valamodifiedlibsvgbird/Polyline.valamodifiedlibsvgbird/Rectangle.valamodifiedlibsvgbird/SvgDrawing.valamodifiedlibsvgbird/SvgPath.vala
Diff
@@ -37,9 +37,6 @@ public class Circle : Object { cr.arc (cx, cy, r, 0, 2 * Math.PI); } - public override void move (double dx, double dy) {- }- public override bool is_empty () { return false; }@@ -43,9 +43,6 @@ public class Ellipse : Object { cr.restore (); } - public override void move (double dx, double dy) {- }- public override bool is_empty () { return false; }@@ -28,9 +28,6 @@ public class EmptyObject : Object { public override void draw_outline (Context cr) { } - public override void move (double dx, double dy) {- }- public override bool is_empty () { return false; }@@ -51,10 +51,12 @@ public class Layer : Object { if (object is Layer) { Layer sublayer = (Layer) object;+ object.parent_matrix = cr.get_matrix (); sublayer.apply_transform (cr); object.view_matrix = cr.get_matrix (); has_size = sublayer.update_boundaries (cr); } else {+ object.parent_matrix = cr.get_matrix (); object.apply_transform (cr); object.view_matrix = cr.get_matrix (); has_size = object.update_boundaries (cr);@@ -222,9 +224,6 @@ public class Layer : Object { public override bool is_over (double x, double y) { return false; }- - public override void move (double dx, double dy) {- } public override bool is_empty () { return false;@@ -44,9 +44,6 @@ public class Line : Object { cr.line_to (x2, y2); } - public override void move (double dx, double dy) {- }- public override bool is_empty () { return false; }@@ -87,6 +87,9 @@ public abstract class Object : GLib.Object { public const double CANVAS_MAX = 100000; public const double CANVAS_MIN = -100000; + public Matrix view_matrix = Matrix.identity ();+ public Matrix parent_matrix = Matrix.identity ();+ public Object () { } @@ -103,13 +106,41 @@ public abstract class Object : GLib.Object { m.transform_point (ref x, ref y); } + public void to_object_distance (ref double x, ref double y) {+ Matrix m = view_matrix;+ m.invert ();+ m.transform_distance (ref x, ref y);+ }+ public abstract void draw_outline (Context cr); public abstract Object copy (); public abstract bool is_empty ();- public abstract void move (double dx, double dy); - public Matrix view_matrix = Matrix.identity ();+ public virtual void move (double dx, double dy) {+ left += dx;+ right += dx;+ top += dy;+ bottom += dy;+ to_object_distance (ref dx, ref dy);+ transforms.translate (dx, dy);+ update_view_matrix ();+ }+ + public void update_view_matrix () {+ Matrix v = parent_matrix;+ Matrix m = transforms.get_matrix ();+ m.multiply (m, v);+ view_matrix = m;+ }+ + public Matrix get_parent_matrix () {+ Matrix matrix = view_matrix;+ Matrix object_matrix = transforms.get_matrix ();+ object_matrix.invert ();+ matrix.multiply (matrix, object_matrix);+ return matrix;+ } public virtual void move_bounding_box (double dx, double dy) { top += dy;@@ -50,9 +50,6 @@ public class Polygon : Object { return inside; } - public override void move (double dx, double dy) {- }- public override bool is_empty () { return false; }@@ -40,9 +40,6 @@ public class Polyline : Object { } } - public override void move (double dx, double dy) {- }- public override bool is_empty () { return false; }@@ -63,11 +63,6 @@ public class Rectangle : Object { cr.arc (0, 0, 1, angle_start, angle_stop); cr.restore (); }- - public override void move (double dx, double dy) {- x += dx;- y += dy;- } public override bool is_empty () { return false;@@ -84,9 +84,6 @@ public class SvgDrawing : Object { return drawing; }- - public override void move (double dx, double dy) {- } public override bool is_empty () { return false;@@ -283,9 +283,6 @@ public class SvgPath : Object { cr.restore (); } - public override void move (double dx, double dy) {- }- public override bool is_empty () { return false; }