Show width ducks for exported blines.
[synfig.git] / synfig-studio / trunk / src / gtkmm / duckmatic.cpp
index cd137cb..b470816 100644 (file)
@@ -259,7 +259,7 @@ Duckmatic::is_duck_group_selectable(const etl::handle<Duck>& 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)
@@ -768,7 +768,7 @@ 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());
 
@@ -1516,8 +1516,9 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
 //                                     add_duck(duck);
                                }
 
-                               // Add the width duck only if we have a hint of scale
-                               if(param_desc && !param_desc->get_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<Duck> width;
                                        if(add_to_ducks(synfigapp::ValueDesc(vertex_value_node,1),canvas_view,transform_stack,REAL_COOKIE))
@@ -1526,11 +1527,17 @@ Duckmatic::add_to_ducks(const synfigapp::ValueDesc& value_desc,etl::handle<Canva
                                                width->set_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);
                                                }
+                                               // otherwise just present the raw unscaled width
+                                               else
+                                                       width->set_scalar(0.5f);
                                        }
                                        else
                                                synfig::error("Unable to add width duck!");