This can't be right, can it?
[synfig.git] / synfig-studio / trunk / src / gtkmm / duckmatic.cpp
index 77d9011..5dbbaf0 100644 (file)
@@ -66,6 +66,13 @@ using namespace studio;
 
 /* === M A C R O S ========================================================= */
 
+/* 0.33333333333333333 makes for nice short tangent handles,
+   1.0 makes them draw as their real length */
+#define TANGENT_HANDLE_SCALE 0.33333333333333333
+
+/* leave this alone or the bezier won't lie on top of the bline */
+#define TANGENT_BEZIER_SCALE 0.33333333333333333
+
 /* === G L O B A L S ======================================================= */
 
 /* === P R O C E D U R E S ================================================= */
@@ -269,6 +276,25 @@ Duckmatic::select_all_ducks()
 }
 
 void
+Duckmatic::toggle_select_ducks_in_box(const synfig::Vector& tl,const synfig::Vector& br)
+{
+       Vector vmin, vmax;
+       vmin[0]=std::min(tl[0],br[0]);
+       vmin[1]=std::min(tl[1],br[1]);
+       vmax[0]=std::max(tl[0],br[0]);
+       vmax[1]=std::max(tl[1],br[1]);
+
+       DuckMap::const_iterator iter;
+       for(iter=duck_map.begin();iter!=duck_map.end();++iter)
+       {
+               Point p(iter->second->get_trans_point());
+               if(p[0]<=vmax[0] && p[0]>=vmin[0] && p[1]<=vmax[1] && p[1]>=vmin[1] &&
+                  is_duck_group_selectable(iter->second))
+                       toggle_select_duck(iter->second);
+       }
+}
+
+void
 Duckmatic::select_ducks_in_box(const synfig::Vector& tl,const synfig::Vector& br)
 {
        Vector vmin, vmax;
@@ -1235,7 +1261,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                bezier->c1=last_duck();
                                bezier->c1->set_type(Duck::TYPE_TANGENT);
                                bezier->c1->set_origin(bezier->p1);
-                               bezier->c1->set_scalar(0.33333333333333333);
+                               bezier->c1->set_scalar(TANGENT_BEZIER_SCALE);
                                bezier->c1->set_tangent(true);
 
 
@@ -1248,7 +1274,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                bezier->c2=last_duck();
                                bezier->c2->set_type(Duck::TYPE_TANGENT);
                                bezier->c2->set_origin(bezier->p2);
-                               bezier->c2->set_scalar(-0.33333333333333333);
+                               bezier->c2->set_scalar(-TANGENT_BEZIER_SCALE);
                                bezier->c2->set_tangent(true);
 
                                bezier->signal_user_click(2).connect(
@@ -1287,7 +1313,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                duck_c->set_type(Duck::TYPE_TANGENT);
                                add_duck(duck_c);
                                duck_c->set_origin(duck_p);
-                               duck_c->set_scalar(0.33333333333333333);
+                               duck_c->set_scalar(TANGENT_HANDLE_SCALE);
                                duck_c->set_tangent(true);
 
                                bezier->p1=duck_p;
@@ -1303,7 +1329,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                duck_c->set_name(name+".T2");
                                add_duck(duck_c);
                                duck_c->set_origin(duck_p);
-                               duck_c->set_scalar(-0.33333333333333333);
+                               duck_c->set_scalar(-TANGENT_HANDLE_SCALE);
                                duck_c->set_tangent(true);
 
                                bezier->p2=duck_p;
@@ -1335,7 +1361,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                        etl::handle<Duck> t1_duck(last_duck());
 
                        t1_duck->set_origin(vertex_duck);
-                       t1_duck->set_scalar(-0.33333333333333333);
+                       t1_duck->set_scalar(-TANGENT_HANDLE_SCALE);
                        t1_duck->set_tangent(true);
 
                        etl::handle<Duck> t2_duck;
@@ -1347,7 +1373,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                        return false;
                                t2_duck=last_duck();
                                t2_duck->set_origin(vertex_duck);
-                               t2_duck->set_scalar(0.33333333333333333);
+                               t2_duck->set_scalar(TANGENT_HANDLE_SCALE);
                                t2_duck->set_tangent(true);
                        }
                        else
@@ -1356,7 +1382,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                        return false;
                                t2_duck=last_duck();
                                t2_duck->set_origin(vertex_duck);
-                               t2_duck->set_scalar(0.33333333333333333);
+                               t2_duck->set_scalar(TANGENT_HANDLE_SCALE);
                                t2_duck->set_tangent(true);
                        }
                        return true;
@@ -1510,7 +1536,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                        }
 
                                        tduck->set_origin(duck);
-                                       tduck->set_scalar(-0.33333333333333333);
+                                       tduck->set_scalar(-TANGENT_BEZIER_SCALE);
                                        tduck->set_tangent(true);
 
                                        bezier->p2=duck;
@@ -1610,7 +1636,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                }
 
                                tduck->set_origin(duck);
-                               tduck->set_scalar(0.33333333333333333);
+                               tduck->set_scalar(TANGENT_BEZIER_SCALE);
                                tduck->set_tangent(true);
 
                                bezier->p1=duck;
@@ -1679,7 +1705,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                        }
 
                                        tduck->set_origin(duck);
-                                       tduck->set_scalar(-0.33333333333333333);
+                                       tduck->set_scalar(-TANGENT_BEZIER_SCALE);
                                        tduck->set_tangent(true);
 
                                        bezier->p2=duck;