Author: Carlos Lopez <genet...@gmail.com>
Date:   Tue Mar 22 16:11:38 2011 +0100

Enable creation of Advanced Outline using the BLine Tool

---

 synfig-studio/src/gui/states/state_bline.cpp |   89 ++++++++++++++++++++++++--
 1 files changed, 84 insertions(+), 5 deletions(-)

diff --git a/synfig-studio/src/gui/states/state_bline.cpp 
b/synfig-studio/src/gui/states/state_bline.cpp
index 935e682..74dbcc7 100644
--- a/synfig-studio/src/gui/states/state_bline.cpp
+++ b/synfig-studio/src/gui/states/state_bline.cpp
@@ -119,6 +119,7 @@ class studio::StateBLine_Context : public sigc::trackable
        Gtk::Entry entry_id;
        Gtk::CheckButton checkbutton_layer_region;
        Gtk::CheckButton checkbutton_layer_outline;
+       Gtk::CheckButton checkbutton_layer_advanced_outline;
        Gtk::CheckButton checkbutton_layer_curve_gradient;
        Gtk::CheckButton checkbutton_layer_plant;
        Gtk::CheckButton checkbutton_layer_link_origins;
@@ -137,6 +138,7 @@ public:
                return
                        get_layer_region_flag() +
                        get_layer_outline_flag() +
+                       get_layer_advanced_outline_flag()+
                        get_layer_curve_gradient_flag() +
                        get_layer_plant_flag();
        }
@@ -156,6 +158,9 @@ public:
        bool get_layer_outline_flag()const { return 
checkbutton_layer_outline.get_active(); }
        void set_layer_outline_flag(bool x) { return 
checkbutton_layer_outline.set_active(x); }
 
+       bool get_layer_advanced_outline_flag()const { return 
checkbutton_layer_advanced_outline.get_active(); }
+       void set_layer_advanced_outline_flag(bool x) { return 
checkbutton_layer_advanced_outline.set_active(x); }
+
        bool get_layer_curve_gradient_flag()const { return 
checkbutton_layer_curve_gradient.get_active(); }
        void set_layer_curve_gradient_flag(bool x) { return 
checkbutton_layer_curve_gradient.set_active(x); }
 
@@ -251,6 +256,11 @@ StateBLine_Context::load_settings()
                else
                        set_layer_outline_flag(true);
 
+               if(settings.get_value("bline.layer_advanced_outline",value) && 
value=="0")
+                       set_layer_advanced_outline_flag(false);
+               else
+                       set_layer_advanced_outline_flag(true);
+
                if(settings.get_value("bline.layer_curve_gradient",value) && 
value=="1")
                        set_layer_curve_gradient_flag(true);
                else
@@ -297,6 +307,7 @@ StateBLine_Context::save_settings()
                synfig::ChangeLocale change_locale(LC_NUMERIC, "C");
                sanity_check();
                
settings.set_value("bline.layer_outline",get_layer_outline_flag()?"1":"0");
+               
settings.set_value("bline.layer_advanced_outline",get_layer_advanced_outline_flag()?"1":"0");
                
settings.set_value("bline.layer_region",get_layer_region_flag()?"1":"0");
                
settings.set_value("bline.layer_curve_gradient",get_layer_curve_gradient_flag()?"1":"0");
                
settings.set_value("bline.layer_plant",get_layer_plant_flag()?"1":"0");
@@ -376,6 +387,7 @@ StateBLine_Context::StateBLine_Context(CanvasView* 
canvas_view):
        entry_id(),
        checkbutton_layer_region(_("Create Region BLine")),
        checkbutton_layer_outline(_("Create Outline BLine")),
+       checkbutton_layer_advanced_outline(_("Create Advanced Outline BLine")),
        checkbutton_layer_curve_gradient(_("Create Curve Gradient BLine")),
        checkbutton_layer_plant(_("Create Plant BLine")),
        checkbutton_layer_link_origins(_("Link Origins")),
