Add my copyright to files I've modified.
[synfig.git] / synfig-studio / trunk / src / gtkmm / duckmatic.cpp
index 9634f7c..61ecef4 100644 (file)
@@ -2,10 +2,11 @@
 /*!    \file duckmatic.cpp
 **     \brief Template File
 **
-**     $Id: duckmatic.cpp,v 1.1.1.1 2005/01/07 03:34:36 darco Exp $
+**     $Id$
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007 Chris Moore
 **
 **     This package is free software; you can redistribute it and/or
 **     modify it under the terms of the GNU General Public License as
@@ -66,6 +67,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 ================================================= */
@@ -249,11 +257,8 @@ Duckmatic::is_duck_group_selectable(const etl::handle<Duck>& x)const
                        layer_name=="curve_gradient"
                )
                        return false;
-               if(
-                       (layer_name=="PasteCanvas"||
-                       layer_name=="paste_canvas")
-                       && !layer->get_param("children_lock").get(bool())
-               )
+               if((layer_name=="PasteCanvas"|| layer_name=="paste_canvas") &&
+                  !layer->get_param("children_lock").get(bool()))
                        return false;
        }
        return true;
@@ -269,6 +274,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 +1259,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 +1272,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 +1311,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 +1327,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 +1359,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 +1371,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 +1380,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;
@@ -1429,7 +1453,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                                                duck->set_origin(last_duck());
 /*
                                                                ValueBase value(synfigapp::ValueDesc(value_desc.get_layer(),param_desc->get_origin()).get_value(get_time()));
-                                                               if(value.same_as(synfig::Point()))
+                                                               if(value.same_type_as(synfig::Point()))
                                                                        duck->set_origin(value.get(synfig::Point()));
 */
                                                        }
@@ -1458,7 +1482,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                                                duck->set_origin(last_duck());
 /*
                                                                ValueBase value(synfigapp::ValueDesc(value_desc.get_layer(),param_desc->get_origin()).get_value(get_time()));
-                                                               if(value.same_as(synfig::Point()))
+                                                               if(value.same_type_as(synfig::Point()))
                                                                        duck->set_origin(value.get(synfig::Point()));
 */
                                                }
@@ -1480,7 +1504,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                                width->set_name(guid_string(synfigapp::ValueDesc(value_node,i))+".w");
                                                {
                                                        ValueBase value(synfigapp::ValueDesc(value_desc.get_layer(),param_desc->get_hint()).get_value(get_time()));
-                                                       if(value.same_as(synfig::Real()))
+                                                       if(value.same_type_as(synfig::Real()))
                                                                width->set_scalar(value.get(synfig::Real())*0.5f);
                                                }
                                        }
@@ -1510,7 +1534,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;
@@ -1586,7 +1610,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                                                duck->set_origin(last_duck());
 /*
                                                                ValueBase value(synfigapp::ValueDesc(value_desc.get_layer(),param_desc->get_origin()).get_value(get_time()));
-                                                               if(value.same_as(synfig::Point()))
+                                                               if(value.same_type_as(synfig::Point()))
                                                                        duck->set_origin(value.get(synfig::Point()));
 */
 //                                             if(!param_desc->get_origin().empty())
@@ -1610,7 +1634,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 +1703,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;
@@ -1741,7 +1765,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                                                duck->set_origin(last_duck());
 /*
                                                                ValueBase value(synfigapp::ValueDesc(value_desc.get_layer(),param_desc->get_origin()).get_value(get_time()));
-                                                               if(value.same_as(synfig::Point()))
+                                                               if(value.same_type_as(synfig::Point()))
                                                                        duck->set_origin(value.get(synfig::Point()));
 */
 //                                             if(!param_desc->get_origin().empty())