Update copyright year
[synfig.git] / synfig-studio / src / gtkmm / state_normal.cpp
index c763022..66c7453 100644 (file)
@@ -96,7 +96,7 @@ class DuckDrag_Combo : public DuckDrag_Base
        bool move_only;
 
 public:
-       etl::handle<CanvasView> 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<CanvasView> 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<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();}
@@ -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);
@@ -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");
 }