@@ -393,11 +405,12 @@ StateBLine_Context::StateBLine_Context(CanvasView* 
canvas_view):
        options_table.attach(*manage(new Gtk::Label(_("BLine Tool"))),  0, 2,  
0,  1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
        options_table.attach(entry_id,                                          
                        0, 2,  1,  2, Gtk::EXPAND|Gtk::FILL, 
Gtk::EXPAND|Gtk::FILL, 0, 0);
        options_table.attach(checkbutton_layer_outline,                         
        0, 2,  2,  3, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-       options_table.attach(checkbutton_layer_region,                          
        0, 2,  3,  4, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-       options_table.attach(checkbutton_layer_plant,                           
        0, 2,  4,  5, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-       options_table.attach(checkbutton_layer_curve_gradient,                  
0, 2,  5,  6, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-       options_table.attach(checkbutton_layer_link_origins,                    
0, 2,  6,  7, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-       options_table.attach(checkbutton_auto_export,                           
        0, 2,  7,  8, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+       options_table.attach(checkbutton_layer_advanced_outline,                
0, 2,  3,  4, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+       options_table.attach(checkbutton_layer_region,                          
        0, 2,  4,  5, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+       options_table.attach(checkbutton_layer_plant,                           
        0, 2,  5,  6, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+       options_table.attach(checkbutton_layer_curve_gradient,                  
0, 2,  6,  7, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+       options_table.attach(checkbutton_layer_link_origins,                    
0, 2,  7,  8, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+       options_table.attach(checkbutton_auto_export,                           
        0, 2,  8,  9, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
        options_table.attach(*manage(new Gtk::Label(_("Feather"))),     0, 1, 
10, 11, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
        options_table.attach(spin_feather,                                      
                        1, 2, 10, 11, Gtk::EXPAND|Gtk::FILL, 
Gtk::EXPAND|Gtk::FILL, 0, 0);
        //options_table.attach(button_make, 0, 2, 5, 6, Gtk::EXPAND|Gtk::FILL, 
Gtk::EXPAND|Gtk::FILL, 0, 0);
@@ -893,6 +906,72 @@ StateBLine_Context::run_()
                        }
                }
 
+               
///////////////////////////////////////////////////////////////////////////
+               //   A D V A N C E D   O U T L I N E
+               
///////////////////////////////////////////////////////////////////////////
+
+               if(get_layer_advanced_outline_flag())
+               {
+                       synfigapp::PushMode 
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
+
+                       Layer::Handle 
layer(get_canvas_interface()->add_layer_to("advanced_outline",canvas,depth));
+                       if (!layer)
+                       {
+                               group.cancel();
+                               throw String(_("Unable to create layer"));
+                       }
+                       layer_selection.push_back(layer);
+                       layer->set_description(get_id()+_(" Advanced Outline"));
+                       
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
+                       if(get_feather())
+                       {
+                               layer->set_param("feather",get_feather());
+                               
get_canvas_interface()->signal_layer_param_changed()(layer,"feather");
+                       }
+
+                       {
+                               synfigapp::Action::Handle 
action(synfigapp::Action::create("LayerParamConnect"));
+                               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("bline")))
+                                       synfig::error("LayerParamConnect didn't 
like \"param\"");
+                               
if(!action->set_param("value_node",ValueNode::Handle(value_node_bline)))
+                                       synfig::error("LayerParamConnect didn't 
like \"value_node\"");
+
+                               
if(!get_canvas_interface()->get_instance()->perform_action(action))
+                               {
+                                       group.cancel();
+                                       throw String(_("Unable to create 
Advanced Outline layer"));
+                                       return false;
+                               }
+                       }
+
+                       // only link the advanced outline'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("LayerParamConnect"));
+                               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))
+                               {
+                                       group.cancel();
+                                       throw String(_("Unable to create 
Advanced Outline layer"));
+                                       return false;
+                               }
+                       }
+               }
+
                egress_on_selection_change=false;
                
get_canvas_interface()->get_selection_manager()->clear_selected_layers();
                
get_canvas_interface()->get_selection_manager()->set_selected_layers(layer_selection);


------------------------------------------------------------------------------
Create and publish websites with WebMatrix
Use the most popular FREE web apps or write code yourself; 
WebMatrix provides all the features you need to develop and publish 
your website. http://p.sf.net/sfu/ms-webmatrix-sf
_______________________________________________
Synfig-devl mailing list
Synfig-devl@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to