X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Fsrc%2Fgtkmm%2Fstate_normal.cpp;h=66c7453e43d7e51d921d20f353b34f5638e9f0a7;hb=f7042790c7926b36e9ccdd56e35e6f64c3cfacd4;hp=822892122df16a0e623bbd5e4a6471be6e468e89;hpb=2330c77141e506bed35409ce5da7ee53f6b7643a;p=synfig.git diff --git a/synfig-studio/src/gtkmm/state_normal.cpp b/synfig-studio/src/gtkmm/state_normal.cpp index 8228921..66c7453 100644 --- a/synfig-studio/src/gtkmm/state_normal.cpp +++ b/synfig-studio/src/gtkmm/state_normal.cpp @@ -96,7 +96,7 @@ class DuckDrag_Combo : public DuckDrag_Base bool move_only; public: - etl::handle canvas_view_; + CanvasView* canvas_view_; bool scale; bool rotate; bool constrain; @@ -111,7 +111,7 @@ public: class studio::StateNormal_Context : public sigc::trackable { - etl::handle canvas_view_; + CanvasView* canvas_view_; synfigapp::Settings& settings; @@ -139,12 +139,13 @@ public: 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& get_canvas_view()const{return canvas_view_;} + CanvasView* get_canvas_view()const{return canvas_view_;} etl::handle 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();} @@ -190,6 +191,46 @@ StateNormal::~StateNormal() { } +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() { @@ -231,7 +272,7 @@ StateNormal_Context::StateNormal_Context(CanvasView* canvas_view): 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); @@ -244,7 +285,7 @@ StateNormal_Context::StateNormal_Context(CanvasView* canvas_view): options_table.show_all(); refresh_tool_options(); //App::dialog_tool_options->set_widget(options_table); - App::dialog_tool_options->present(); + //App::dialog_tool_options->present(); get_work_area()->set_allow_layer_clicks(true); get_work_area()->set_duck_dragger(duck_dragger_); @@ -253,7 +294,7 @@ StateNormal_Context::StateNormal_Context(CanvasView* canvas_view): 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(); @@ -282,6 +323,7 @@ StateNormal_Context::key_pressed(GdkEventKey *event) default: break; } + refresh_cursor(); return false; //Pass on the event to other handlers, just in case } @@ -305,6 +347,7 @@ StateNormal_Context::key_released(GdkEventKey *event) default: break; } + refresh_cursor(); return false; //Pass on the event to other handlers } @@ -313,7 +356,7 @@ StateNormal_Context::refresh_tool_options() { 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"); } @@ -324,7 +367,7 @@ StateNormal_Context::~StateNormal_Context() 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();