Author: Carlos Lopez <[email protected]>
Date: Fri Apr 15 19:31:36 2011 +0200
Fix bug that hangs synfigstudio when press ATL-5 during usage of Draw tool or
Width tool due to lack of sync of the signals and the masks.
---
synfig-studio/src/gui/canvasview.h | 4 +---
synfig-studio/src/gui/states/state_draw.cpp | 6 +++++-
synfig-studio/src/gui/states/state_width.cpp | 15 ++++++++++++++-
3 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/synfig-studio/src/gui/canvasview.h
b/synfig-studio/src/gui/canvasview.h
index 6600d0a..4a0927f 100644
--- a/synfig-studio/src/gui/canvasview.h
+++ b/synfig-studio/src/gui/canvasview.h
@@ -425,8 +425,6 @@ private:
void refresh_rend_desc();
- void toggle_duck_mask(Duckmatic::Type type);
-
Gtk::Widget *create_work_area();
Gtk::Widget *create_time_bar();
@@ -632,7 +630,7 @@ public:
void update_quality();
-
+ void toggle_duck_mask(Duckmatic::Type type);
/*
-- ** -- S I G N A L T E R M I N A L S -------------------------------------
diff --git a/synfig-studio/src/gui/states/state_draw.cpp
b/synfig-studio/src/gui/states/state_draw.cpp
index 1a793f2..d76df4d 100644
--- a/synfig-studio/src/gui/states/state_draw.cpp
+++ b/synfig-studio/src/gui/states/state_draw.cpp
@@ -480,7 +480,10 @@ StateDraw_Context::StateDraw_Context(CanvasView*
canvas_view):
old_duckmask=get_work_area()->get_type_mask();
-
get_work_area()->set_type_mask(Duck::TYPE_ALL-Duck::TYPE_TANGENT-Duck::TYPE_WIDTH);
+ if(old_duckmask & Duck::TYPE_TANGENT)
+ get_canvas_view()->toggle_duck_mask(Duck::TYPE_TANGENT);
+ if(old_duckmask & Duck::TYPE_WIDTH)
+ get_canvas_view()->toggle_duck_mask(Duck::TYPE_WIDTH);
// Turn off layer clicking
get_work_area()->set_allow_layer_clicks(false);
@@ -560,6 +563,7 @@ StateDraw_Context::~StateDraw_Context()
App::dialog_tool_options->clear();
get_work_area()->set_type_mask(old_duckmask);
+ get_canvas_view()->toggle_duck_mask(Duck::TYPE_NONE);
get_work_area()->reset_cursor();
diff --git a/synfig-studio/src/gui/states/state_width.cpp
b/synfig-studio/src/gui/states/state_width.cpp
index 29cb2cc..c8c4fc8 100644
--- a/synfig-studio/src/gui/states/state_width.cpp
+++ b/synfig-studio/src/gui/states/state_width.cpp
@@ -301,7 +301,19 @@ StateWidth_Context::StateWidth_Context(CanvasView*
canvas_view):
get_work_area()->set_allow_duck_clicks(false);
// Hide all tangent, vertex and angle ducks and show the width and
// radius ducks
-
get_work_area()->set_type_mask((old_duckmask-Duck::TYPE_TANGENT-Duck::TYPE_VERTEX-Duck::TYPE_ANGLE)
| Duck::TYPE_WIDTH | Duck::TYPE_RADIUS);
+ if(old_duckmask & Duck::TYPE_TANGENT)
+ get_canvas_view()->toggle_duck_mask(Duck::TYPE_TANGENT);
+ if(old_duckmask & Duck::TYPE_VERTEX)
+ get_canvas_view()->toggle_duck_mask(Duck::TYPE_VERTEX);
+ if(old_duckmask & Duck::TYPE_ANGLE)
+ get_canvas_view()->toggle_duck_mask(Duck::TYPE_ANGLE);
+ if(!(old_duckmask & Duck::TYPE_WIDTH))
+ get_canvas_view()->toggle_duck_mask(Duck::TYPE_WIDTH);
+ if(!(old_duckmask & Duck::TYPE_WIDTHPOINT_POSITION))
+
get_canvas_view()->toggle_duck_mask(Duck::TYPE_WIDTHPOINT_POSITION);
+ if(!(old_duckmask & Duck::TYPE_RADIUS))
+ get_canvas_view()->toggle_duck_mask(Duck::TYPE_RADIUS);
+
//get_work_area()->set_type_mask((old_duckmask-Duck::TYPE_TANGENT-Duck::TYPE_VERTEX-Duck::TYPE_ANGLE)
| Duck::TYPE_WIDTH | Duck::TYPE_RADIUS);
// Turn the mouse pointer to crosshairs
get_work_area()->set_cursor(Gdk::CROSSHAIR);
@@ -359,6 +371,7 @@ StateWidth_Context::~StateWidth_Context()
// Restore duck masking
get_work_area()->set_type_mask(old_duckmask);
+ get_canvas_view()->toggle_duck_mask(Duck::TYPE_NONE);
// Tool options be rid of ye!!
App::dialog_tool_options->clear();
------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve
application availability and disaster protection. Learn more about boosting
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl