X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fduckmatic.cpp;h=8475e06c19cf760c31acb1d7b0a14a88124120e4;hb=6058f1f8af684257c314a78cc0a24ced57bf3168;hp=a8b42197ddb0304ee7a3a574736ec35ac88ab26d;hpb=d33059aae9748036c993c319e998b078124705d1;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/duckmatic.cpp b/synfig-studio/trunk/src/gtkmm/duckmatic.cpp index a8b4219..8475e06 100644 --- a/synfig-studio/trunk/src/gtkmm/duckmatic.cpp +++ b/synfig-studio/trunk/src/gtkmm/duckmatic.cpp @@ -6,7 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley -** Copyright (c) 2007 Chris Moore +** Copyright (c) 2007, 2008 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 @@ -259,7 +259,7 @@ Duckmatic::is_duck_group_selectable(const etl::handle& x)const { const Type type(get_type_mask()); - if(( x->get_type() && (!(type & x->get_type())) ) ) + if(( x->get_type() && (!(type & x->get_type())) || !x->get_editable() ) ) return false; if(x->get_value_desc().parent_is_layer_param() && type & Duck::TYPE_POSITION) @@ -556,8 +556,8 @@ Duckmatic::signal_edited_selected_ducks() throw String("Bad edit"); } } -#ifdef RESTRICT_RADIUS_DUCKS_TO_ONE_QUARTER - else if ((*iter)->is_radius()) + else if (App::restrict_radius_ducks && + (*iter)->is_radius()) { Point point((*iter)->get_point()); bool changed = false; @@ -581,7 +581,6 @@ Duckmatic::signal_edited_selected_ducks() throw String("Bad edit"); } } -#endif else { if(!(*iter)->signal_edited()((*iter)->get_point())) @@ -769,12 +768,14 @@ Duckmatic::find_duck(synfig::Point point, synfig::Real radius, Duck::Type type) { const Duck::Handle& duck(iter->second); - if(!duck->get_editable()) + if(duck->get_ignore()) continue; Real dist((duck->get_trans_point()-point).mag_squared()); if(duck->get_type()&Duck::TYPE_VERTEX) dist*=1.0001; + else if(duck->get_type()&Duck::TYPE_RADIUS) + dist*=0.9999; if(dist<=closest && !( duck->get_type() && (!(type & duck->get_type())) ) ) { @@ -1515,8 +1516,9 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handleget_hint().empty()) + // Add the width duck if it is a parameter with a hint (ie. "width") or if it isn't a parameter + if ((param_desc && !param_desc->get_hint().empty()) || + !param_desc) { etl::handle width; if(add_to_ducks(synfigapp::ValueDesc(vertex_value_node,1),canvas_view,transform_stack,REAL_COOKIE)) @@ -1525,11 +1527,20 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handleset_origin(duck); width->set_type(Duck::TYPE_WIDTH); width->set_name(guid_string(synfigapp::ValueDesc(value_node,i))+".w"); + + // if the bline is a layer's parameter, scale the width duck by the layer's "width" parameter + if (param_desc) { ValueBase value(synfigapp::ValueDesc(value_desc.get_layer(),param_desc->get_hint()).get_value(get_time())); if(value.same_type_as(synfig::Real())) width->set_scalar(value.get(synfig::Real())*0.5f); + // if it doesn't have a "width" parameter, scale by 0.5f instead + else + width->set_scalar(0.5f); } + // otherwise just present the raw unscaled width + else + width->set_scalar(0.5f); } else synfig::error("Unable to add width duck!");