From 29fb15a748174a902cc2a43401f37f5fc04cb08e Mon Sep 17 00:00:00 2001 From: "[d.j.a.y] Jerome Blanchi" Date: Mon, 14 Dec 2015 12:49:41 +0100 Subject: [PATCH] fix 250 : Add shortcut to hide/show all ducks * New action "mask-none_ducks" * Menu/View/Show Hide Handle/"Toggle None/Last visible Handles" * <0> has toggle all handles. http://www.synfig.org/issues/thebuggenie/synfig/issues/250 --- synfig-studio/src/gui/app.cpp | 7 +++++-- synfig-studio/src/gui/canvasview.cpp | 24 +++++++++++++++++++++++- synfig-studio/src/gui/canvasview.h | 6 ++++++ synfig-studio/src/gui/duckmatic.cpp | 1 + synfig-studio/src/gui/duckmatic.h | 14 ++++++++++++-- 5 files changed, 47 insertions(+), 5 deletions(-) diff --git a/synfig-studio/src/gui/app.cpp b/synfig-studio/src/gui/app.cpp index 7513a4bc046..af4920d3769 100644 --- a/synfig-studio/src/gui/app.cpp +++ b/synfig-studio/src/gui/app.cpp @@ -899,16 +899,17 @@ DEFINE_ACTION("restore-default-settings", _("Restore Defaults")); DEFINE_ACTION("toggle-mainwin-menubar", _("Menubar")); DEFINE_ACTION("toggle-mainwin-toolbar", _("Toolbar")); +DEFINE_ACTION("mask-none-ducks", _("Toggle None/Last visible Handles")); DEFINE_ACTION("mask-position-ducks", _("Show Position Handles")); DEFINE_ACTION("mask-vertex-ducks", _("Show Vertex Handles")); DEFINE_ACTION("mask-tangent-ducks", _("Show Tangent Handles")); DEFINE_ACTION("mask-radius-ducks", _("Show Radius Handles")); DEFINE_ACTION("mask-width-ducks", _("Show Width Handles")); +DEFINE_ACTION("mask-widthpoint-position-ducks", _("Show WidthPoints Position Handles")); DEFINE_ACTION("mask-angle-ducks", _("Show Angle Handles")); DEFINE_ACTION("mask-bone-setup-ducks", _("Show Bone Setup Handles")); DEFINE_ACTION("mask-bone-recursive-ducks", _("Show Recursive Scale Bone Handles")); DEFINE_ACTION("mask-bone-ducks", _("Next Bone Handles")); -DEFINE_ACTION("mask-widthpoint-position-ducks", _("Show WidthPoints Position Handles")); DEFINE_ACTION("quality-00", _("Use Parametric Renderer")); DEFINE_ACTION("quality-01", _("Use Quality Level 1")); DEFINE_ACTION("quality-02", _("Use Quality Level 2")); @@ -1035,16 +1036,17 @@ DEFINE_ACTION("keyframe-properties","Properties"); " " " " " " +" " " " " " " " " " " " +" " " " " " " " " " -" " " " " " " " @@ -1256,6 +1258,7 @@ DEFINE_ACTION("keyframe-properties","Properties"); ACCEL("s", "/canvasview/save" ); ACCEL("s", "/canvasview/save-as" ); ACCEL2(Gtk::AccelKey('`',Gdk::CONTROL_MASK, "/canvasview/toggle-low-res" )); + ACCEL("0", "/canvasview/mask-none-ducks" ); ACCEL("1", "/canvasview/mask-position-ducks" ); ACCEL("2", "/canvasview/mask-vertex-ducks" ); ACCEL("3", "/canvasview/mask-tangent-ducks" ); diff --git a/synfig-studio/src/gui/canvasview.cpp b/synfig-studio/src/gui/canvasview.cpp index 31c89faa86e..16553d7a3e5 100644 --- a/synfig-studio/src/gui/canvasview.cpp +++ b/synfig-studio/src/gui/canvasview.cpp @@ -1936,6 +1936,10 @@ CanvasView::init_menus() { Glib::RefPtr action; + //! toggle none/last visible + action= Gtk::ToggleAction::create("mask-none-ducks", _("Toggle None/Last visible Handles")); + action->set_active(false); + action_group->add(action, sigc::mem_fun(*this,&CanvasView::toggle_duck_mask_all)); #define DUCK_MASK(lower,upper,string) \ action=Gtk::ToggleAction::create("mask-" #lower "-ducks", string); \ @@ -1950,11 +1954,11 @@ CanvasView::init_menus() DUCK_MASK(vertex,VERTEX,_("Show Vertex Handles")); DUCK_MASK(radius,RADIUS,_("Show Radius Handles")); DUCK_MASK(width,WIDTH,_("Show Width Handles")); + DUCK_MASK(widthpoint-position, WIDTHPOINT_POSITION, _("Show WidthPoints Position Handles")); DUCK_MASK(angle,ANGLE,_("Show Angle Handles")); action_mask_bone_setup_ducks = action; DUCK_MASK(bone-recursive,BONE_RECURSIVE,_("Show Recursive Scale Bone Handles")); action_mask_bone_recursive_ducks = action; - DUCK_MASK(widthpoint-position, WIDTHPOINT_POSITION, _("Show WidthPoints Position Handles")); #undef DUCK_MASK @@ -4014,6 +4018,7 @@ CanvasView::toggle_duck_mask(Duckmatic::Type type) action = Glib::RefPtr::cast_dynamic(action_group->get_action("mask-angle-ducks")); action->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_ANGLE)); // Update toggle ducks buttons + action->get_active(); toggleducksdial.update_toggles(work_area->get_type_mask()); } catch(...) @@ -4023,6 +4028,23 @@ CanvasView::toggle_duck_mask(Duckmatic::Type type) toggling_ducks_=false; } +void +CanvasView::toggle_duck_mask_all() +{ + if (work_area->get_type_mask_state ()== Duck::TYPE_NONE) + { + work_area->set_type_mask_state ( work_area->get_type_mask()); + work_area->set_type_mask(Duck::TYPE_NONE); + toggle_duck_mask(Duck::TYPE_NONE); + } + else + { + work_area->set_type_mask(work_area->get_type_mask_state()); + work_area->set_type_mask_state ( Duck::TYPE_NONE); + toggle_duck_mask(Duck::TYPE_NONE); + } +} + void CanvasView::mask_bone_ducks() { diff --git a/synfig-studio/src/gui/canvasview.h b/synfig-studio/src/gui/canvasview.h index e5aa1069df4..17a8d410f12 100644 --- a/synfig-studio/src/gui/canvasview.h +++ b/synfig-studio/src/gui/canvasview.h @@ -762,7 +762,13 @@ class CanvasView : public Dockable, public etl::shared_object void update_quality(); + //! Toggle given handle type + //! \Param[in] type The Duckmatic::Type to toggle + //! \Sa DuckMatic::set_type_mask(), DuckMatic::get_type_mask() void toggle_duck_mask(Duckmatic::Type type); + //! Toggle between none/last visible handles + //! \Sa DuckMatic::set_type_mask_state(), DuckMatic::get_type_mask_state() + void toggle_duck_mask_all(); bool is_time_equal_to_current_frame(const synfig::Time &time, const synfig::Time &range = synfig::Time(0.0)); diff --git a/synfig-studio/src/gui/duckmatic.cpp b/synfig-studio/src/gui/duckmatic.cpp index 8db4e3110a3..03f252da0c8 100644 --- a/synfig-studio/src/gui/duckmatic.cpp +++ b/synfig-studio/src/gui/duckmatic.cpp @@ -116,6 +116,7 @@ void set_duck_value_desc(Duck& duck, const synfigapp::ValueDesc& value_desc, con Duckmatic::Duckmatic(etl::loose_handle canvas_interface): canvas_interface(canvas_interface), type_mask(Duck::TYPE_ALL-Duck::TYPE_WIDTH-Duck::TYPE_BONE_RECURSIVE-Duck::TYPE_WIDTHPOINT_POSITION), + type_mask_state(Duck::TYPE_NONE), alternative_mode_(false), lock_animation_mode_(false), grid_snap(false), diff --git a/synfig-studio/src/gui/duckmatic.h b/synfig-studio/src/gui/duckmatic.h index 8cbb34773e1..818f6551301 100644 --- a/synfig-studio/src/gui/duckmatic.h +++ b/synfig-studio/src/gui/duckmatic.h @@ -190,7 +190,7 @@ typedef std::map > DuckDataMap; etl::loose_handle canvas_interface; - Type type_mask; + Type type_mask, type_mask_state; DuckMap duck_map; @@ -520,11 +520,21 @@ typedef std::map > DuckDataMap; bool add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle canvas_view, const synfig::TransformStack& transform_stack_, synfig::ParamDesc *param_desc=0); //! Set the type mask, which determines what types of ducks are shown + //! \Param[in] x Duck::Type set to backup when toggling handles + //! \Sa get_type_mask(), CanvasView::toggle_duck_all() void set_type_mask(Type x) { type_mask=x; } - //! Get the type mask, which determines what types of ducks are shown + //! \Sa set_type_mask(), CanvasView::toggle_duck_all() Type get_type_mask()const { return type_mask; } + //! Set the type mask state, which determines what types of ducks are shown on toggle + //! \Param[in] x Duck::Type set to backup when toggling handles + //! \Sa get_type_mask_state(), CanvasView::toggle_duck_mask_all() + void set_type_mask_state(Type x) { type_mask_state=x; } + //! Get the type mask state, which determines what types of ducks are shown on toggle + //! \Sa set_type_mask_state(), CanvasView::toggle_duck_mask_all() + Type get_type_mask_state()const { return type_mask_state; } + void select_all_ducks(); void unselect_all_ducks();