#include <synfigapp/action_system.h>
#include "state_smoothmove.h"
+#include "state_normal.h"
#include "canvasview.h"
#include "workarea.h"
#include "app.h"
class studio::StateSmoothMove_Context : public sigc::trackable
{
etl::handle<CanvasView> canvas_view_;
+ CanvasView::IsWorking is_working;
//Duckmatic::Push duckmatic_push;
Smach::state<StateSmoothMove_Context>("smooth_move")
{
insert(event_def(EVENT_REFRESH_TOOL_OPTIONS,&StateSmoothMove_Context::event_refresh_tool_options));
+ insert(event_def(EVENT_STOP,&StateSmoothMove_Context::event_stop_handler));
}
StateSmoothMove::~StateSmoothMove()
StateSmoothMove_Context::StateSmoothMove_Context(CanvasView* canvas_view):
canvas_view_(canvas_view),
+ is_working(*canvas_view),
// duckmatic_push(get_work_area()),
settings(synfigapp::Main::get_selected_input_device()->settings()),
duck_dragger_(new DuckDrag_SmoothMove()),
App::toolbox->refresh();
-// get_canvas_view()->work_area->set_cursor(Gdk::CROSSHAIR);
- get_canvas_view()->work_area->reset_cursor();
+ get_work_area()->set_cursor(Gdk::FLEUR);
+ //get_work_area()->reset_cursor();
load_settings();
}
return Smach::RESULT_ACCEPT;
}
+Smach::event_result
+StateSmoothMove_Context::event_stop_handler(const Smach::event& /*x*/)
+{
+ throw &state_normal;
+ return Smach::RESULT_OK;
+}
+
StateSmoothMove_Context::~StateSmoothMove_Context()
{
save_settings();
get_work_area()->clear_duck_dragger();
- get_canvas_view()->work_area->reset_cursor();
+ get_work_area()->reset_cursor();
App::dialog_tool_options->clear();
}
// then patch up the tangents for the vertices we've moved
- DuckList duck_list(duckmatic->get_duck_list());
- for (iter=selected_ducks.begin(); iter!=selected_ducks.end(); ++iter)
- {
- etl::handle<Duck> duck(*iter);
- if (duck->get_type() == Duck::TYPE_VERTEX || duck->get_type() == Duck::TYPE_POSITION)
- {
- ValueNode_Composite::Handle composite;
-
- if ((ValueNode_BLineCalcVertex::Handle::cast_dynamic(duck->get_value_desc().get_value_node())) ||
- ((composite = ValueNode_Composite::Handle::cast_dynamic(duck->get_value_desc().get_value_node())) &&
- composite->get_type() == ValueBase::TYPE_BLINEPOINT &&
- (ValueNode_BLineCalcVertex::Handle::cast_dynamic(composite->get_link("point")))))
- {
- //! \todo update() will call dynamic cast again, see if we can avoid that
- DuckList::iterator iter;
- for (iter=duck_list.begin(); iter!=duck_list.end(); iter++)
- if ((*iter)->get_origin_duck()==duck
- && std::find(selected_ducks.begin(),
- selected_ducks.end(), *iter) == selected_ducks.end() )
- (*iter)->update(time);
- }
- }
- }
+ duckmatic->update_ducks();
last_translate_=vect;
//snap=Vector(0,0);