Add a member to check if the value node is invertible
[synfig.git] / synfig-studio / trunk / src / gtkmm / canvasview.cpp
index 34fc7bd..a76b1a0 100644 (file)
@@ -1183,7 +1183,7 @@ CanvasView::create_display_bar()
        snap_grid->add(*icon2);
        snap_grid->signal_toggled().connect(
                        sigc::mem_fun(*this, &studio::CanvasView::toggle_snap_grid));
-       tooltips.set_tip(*snap_grid, _("snap grid when enabled"));
+       tooltips.set_tip(*snap_grid, _("Snap grid when enabled"));
        snap_grid->set_relief(Gtk::RELIEF_NONE);
        snap_grid->show();
 
@@ -1196,7 +1196,7 @@ CanvasView::create_display_bar()
        onion_skin->add(*icon3);
        onion_skin->signal_toggled().connect(
                        sigc::mem_fun(*this, &studio::CanvasView::toggle_onion_skin));
-       tooltips.set_tip(*snap_grid, _("Shows onion skin when enabled"));
+       tooltips.set_tip(*onion_skin, _("Shows onion skin when enabled"));
        onion_skin->set_relief(Gtk::RELIEF_NONE);
        onion_skin->show();
 
@@ -2887,6 +2887,18 @@ CanvasView::on_duck_changed(const synfig::Point &value,const synfigapp::ValueDes
                }
        }
 
+       if (ValueNode_Scale::Handle scale_value_node = ValueNode_Scale::Handle::cast_dynamic(value_desc.get_value_node()))
+       {
+               int link_index(scale_value_node->get_link_index_from_name("link"));
+               if(scale_value_node->is_invertible(get_time()))
+                       return canvas_interface()->change_value(
+                               synfigapp::ValueDesc(scale_value_node,link_index),
+                                       scale_value_node->get_inverse(get_time(), value)
+                                       );
+               else
+                       return false;
+       }
+
        switch(value_desc.get_value_type())
        {
        case ValueBase::TYPE_REAL:
@@ -2908,6 +2920,18 @@ CanvasView::on_duck_angle_changed(const synfig::Angle &rotation,const synfigapp:
                return canvas_interface()->change_value(synfigapp::ValueDesc(bline_tangent,offset_index), old_offset + rotation);
        }
 
+       if (ValueNode_Scale::Handle scale_value_node = ValueNode_Scale::Handle::cast_dynamic(value_desc.get_value_node()))
+       {
+               int link_index(scale_value_node->get_link_index_from_name("link"));
+               if(scale_value_node->is_invertible(get_time()))
+                       return canvas_interface()->change_value(
+                               synfigapp::ValueDesc(scale_value_node,link_index),
+                                       scale_value_node->get_inverse(get_time(), rotation)
+                                       );
+               else
+                       return false;
+
+       }
        // \todo will this really always be the case?
        assert(value_desc.get_value_type() == ValueBase::TYPE_ANGLE);
        return canvas_interface()->change_value(value_desc, value_desc.get_value(get_time()).get(Angle()) + rotation);
@@ -3253,8 +3277,8 @@ CanvasView::toggle_low_res_pixel_flag()
 void
 CanvasView::update_quality()
 {
-       if(working_depth)
-                       return;
+       //if(working_depth)
+       //              return;
        if(updating_quality_)
                return;
        updating_quality_=true;