Use 0 for the index if the closest point is on the segment which closes the loop...
[synfig.git] / synfig-studio / trunk / src / gtkmm / canvasview.cpp
index 6a8a44e..8c0f3b7 100644 (file)
@@ -53,6 +53,8 @@
 #include <synfig/valuenode_dynamiclist.h>
 #include <synfig/valuenode_twotone.h>
 #include <synfig/valuenode_stripes.h>
+#include <synfig/valuenode_blinecalcvertex.h>
+#include <synfig/valuenode_bline.h>
 #include <synfig/layer.h>
 
 #include <synfigapp/uimanager.h>
@@ -2420,6 +2422,7 @@ CanvasView::time_zoom_in()
        time_window_adjustment().set_page_size(time_window_adjustment().get_page_size()*0.75);
        if (time_window_adjustment().get_page_size() < min_page_size)
                time_window_adjustment().set_page_size(min_page_size);
+       time_window_adjustment().set_page_increment(time_window_adjustment().get_page_size());
        time_window_adjustment().changed();
 
        refresh_time_window();
@@ -2434,6 +2437,7 @@ CanvasView::time_zoom_out()
        time_window_adjustment().set_page_size(time_window_adjustment().get_page_size()/0.75);
        if (time_window_adjustment().get_page_size() > length)
                time_window_adjustment().set_page_size(length);
+       time_window_adjustment().set_page_increment(time_window_adjustment().get_page_size());
        time_window_adjustment().changed();
 
        refresh_time_window();
@@ -2581,6 +2585,20 @@ CanvasView::duck_change_param(const synfig::Point &value,synfig::Layer::Handle l
 bool
 CanvasView::on_duck_changed(const synfig::Point &value,const synfigapp::ValueDesc& value_desc)
 {
+       if( ValueNode_BLineCalcVertex::Handle bline_vertex =
+               ValueNode_BLineCalcVertex::Handle::cast_dynamic(value_desc.get_value_node())
+       )
+       {
+               Real radius = 0.0;
+               Real amount = synfig::find_closest_point( 
+                       ( *bline_vertex->get_link(bline_vertex->get_link_index_from_name("bline")) )( get_time() ),
+                       value,
+                       radius,
+                       ( *bline_vertex->get_link(bline_vertex->get_link_index_from_name("loop")) )( get_time() ).get(bool())
+               );
+               return canvas_interface()->change_value(synfigapp::ValueDesc(bline_vertex,bline_vertex->get_link_index_from_name("amount")), amount);
+       }
+
        switch(value_desc.get_value_type())
        {
        case ValueBase::TYPE_REAL: