Allow manipulation of BLineCalcTangent angle offsets via the angle duck.
[synfig.git] / synfig-studio / trunk / src / gtkmm / canvasview.cpp
index 9357698..8991ada 100644 (file)
@@ -2596,15 +2596,14 @@ CanvasView::on_duck_changed(const synfig::Point &value,const synfigapp::ValueDes
                        Real new_width(value.mag());
                        int scale_index(bline_width->get_link_index_from_name("scale"));
                        Real scale((*(bline_width->get_link(scale_index)))(get_time()).get(Real()));
-                       if (!(canvas_interface()->change_value(synfigapp::ValueDesc(bline_width,scale_index),
-                                                                                                  new_width * scale / old_width)))
-                               return false;
+                       return canvas_interface()->change_value(synfigapp::ValueDesc(bline_width,scale_index), new_width * scale / old_width);
                }
+
                return canvas_interface()->change_value(value_desc,value.mag());
-               break;
+
        case ValueBase::TYPE_ANGLE:
                return canvas_interface()->change_value(value_desc,Angle::tan(value[1],value[0]));
-               break;
+
        case ValueBase::TYPE_VECTOR:
                if (ValueNode_BLineCalcTangent::Handle bline_tangent = ValueNode_BLineCalcTangent::Handle::cast_dynamic(value_desc.get_value_node()))
                {
@@ -2651,6 +2650,13 @@ CanvasView::on_duck_changed(const synfig::Point &value,const synfigapp::ValueDes
 bool
 CanvasView::on_duck_angle_changed(const synfig::Angle &rotation,const synfigapp::ValueDesc& value_desc)
 {
+       if (ValueNode_BLineCalcTangent::Handle bline_tangent = ValueNode_BLineCalcTangent::Handle::cast_dynamic(value_desc.get_value_node()))
+       {
+               int offset_index(bline_tangent->get_link_index_from_name("offset"));
+               Angle old_offset((*(bline_tangent->get_link(offset_index)))(get_time()).get(Angle()));
+               return canvas_interface()->change_value(synfigapp::ValueDesc(bline_tangent,offset_index), old_offset + rotation);
+       }
+
        // \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);