bool move_only;
public:
- etl::handle<CanvasView> canvas_view_;
+ CanvasView* canvas_view_;
bool scale;
bool rotate;
bool constrain;
class studio::StateNormal_Context : public sigc::trackable
{
- etl::handle<CanvasView> canvas_view_;
+ CanvasView* canvas_view_;
synfigapp::Settings& settings;
bool get_constrain_flag()const { return checkbutton_constrain.get_active(); }
void set_constrain_flag(bool x) { checkbutton_constrain.set_active(x); refresh_constrain_flag(); }
void refresh_constrain_flag() { if(duck_dragger_)duck_dragger_->constrain=get_constrain_flag(); }
+ void refresh_cursor();
StateNormal_Context(CanvasView* canvas_view);
~StateNormal_Context();
- const etl::handle<CanvasView>& get_canvas_view()const{return canvas_view_;}
+ CanvasView* get_canvas_view()const{return canvas_view_;}
etl::handle<synfigapp::CanvasInterface> get_canvas_interface()const{return canvas_view_->canvas_interface();}
synfig::Canvas::Handle get_canvas()const{return canvas_view_->get_canvas();}
WorkArea * get_work_area()const{return canvas_view_->get_work_area();}
{
}
+void StateNormal_Context::refresh_cursor()
+{
+ // Check the current state and return when applicable
+ synfig::String sname;
+ sname=get_canvas_view()->get_smach().get_state_name();
+ if (sname=="smooth_move"||sname=="zoom"||sname=="width" ||
+ sname=="text"||sname=="stroke"||sname=="star"||sname=="sketch"||
+ sname=="scale"||sname=="zoom"||sname=="rotate"||sname=="rectangle"||
+ sname=="polygon"||sname=="gradient"||sname=="fill"||sname=="draw"||
+ sname=="circle")
+ return;
+
+ // Change the cursor based on key flags
+ if(get_rotate_flag() && !get_scale_flag())
+ {
+ get_work_area()->set_cursor(Gdk::EXCHANGE);
+ return;
+ }
+ if(!get_rotate_flag() && get_scale_flag())
+ {
+ get_work_area()->set_cursor(Gdk::SIZING);
+ return;
+ }
+ if(get_rotate_flag() && get_scale_flag())
+ {
+ get_work_area()->set_cursor(Gdk::CROSSHAIR);
+ return;
+ }
+ // If we are in BLine state and there is not key pressed return to
+ // the bline cursor.
+ if (sname=="bline")
+ {
+ get_work_area()->set_cursor(Gdk::CROSSHAIR);
+ return;
+ }
+ // Default cursor for Transform tool
+ get_work_area()->set_cursor(Gdk::ARROW);
+
+}
+
void
StateNormal_Context::load_settings()
{
duck_dragger_->canvas_view_=get_canvas_view();
// Set up the tool options dialog
- options_table.attach(*manage(new Gtk::Label(_("Normal Tool"))), 0, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+ options_table.attach(*manage(new Gtk::Label(_("Transform Tool"))), 0, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
options_table.attach(checkbutton_rotate, 0, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
options_table.attach(checkbutton_scale, 0, 2, 2, 3, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
options_table.attach(checkbutton_constrain, 0, 2, 3, 4, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
keyrelease_connect=get_work_area()->signal_key_release_event().connect(sigc::mem_fun(*this,&StateNormal_Context::key_released),false);
//these will segfault
-// get_canvas_view()->work_area->set_cursor(Gdk::CROSSHAIR);
+// get_work_area()->set_cursor(Gdk::CROSSHAIR);
// get_work_area()->reset_cursor();
App::toolbox->refresh();
default:
break;
}
+ refresh_cursor();
return false; //Pass on the event to other handlers, just in case
}
default:
break;
}
+ refresh_cursor();
return false; //Pass on the event to other handlers
}
{
App::dialog_tool_options->clear();
App::dialog_tool_options->set_widget(options_table);
- App::dialog_tool_options->set_local_name(_("Normal Tool"));
+ App::dialog_tool_options->set_local_name(_("Transform Tool"));
App::dialog_tool_options->set_name("normal");
}
save_settings();
get_work_area()->clear_duck_dragger();
- get_canvas_view()->work_area->reset_cursor();
+ get_work_area()->reset_cursor();
keypress_connect.disconnect();
keyrelease_connect.disconnect();