Commit 4cd28d0
Move layers and move paths within layers
Changed files (4)
modifiedlibbirdfont/DrawingTools.valamodifiedlibbirdfont/Glyph.valamodifiedlibbirdfont/LayerLabel.valamodifiedlibbirdfont/Menu.vala
Diff
@@ -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 ();@@ -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 ();+ } } }@@ -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; });@@ -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 (() => {