Revision: 2196
          http://synfig.svn.sourceforge.net/synfig/?rev=2196&view=rev
Author:   dooglus
Date:     2008-11-13 22:35:09 +0000 (Thu, 13 Nov 2008)

Log Message:
-----------
When creating any bline with the circle tool, create the bline with its origin 
at the centre of the circle.  This allows us to link the circle layer's center 
to the bline's offset.

Modified Paths:
--------------
    synfig-studio/trunk/src/gtkmm/state_circle.cpp

Modified: synfig-studio/trunk/src/gtkmm/state_circle.cpp
===================================================================
--- synfig-studio/trunk/src/gtkmm/state_circle.cpp      2008-11-13 19:55:42 UTC 
(rev 2195)
+++ synfig-studio/trunk/src/gtkmm/state_circle.cpp      2008-11-13 22:35:09 UTC 
(rev 2196)
@@ -130,6 +130,7 @@
        int layers_to_create()const
        {
                return
+                       get_layer_circle_flag() +
                        get_layer_region_flag() +
                        get_layer_outline_flag() +
                        get_layer_curve_gradient_flag() +
@@ -395,7 +396,7 @@
        checkbutton_layer_outline(_("Create Outline BLine")),
        checkbutton_layer_curve_gradient(_("Create Curve Gradient BLine")),
        checkbutton_layer_plant(_("Create Plant BLine")),
-       checkbutton_layer_link_origins(_("Link BLine Origins"))
+       checkbutton_layer_link_origins(_("Link Origins"))
 {
        egress_on_selection_change=true;
 
@@ -563,15 +564,14 @@
        Real tangent(4 * ((points == 2)
                                          ? 1
                                          : ((2 * Angle::cos(angle/2).get() - 
Angle::cos(angle).get() - 1) / Angle::sin(angle).get())));
-       Real x(p1[0]), y(p1[1]);
 
        std::vector<BLinePoint> new_list;
        for (int i = 0; i < points; i++)
        {
                new_list.push_back(*(new BLinePoint));
                new_list[i].set_width(1);
-               new_list[i].set_vertex(Point(radius*Angle::cos(angle*i + 
offset).get() + x,
-                                                                        
radius*Angle::sin(angle*i + offset).get() + y));
+               new_list[i].set_vertex(Point(radius*Angle::cos(angle*i + 
offset).get(),
+                                                                        
radius*Angle::sin(angle*i + offset).get()));
                
new_list[i].set_tangent(Point(-radius*tangent*Angle::sin(angle*i + 
offset).get(),
                                                                           
radius*tangent*Angle::cos(angle*i + offset).get()));
        }
@@ -579,7 +579,7 @@
        ValueNode_BLine::Handle 
value_node_bline(ValueNode_BLine::create(new_list));
        assert(value_node_bline);
 
-       ValueNode_Const::Handle 
value_node_origin(ValueNode_Const::create(Vector()));
+       ValueNode_Const::Handle value_node_origin(ValueNode_Const::create(p1));
        assert(value_node_origin);
 
        // Set the looping flag
@@ -631,6 +631,34 @@
                        
layer->set_param("color",synfigapp::Main::get_background_color());
                        
get_canvas_interface()->signal_layer_param_changed()(layer,"color");
                }
+
+               // only link the circle's origin parameter if the option is 
selected and we're creating more than one layer
+               if (get_layer_link_origins_flag() && layers_to_create > 1)
+               {
+                       synfigapp::Action::Handle 
action(synfigapp::Action::create("layer_param_connect"));
+                       assert(action);
+
+                       action->set_param("canvas",get_canvas());
+                       
action->set_param("canvas_interface",get_canvas_interface());
+                       action->set_param("layer",layer);
+                       if(!action->set_param("param",String("origin")))
+                               synfig::error("LayerParamConnect didn't like 
\"param\"");
+                       
if(!action->set_param("value_node",ValueNode::Handle(value_node_origin)))
+                               synfig::error("LayerParamConnect didn't like 
\"value_node\"");
+
+                       
if(!get_canvas_interface()->get_instance()->perform_action(action))
+                       {
+                               
//get_canvas_view()->get_ui_interface()->error(_("Unable to create Circle 
layer"));
+                               group.cancel();
+                               throw String(_("Unable to create Circle 
layer"));
+                               return;
+                       }
+               }
+               else
+               {
+                       layer->set_param("origin",p1);
+                       
get_canvas_interface()->signal_layer_param_changed()(layer,"origin");
+               }
        }
 
        
///////////////////////////////////////////////////////////////////////////
@@ -695,6 +723,11 @@
                                return;
                        }
                }
+               else
+               {
+                       layer->set_param("origin",p1);
+                       
get_canvas_interface()->signal_layer_param_changed()(layer,"origin");
+               }
        }
 
        
///////////////////////////////////////////////////////////////////////////
@@ -759,6 +792,11 @@
                                return;
                        }
                }
+               else
+               {
+                       layer->set_param("origin",p1);
+                       
get_canvas_interface()->signal_layer_param_changed()(layer,"origin");
+               }
        }
 
        
///////////////////////////////////////////////////////////////////////////
@@ -834,6 +872,11 @@
                                return;
                        }
                }
+               else
+               {
+                       layer->set_param("origin",p1);
+                       
get_canvas_interface()->signal_layer_param_changed()(layer,"origin");
+               }
        }
 
        
///////////////////////////////////////////////////////////////////////////
@@ -902,6 +945,11 @@
                                return;
                        }
                }
+               else
+               {
+                       layer->set_param("origin",p1);
+                       
get_canvas_interface()->signal_layer_param_changed()(layer,"origin");
+               }
        }
 
        egress_on_selection_change=false;


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to