Clone in a terminal:
Commit ed1b15b
Johan Mattsson - 2016-06-24T17:18:10+00:00
ed1b15bf68ab4f5feb9cb5a2ba5f8def53d574f6johan.mattsson.m@gmail.com

Paste color SVG files

Changed files (10)

Diff

diff --git a/libbirdfont/BezierTool.vala b/libbirdfont/BezierTool.valaindex 352ddee..b4f0c36 100644--- a/libbirdfont/BezierTool.vala+++ b/libbirdfont/BezierTool.vala@@ -175,7 +175,7 @@ public class BezierTool : Tool { 				current_path.recalculate_linear_handles_for_point (current_point); 				set_point_type (); 				g.clear_active_paths ();-				g.add_active_path (null, current_path);+				g.add_active_path (current_path); 				GlyphCanvas.redraw (); 				state = MOVE_POINT; 			} else {@@ -282,7 +282,7 @@ public class BezierTool : Tool { 			current_path.recalculate_linear_handles_for_point (current_point); 			set_point_type (); 			g.clear_active_paths ();-			g.add_active_path (null, current_path);+			g.add_active_path (current_path); 			 			GlyphCanvas.redraw (); 			state = MOVE_POINT;diff --git a/libbirdfont/ClipTool.vala b/libbirdfont/ClipTool.valaindex 525aa5c..c21d0e4 100644--- a/libbirdfont/ClipTool.vala+++ b/libbirdfont/ClipTool.vala@@ -1,5 +1,5 @@ /*-	Copyright (C) 2012 2014 Johan Mattsson+	Copyright (C) 2012 2014 2016 Johan Mattsson  	This library is free software; you can redistribute it and/or modify  	it under the terms of the GNU Lesser General Public License as @@ -146,7 +146,9 @@ public class ClipTool : Tool { 		if (bf_clipboard_data) { 			import_birdfont_clipboard (data, paste_guide_lines, false); 		} else if (data != "") {-			SvgParser.import_svg_data (data, SvgFormat.INKSCAPE);+			//SvgParser.import_svg_data (data, SvgFormat.INKSCAPE);+			print (@"$data\n\n");+			SvgParser.import_svg_color_data (data); 		} 		 		((!)destination).update_view ();	@@ -423,7 +425,7 @@ public class ClipTool : Tool { 			foreach (Path p in glyph.get_visible_paths ()) { 				PenTool.clear_directions (); 				destination.add_path (p);-				destination.add_active_path (null, p);+				destination.add_active_path (p); 			} 			 			if (paste_guide_lines) {@@ -450,7 +452,7 @@ public class ClipTool : Tool { 		if (path.points.size > 0) { 			PenTool.clear_directions (); 			glyph.add_path (path);-			glyph.add_active_path (null, path);+			glyph.add_active_path (path); 			path.update_region_boundaries (); 		} 		diff --git a/libbirdfont/Glyph.vala b/libbirdfont/Glyph.valaindex ea9fb1c..00a0ec3 100644--- a/libbirdfont/Glyph.vala+++ b/libbirdfont/Glyph.vala@@ -275,36 +275,25 @@ public class Glyph : FontDisplay { 		active_paths.clear (); 	} -	public void add_active_path (Layer? group, Path? p) {-		if (p != null) {-			PathObject path = new PathObject.for_path ((!) p);-			add_active_object (group, path);-		} else {-			add_active_object (group, null);-		}+	public void add_active_path (Path p) {+		PathObject path = new PathObject.for_path ((!) p);+		add_active_object (path); 	} 	-	// FIXME: delete group-	public void add_active_object (Layer? group, SvgBird.Object? o) {-		SvgBird.Object object;--		if (o != null) {-			object = (!) o;--			if (!active_paths_contains (object)) {-				active_paths.add (object);-			}-			-			if (object is PathObject) {-				PathObject path = (PathObject) object;-				if (Toolbox.get_move_tool ().is_selected ()) {-					if (path.get_path ().stroke > 0) {-						Toolbox.set_object_stroke (path.get_path ().stroke);-					}+	public void add_active_object (SvgBird.Object object) {+		if (!active_paths_contains (object)) {+			active_paths.add (object);+		}+		+		if (object is PathObject) {+			PathObject path = (PathObject) object;+			if (Toolbox.get_move_tool ().is_selected ()) {+				if (path.get_path ().stroke > 0) {+					Toolbox.set_object_stroke (path.get_path ().stroke); 				}-				-				PenTool.active_path = path.get_path (); 			}+			+			PenTool.active_path = path.get_path (); 		} 	} @@ -866,7 +855,7 @@ public class Glyph : FontDisplay { 			path.create_list (); 			 			PathObject object = new PathObject.for_path (path);-			add_active_object (null, object);+			add_active_object (object); 		}  		if (remaining_points.paths.size > 0) {@@ -981,7 +970,7 @@ public class Glyph : FontDisplay { 	public void set_active_path (Path p) { 		p.reopen (); 		clear_active_paths ();-		add_active_object (null, new PathObject.for_path (p));+		add_active_object (new PathObject.for_path (p)); 	}  	/** Move view port centrum to this coordinate. */@@ -1875,7 +1864,7 @@ public class Glyph : FontDisplay {  		clear_active_paths (); 		foreach (SvgBird.Object p in g.active_paths) {-			add_active_object (null, p);+			add_active_object (p); 		}  		redraw_area (0, 0, allocation.width, allocation.height);diff --git a/libbirdfont/MenuTab.vala b/libbirdfont/MenuTab.valaindex fbd03af..ca42592 100644--- a/libbirdfont/MenuTab.vala+++ b/libbirdfont/MenuTab.vala@@ -654,7 +654,7 @@ public class MenuTab : FontDisplay { 		// selected segments 		if (paths.size == 0) { 			foreach (Path p in g.get_active_paths ()) {-				g.add_active_path (null, p);+				g.add_active_path (p); 			} 			 			foreach (Path p in g.get_active_paths ()) {@@ -674,7 +674,7 @@ public class MenuTab : FontDisplay { 				 		foreach (Path p in paths) { 			g.add_path (p);-			g.add_active_path (null, p);+			g.add_active_path (p); 		}  		g.active_paths.clear ();diff --git a/libbirdfont/MoveTool.vala b/libbirdfont/MoveTool.valaindex 4307a64..2831ed2 100644--- a/libbirdfont/MoveTool.vala+++ b/libbirdfont/MoveTool.vala@@ -202,7 +202,7 @@ public class MoveTool : Tool { 			if (selected && KeyBindings.has_shift ()) { 				glyph.active_paths.remove (object); 			} else {-				glyph.add_active_object (null, object);+				glyph.add_active_object (object); 			}			 		} else if (!KeyBindings.has_shift ()) { 			glyph.clear_active_paths ();@@ -238,7 +238,7 @@ public class MoveTool : Tool { 		foreach (SvgBird.Object p in glyph.get_objects_in_current_layer ()) { 			if (p.xmin > x1 && p.xmax < x2 && p.ymin < y1 && p.ymax > y2) { 				if (!p.is_empty ()) {-					glyph.add_active_object (null, p);+					glyph.add_active_object (p); 				} 			} 		}@@ -471,7 +471,7 @@ public class MoveTool : Tool { 		g.clear_active_paths (); 		foreach (SvgBird.Object p in g.get_objects_in_current_layer ()) { 			if (!p.is_empty ()) {-				g.add_active_object (null, p);+				g.add_active_object (p); 			} 		} 		diff --git a/libbirdfont/PenTool.vala b/libbirdfont/PenTool.valaindex ada8c02..3ee01c4 100644--- a/libbirdfont/PenTool.vala+++ b/libbirdfont/PenTool.vala@@ -1231,7 +1231,7 @@ public class PenTool : Tool { 			glyph.clear_active_paths (); 			 			PathObject path = new PathObject.for_path (active_path);-			glyph.add_active_object (null, path);+			glyph.add_active_object (path); 			 			DrawingTools.update_stroke_settings (); 			@@ -1414,7 +1414,7 @@ public class PenTool : Tool { 					PathObject merged_path = new PathObject.for_path (merge); 					 					if (is_close_to_point (merge.points.get (merge.points.size - 1), px, py)) {	-						glyph.add_active_object (null, merged_path);+						glyph.add_active_object (merged_path); 						active_path = merge; 						merge.reopen (); 						glyph.open_path ();@@ -1422,7 +1422,7 @@ public class PenTool : Tool { 					} 					 					if (is_close_to_point (merge.points.get (0), px, py)) {-						glyph.add_active_object (null, merged_path);+						glyph.add_active_object (merged_path); 						active_path = merge; 						clear_directions (); 						merge.reopen ();@@ -1460,7 +1460,7 @@ public class PenTool : Tool { 			glyph.clear_active_paths (); 			 			PathObject closed_path = new PathObject.for_path (path);-			glyph.add_active_object (null, closed_path);+			glyph.add_active_object (closed_path); 			 			if (direction_changed) { 				path.reverse ();@@ -1504,7 +1504,7 @@ public class PenTool : Tool { 					glyph.delete_path (path); 					glyph.delete_path (merge); 					glyph.clear_active_paths ();-					glyph.add_active_object (null, union_path);+					glyph.add_active_object (union_path); 					 					union.reopen (); 					union.create_list ();@@ -1794,7 +1794,7 @@ public class PenTool : Tool {  			active_path = new_point.path; 			glyph.clear_active_paths ();-			glyph.add_active_object (null, object);+			glyph.add_active_object (object); 		 			move_selected = true; 		}@@ -1844,7 +1844,7 @@ public class PenTool : Tool { 			np.line_cap = StrokeTool.line_cap; 			 			path = new PathObject.for_path (np);-			g.add_active_object (null, path);+			g.add_active_object (path); 			 			active_path = np; 			selected_path = np;@@ -1867,7 +1867,7 @@ public class PenTool : Tool { 			} 			 			path = new PathObject.for_path (np);-			g.add_active_object (null, path);+			g.add_active_object (path); 			 			PenTool.active_path = np; 			PenTool.selected_path = np;@@ -1875,7 +1875,7 @@ public class PenTool : Tool {  		g.clear_active_paths (); 		path = new PathObject.for_path (np);-		g.add_active_object (null, path);+		g.add_active_object (path); 		active_path = np; 		selected_path = np; @@ -2086,7 +2086,7 @@ public class PenTool : Tool { 		 		active_path = p.path; 		PathObject path = new PathObject.for_path (active_path);-		g.add_active_object (null, path);+		g.add_active_object (path); 	}  	public static void add_selected_point (EditPoint p, Path path) {diff --git a/libbirdfont/ResizeTool.vala b/libbirdfont/ResizeTool.valaindex c7b99b8..834a3fb 100644--- a/libbirdfont/ResizeTool.vala+++ b/libbirdfont/ResizeTool.vala@@ -369,7 +369,7 @@ public class ResizeTool : Tool { 			glyph.clear_active_paths (); 			 			foreach (SvgBird.Object path in glyph.get_visible_objects ()) {-				glyph.add_active_object (null, path);+				glyph.add_active_object (path); 			} 		} 		@@ -544,7 +544,7 @@ public class ResizeTool : Tool { 			glyph.clear_active_paths (); 			 			foreach (SvgBird.Object path in glyph.get_visible_objects ()) {-				glyph.add_active_object (null, path);+				glyph.add_active_object (path); 			} 		} diff --git a/libbirdfont/StrokeTool.vala b/libbirdfont/StrokeTool.valaindex 887b5f1..9871937 100644--- a/libbirdfont/StrokeTool.vala+++ b/libbirdfont/StrokeTool.vala@@ -232,7 +232,7 @@ public class StrokeTool : GLib.Object { 		foreach (Path p in new_paths.paths) { 			PathObject path = new PathObject.for_path (p); 			g.add_object (path);-			g.add_active_object (null, path);+			g.add_active_object (path); 		} 		 		PenTool.update_orientation ();diff --git a/libbirdfont/SvgParser.vala b/libbirdfont/SvgParser.valaindex 21f0246..030e3ac 100644--- a/libbirdfont/SvgParser.vala+++ b/libbirdfont/SvgParser.vala@@ -62,9 +62,26 @@ public class SvgParser { 		fc.add_extension ("svg"); 		MainWindow.file_chooser (t_("Import"), fc, FileChooser.LOAD); 	}+	+	public static void import_svg_color_data (string svg_data) {+		Glyph glyph = MainWindow.get_current_glyph ();+		EmbeddedSvg drawing = SvgParser.parse_embedded_svg_data (svg_data);+		glyph.add_object (drawing);++		Font font = BirdFont.get_current_font (); 		+		drawing.x = glyph.left_limit;+		drawing.y = font.top_position - font.base_line;+		+		drawing.update_boundaries_for_object ();+		+		glyph.clear_active_paths ();+		glyph.add_active_object (drawing);+	}+	 	public static void import_color_svg (Glyph glyph, string path) {-		EmbeddedSvg drawing = SvgParser.parse_embedded_svg_file (path);+		EmbeddedSvg drawing = SvgParser.parse_embedded_svg_data (path);+		 		glyph.add_object (drawing); 		drawing.update_boundaries_for_object (); 		@@ -153,7 +170,7 @@ public class SvgParser { 		foreach (Path p in path_list.paths) { 			PathObject path = new PathObject.for_path (p); 			glyph.add_object (path);-			glyph.add_active_object (null, path); // FIXME: groups+			glyph.add_active_object (path); // FIXME: groups 			path.update_boundaries_for_object (); 		} 		diff --git a/libsvgbird/SvgFile.vala b/libsvgbird/SvgFile.valaindex e41408a..2d0e28b 100644--- a/libsvgbird/SvgFile.vala+++ b/libsvgbird/SvgFile.vala@@ -693,6 +693,8 @@ public class SvgFile : GLib.Object {  		// all instructions are padded +		// FIXME: Inscape and Illustrator discrepancies+ 		for (int i = 0; i < points_size; i++) { 			// FIXME: add more types 			if (bezier_points[i].type == 'M') {

Contact

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