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