Clone in a terminal:
Commit 7fa9579
Johan Mattsson - 2016-07-16T13:45:51+00:00
7fa95796872f1b8f72df2c2b85eb1aa7a2e8a723johan.mattsson.m@gmail.com

Move objects

Changed files (11)

Diff

diff --git a/libsvgbird/Circle.vala b/libsvgbird/Circle.valaindex c5b1395..976cb58 100644--- a/libsvgbird/Circle.vala+++ b/libsvgbird/Circle.vala@@ -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; 	}diff --git a/libsvgbird/Ellipse.vala b/libsvgbird/Ellipse.valaindex f91886b..cb8f749 100644--- a/libsvgbird/Ellipse.vala+++ b/libsvgbird/Ellipse.vala@@ -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; 	}diff --git a/libsvgbird/EmptyObject.vala b/libsvgbird/EmptyObject.valaindex 02b7ae8..830e447 100644--- a/libsvgbird/EmptyObject.vala+++ b/libsvgbird/EmptyObject.vala@@ -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; 	}diff --git a/libsvgbird/Layer.vala b/libsvgbird/Layer.valaindex bcaa0f6..046ead1 100644--- a/libsvgbird/Layer.vala+++ b/libsvgbird/Layer.vala@@ -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;diff --git a/libsvgbird/Line.vala b/libsvgbird/Line.valaindex 0be7513..e479257 100644--- a/libsvgbird/Line.vala+++ b/libsvgbird/Line.vala@@ -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; 	}diff --git a/libsvgbird/Object.vala b/libsvgbird/Object.valaindex febe536..2f0ed23 100644--- a/libsvgbird/Object.vala+++ b/libsvgbird/Object.vala@@ -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;diff --git a/libsvgbird/Polygon.vala b/libsvgbird/Polygon.valaindex a61a719..86c1167 100644--- a/libsvgbird/Polygon.vala+++ b/libsvgbird/Polygon.vala@@ -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; 	}diff --git a/libsvgbird/Polyline.vala b/libsvgbird/Polyline.valaindex 402a42a..741b7a4 100644--- a/libsvgbird/Polyline.vala+++ b/libsvgbird/Polyline.vala@@ -40,9 +40,6 @@ public class Polyline : Object { 		} 	} 	-	public override void move (double dx, double dy) {-	}-	 	public override bool is_empty () { 		return false; 	}diff --git a/libsvgbird/Rectangle.vala b/libsvgbird/Rectangle.valaindex 6ba2f54..45aacb3 100644--- a/libsvgbird/Rectangle.vala+++ b/libsvgbird/Rectangle.vala@@ -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;diff --git a/libsvgbird/SvgDrawing.vala b/libsvgbird/SvgDrawing.valaindex 418db2c..9e0a73f 100644--- a/libsvgbird/SvgDrawing.vala+++ b/libsvgbird/SvgDrawing.vala@@ -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;diff --git a/libsvgbird/SvgPath.vala b/libsvgbird/SvgPath.valaindex 4ad47c7..4ca4935 100644--- a/libsvgbird/SvgPath.vala+++ b/libsvgbird/SvgPath.vala@@ -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; 	}

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112