Clone in a terminal:
Commit 4cd28d0
Johan Mattsson - 2015-06-04T20:00:46+00:00
4cd28d056834f375b0532b4aab1a65824ea4a529johan.mattsson.m@gmail.com

Move layers and move paths within layers

Changed files (4)

Diff

diff --git a/libbirdfont/DrawingTools.vala b/libbirdfont/DrawingTools.valaindex 4aa3a54..2da6502 100644--- a/libbirdfont/DrawingTools.vala+++ b/libbirdfont/DrawingTools.vala@@ -607,19 +607,17 @@ public class DrawingTools : ToolCollection  { 		}); 		draw_tool_modifiers.add_tool (close_path_tool); 		-		// FIXME: add new layer tools-		/*-		move_layer = new Tool ("move_layer", t_("Move to path to the bottom layer"));+		move_layer = new Tool ("move_layer", t_("Move to path to the bottom of the layer")); 		move_layer.select_action.connect ((self) => { 			Glyph g = MainWindow.get_current_glyph ();-+			Layer layer = g.get_current_layer ();+			 			foreach (Path p in g.active_paths) {-				g.layers.remove (p);-				g.path_list.insert (0, p);+				layer.paths.remove (p);+				layer.paths.paths.insert (0, p); 			} 		}); 		draw_tool_modifiers.add_tool (move_layer);-		*/  		flip_vertical = new Tool ("flip_vertical", t_("Flip path vertically")); 		flip_vertical.select_action.connect ((self) => {@@ -1583,12 +1581,18 @@ public class DrawingTools : ToolCollection  { 	public static void update_layers ()  	requires (!is_null (layer_tools)) { 		Glyph g = MainWindow.get_current_glyph ();+		int i = 0; 		 		layer_tools.tool.clear (); 		foreach (Layer layer in g.layers.subgroups) {  			LayerLabel label = new LayerLabel (layer); 			layer_tools.add_tool (label, 0);-			label.select_layer ();+			+			if (i == g.current_layer) {+				label.select_layer ();+			}+			+			i++; 		} 		 		MainWindow.get_toolbox ().update_expanders ();diff --git a/libbirdfont/Glyph.vala b/libbirdfont/Glyph.valaindex 0410e3c..fbe1db4 100644--- a/libbirdfont/Glyph.vala+++ b/libbirdfont/Glyph.vala@@ -161,6 +161,7 @@ public class Glyph : FontDisplay { 	 	public void add_new_layer () { 		layers.add_layer (new Layer ());+		current_layer = layers.subgroups.size - 1; 	} 	 	public GlyfData get_ttf_data () {@@ -2289,6 +2290,38 @@ public class Glyph : FontDisplay { 		return_val_if_fail (paths.size > 0, null); 		return paths.get (paths.size - 1); 	}++	public void move_layer_up () {+		Layer layer = get_current_layer ();+		+		if (current_layer + 2 <= layers.subgroups.size) {+			return_if_fail (0 <= current_layer + 2 <= layers.subgroups.size);+			layers.subgroups.insert (current_layer + 2, layer);++			return_if_fail (0 <= current_layer + 1 < layers.subgroups.size);+			layers.subgroups.remove_at (current_layer);+			+			set_current_layer (layer);+		} +		+		DrawingTools.update_layers ();+	}+		+	public void move_layer_down () {+		Layer layer = get_current_layer ();+		+		if (current_layer >= 1) {+			return_if_fail (0 <= current_layer - 1 < layers.subgroups.size);+			layers.subgroups.insert (current_layer - 1, layer);++			return_if_fail (0 <= current_layer + 1 < layers.subgroups.size);+			layers.subgroups.remove_at (current_layer + 1);+			+			set_current_layer (layer);+		} +		+		DrawingTools.update_layers ();+	} }  }diff --git a/libbirdfont/LayerLabel.vala b/libbirdfont/LayerLabel.valaindex 7468751..d793c15 100644--- a/libbirdfont/LayerLabel.vala+++ b/libbirdfont/LayerLabel.vala@@ -53,7 +53,6 @@ public class LayerLabel : Tool { 		}); 		 		panel_double_click_action.connect ((selected, button, tx, ty) => {-			print ("double_click_action\n");	 			if (y <= ty <= y + h) { 				if (25 * Toolbox.get_scale () <= tx <= w - 30 * Toolbox.get_scale ()) { 					set_layer_name ();@@ -104,11 +103,11 @@ public class LayerLabel : Tool {  		idle.set_callback (() => {	 			Glyph g = MainWindow.get_current_glyph ();+			g.store_undo_state (); 			g.layers.remove_layer (layer); 			DrawingTools.update_layers (); 			BirdFont.get_current_font ().touch (); 			g.clear_active_paths ();-			g.store_undo_state (); 			GlyphCanvas.redraw (); 			return false; 		});diff --git a/libbirdfont/Menu.vala b/libbirdfont/Menu.valaindex b6f7361..977656f 100644--- a/libbirdfont/Menu.vala+++ b/libbirdfont/Menu.vala@@ -56,6 +56,7 @@ public class Menu : GLib.Object { 		SubMenu menu = new SubMenu (); 		SubMenu file_menu = new SubMenu (); 		SubMenu edit_menu = new SubMenu ();+		SubMenu layers_menu = new SubMenu (); 		SubMenu export_menu = new SubMenu (); 		SubMenu tab_menu = new SubMenu (); 		SubMenu kerning_menu = new SubMenu ();@@ -258,6 +259,25 @@ public class Menu : GLib.Object { 		}); 		edit_menu.items.add (select_point_below); +		// layers+		MenuItem layers = add_menu_item (t_("Layers"));+		layers.action.connect (() => {+			set_menu (layers_menu);+		});+		menu.items.add (layers);+		+		MenuItem layer_up = add_menu_item (t_("Move Layer Up"), "move layer up", "Glyph");+		layer_up.action.connect (() => {+			MainWindow.get_current_glyph ().move_layer_up ();+		});+		layers_menu.items.add (layer_up);++		MenuItem layer_down = add_menu_item (t_("Move Layer Down"), "move layer down", "Glyph");+		layer_down.action.connect (() => {+			MainWindow.get_current_glyph ().move_layer_down ();+		});+		layers_menu.items.add (layer_down);+		 		// import and export 		MenuItem export = add_menu_item (t_("Import and Export")); 		export.action.connect (() => {

Contact

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