X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fduckmatic.cpp;h=62e70fc16c8df0c6146a673cfdb2e0744345567c;hb=30c296530bbb095e51fc78535b5396a239c16aa7;hp=77d901102180d75db5fa2553223192c82860c2b2;hpb=837b63e9fb829d66d43f4f169861f8979f76820d;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/duckmatic.cpp b/synfig-studio/trunk/src/gtkmm/duckmatic.cpp index 77d9011..62e70fc 100644 --- a/synfig-studio/trunk/src/gtkmm/duckmatic.cpp +++ b/synfig-studio/trunk/src/gtkmm/duckmatic.cpp @@ -6,6 +6,7 @@ ** ** \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 ================================================= */ @@ -79,7 +87,7 @@ Duckmatic::Duckmatic(): grid_snap(false), guide_snap(false), grid_size(1.0/4.0,1.0/4.0), - show_persistant_strokes(true) + show_persistent_strokes(true) { axis_lock=false; drag_offset_=Point(0,0); @@ -102,8 +110,8 @@ Duckmatic::clear_ducks() bezier_list_.clear(); stroke_list_.clear(); - if(show_persistant_strokes) - stroke_list_=persistant_stroke_list_; + if(show_persistent_strokes) + stroke_list_=persistent_stroke_list_; } //! Returns \a true if the given duck is currently selected @@ -249,11 +257,8 @@ Duckmatic::is_duck_group_selectable(const etl::handle& 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; @@ -591,26 +615,26 @@ Duckmatic::add_stroke(etl::smart_ptr > stroke_point_lis } void -Duckmatic::add_persistant_stroke(etl::smart_ptr > stroke_point_list, const synfig::Color& color) +Duckmatic::add_persistent_stroke(etl::smart_ptr > stroke_point_list, const synfig::Color& color) { add_stroke(stroke_point_list,color); - persistant_stroke_list_.push_back(stroke_list_.back()); + persistent_stroke_list_.push_back(stroke_list_.back()); } void -Duckmatic::clear_persistant_strokes() +Duckmatic::clear_persistent_strokes() { - persistant_stroke_list_.clear(); + persistent_stroke_list_.clear(); } void -Duckmatic::set_show_persistant_strokes(bool x) +Duckmatic::set_show_persistent_strokes(bool x) { - if(x!=show_persistant_strokes) + if(x!=show_persistent_strokes) { - show_persistant_strokes=x; + show_persistent_strokes=x; if(x) - stroke_list_=persistant_stroke_list_; + stroke_list_=persistent_stroke_list_; else stroke_list_.clear(); } @@ -803,7 +827,7 @@ Duckmatic::save_sketch(const synfig::String& filename)const std::list >::const_iterator iter; - for(iter=persistant_stroke_list_.begin();iter!=persistant_stroke_list_.end();++iter) + for(iter=persistent_stroke_list_.begin();iter!=persistent_stroke_list_.end();++iter) { file<<"C " <<(*iter)->color.get_r()<<' ' @@ -864,7 +888,7 @@ Duckmatic::load_sketch(const synfig::String& filename) synfig::warning("Bad color line \"%s\"",line.c_str()); r=0;g=0;b=0; } - add_persistant_stroke(stroke_data, synfig::Color(r,g,b)); + add_persistent_stroke(stroke_data, synfig::Color(r,g,b)); } break; case 'V': @@ -872,7 +896,7 @@ Duckmatic::load_sketch(const synfig::String& filename) if(!stroke_data) { stroke_data.spawn(); - add_persistant_stroke(stroke_data, synfig::Color(0,0,0)); + add_persistent_stroke(stroke_data, synfig::Color(0,0,0)); } float x,y; if(!strscanf(line,"V %f %f",&x, &y)) @@ -1235,7 +1259,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handlec1=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::handlec2=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::handleset_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::handleset_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 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 t2_duck; @@ -1347,7 +1371,7 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handleset_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::handleset_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::handleset_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::handleset_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::handleset_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::handleset_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::handleset_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::handleset_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::handleset_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::handleset_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())