X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fstate_bline.cpp;h=0a010f19484cbb1e7aea60f209dbaa09caf57575;hb=756c0d29ac1742f231e6615f9a577e574e35a4af;hp=31dfddb000a0ce973b76385fdda93b460919f8f9;hpb=2d7ec5dd1deeb59cbca95344b76265577c894da4;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/state_bline.cpp b/synfig-studio/trunk/src/gtkmm/state_bline.cpp index 31dfddb..0a010f1 100644 --- a/synfig-studio/trunk/src/gtkmm/state_bline.cpp +++ b/synfig-studio/trunk/src/gtkmm/state_bline.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 @@ -114,8 +114,9 @@ class studio::StateBLine_Context : public sigc::trackable Gtk::Table options_table; Gtk::Entry entry_id; Gtk::CheckButton checkbutton_layer_region; - Gtk::CheckButton checkbutton_layer_bline; + Gtk::CheckButton checkbutton_layer_outline; Gtk::CheckButton checkbutton_layer_curve_gradient; + Gtk::CheckButton checkbutton_layer_plant; Gtk::CheckButton checkbutton_layer_link_offsets; Gtk::CheckButton checkbutton_auto_export; Gtk::Button button_make; @@ -130,9 +131,10 @@ public: int layers_to_create()const { return - get_layer_region_flag()+ - get_layer_bline_flag()+ - get_layer_curve_gradient_flag(); + get_layer_region_flag() + + get_layer_outline_flag() + + get_layer_curve_gradient_flag() + + get_layer_plant_flag(); } void sanity_check() @@ -147,12 +149,15 @@ public: bool get_layer_region_flag()const { return checkbutton_layer_region.get_active(); } void set_layer_region_flag(bool x) { return checkbutton_layer_region.set_active(x); } - bool get_layer_bline_flag()const { return checkbutton_layer_bline.get_active(); } - void set_layer_bline_flag(bool x) { return checkbutton_layer_bline.set_active(x); } + 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_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); } + bool get_layer_plant_flag()const { return checkbutton_layer_plant.get_active(); } + void set_layer_plant_flag(bool x) { return checkbutton_layer_plant.set_active(x); } + bool get_layer_link_offsets_flag()const { return checkbutton_layer_link_offsets.get_active(); } void set_layer_link_offsets_flag(bool x) { return checkbutton_layer_link_offsets.set_active(x); } @@ -234,16 +239,21 @@ StateBLine_Context::load_settings() else set_layer_region_flag(true); - if(settings.get_value("bline.layer_bline",value) && value=="0") - set_layer_bline_flag(false); + if(settings.get_value("bline.layer_outline",value) && value=="0") + set_layer_outline_flag(false); else - set_layer_bline_flag(true); + set_layer_outline_flag(true); if(settings.get_value("bline.layer_curve_gradient",value) && value=="1") set_layer_curve_gradient_flag(true); else set_layer_curve_gradient_flag(false); + if(settings.get_value("bline.layer_plant",value) && value=="1") + set_layer_plant_flag(true); + else + set_layer_plant_flag(false); + if(settings.get_value("bline.layer_link_offsets",value) && value=="0") set_layer_link_offsets_flag(false); else @@ -272,9 +282,10 @@ void StateBLine_Context::save_settings() { sanity_check(); - settings.set_value("bline.layer_bline",get_layer_bline_flag()?"1":"0"); + settings.set_value("bline.layer_outline",get_layer_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"); settings.set_value("bline.layer_link_offsets",get_layer_link_offsets_flag()?"1":"0"); settings.set_value("bline.auto_export",get_auto_export_flag()?"1":"0"); settings.set_value("bline.id",get_id().c_str()); @@ -305,7 +316,10 @@ StateBLine_Context::increment_id() if(id[id.size()-1]<='9' && id[id.size()-1]>='0') { // figure out how many digits it is - for(digits=0;(int)id.size()-1>=digits && id[id.size()-1-digits]<='9' && id[id.size()-1-digits]>='0';digits++)while(false); + for (digits = 0; + (int)id.size()-1 >= digits && id[id.size()-1-digits] <= '9' && id[id.size()-1-digits] >= '0'; + digits++) + ; String str_number; str_number=String(id,id.size()-digits,id.size()); @@ -342,8 +356,9 @@ StateBLine_Context::StateBLine_Context(CanvasView* canvas_view): settings(synfigapp::Main::get_selected_input_device()->settings()), entry_id(), checkbutton_layer_region(_("Fill")), - checkbutton_layer_bline(_("Outline")), + checkbutton_layer_outline(_("Outline")), checkbutton_layer_curve_gradient(_("Gradient")), + checkbutton_layer_plant(_("Plant")), checkbutton_layer_link_offsets(_("Link Offsets")), checkbutton_auto_export(_("Auto Export")), button_make(_("Make")), @@ -358,11 +373,12 @@ StateBLine_Context::StateBLine_Context(CanvasView* canvas_view): // Set up the tool options dialog //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_region, 0, 2, 2, 3, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); - options_table.attach(checkbutton_layer_bline, 0, 2, 3, 4, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); - options_table.attach(checkbutton_layer_curve_gradient, 0, 2, 4, 5, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); - options_table.attach(checkbutton_layer_link_offsets, 0, 2, 5, 6, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); - options_table.attach(checkbutton_auto_export, 0, 2, 6, 7, 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_offsets, 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(*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); @@ -586,28 +602,78 @@ StateBLine_Context::run_() synfigapp::SelectionManager::LayerList layer_selection; - // If we were asked to create a region layer, go ahead and do so - if(get_layer_region_flag()) + /////////////////////////////////////////////////////////////////////////// + // C U R V E G R A D I E N T + /////////////////////////////////////////////////////////////////////////// + + if(get_layer_curve_gradient_flag()) { synfigapp::PushMode push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL); - Layer::Handle layer(get_canvas_interface()->add_layer_to("region",canvas,depth)); + Layer::Handle layer(get_canvas_interface()->add_layer_to("curve_gradient",canvas,depth)); assert(layer); layer_selection.push_back(layer); - layer->set_description(get_id()+_(" Region")); + layer->set_description(get_id()+_(" Gradient")); 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("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("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)) + { + //get_canvas_view()->get_ui_interface()->error(_("Unable to create BLine layer")); + group.cancel(); + throw String(_("Unable to create Gradient layer")); + return false; + } } - if(get_layer_bline_flag()) - layer->set_param("color",synfigapp::Main::get_background_color()); + if (get_layer_link_offsets_flag()) + { + 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("offset"))) + synfig::error("LayerParamConnect didn't like \"param\""); + if(!action->set_param("value_node",ValueNode::Handle(value_node_offset))) + 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 BLine layer")); + group.cancel(); + throw String(_("Unable to create Gradient layer")); + return false; + } + } + } + + /////////////////////////////////////////////////////////////////////////// + // P L A N T + /////////////////////////////////////////////////////////////////////////// + + if(get_layer_plant_flag()) + { + synfigapp::PushMode push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL); + + Layer::Handle layer(get_canvas_interface()->add_layer_to("plant",canvas,depth)); + assert(layer); + layer_selection.push_back(layer); + layer->set_description(get_id()+_(" Plant")); + get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description()); - // I don't know if it's safe to reuse the same layer_param_connect action, so I'm - // using 2 separate ones. { synfigapp::Action::Handle action(synfigapp::Action::create("layer_param_connect")); assert(action); @@ -622,13 +688,14 @@ StateBLine_Context::run_() if(!get_canvas_interface()->get_instance()->perform_action(action)) { - //get_canvas_view()->get_ui_interface()->error(_("Unable to create Region layer")); + //get_canvas_view()->get_ui_interface()->error(_("Unable to create BLine layer")); group.cancel(); - throw String(_("Unable to create Region layer")); + throw String(_("Unable to create Plant layer")); return false; } } + // plants don't have offsets? if (get_layer_link_offsets_flag()) { synfigapp::Action::Handle action(synfigapp::Action::create("layer_param_connect")); @@ -644,30 +711,39 @@ StateBLine_Context::run_() if(!get_canvas_interface()->get_instance()->perform_action(action)) { - //get_canvas_view()->get_ui_interface()->error(_("Unable to create Region layer")); + //get_canvas_view()->get_ui_interface()->error(_("Unable to create BLine layer")); group.cancel(); - throw String(_("Unable to create Region layer")); + throw String(_("Unable to create Plant layer")); return false; } } } - // If we were asked to create a BLine layer, go ahead and do so - if(get_layer_bline_flag()) + /////////////////////////////////////////////////////////////////////////// + // R E G I O N + /////////////////////////////////////////////////////////////////////////// + + if(get_layer_region_flag()) { synfigapp::PushMode push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL); - Layer::Handle layer(get_canvas_interface()->add_layer_to("outline",canvas,depth)); + Layer::Handle layer(get_canvas_interface()->add_layer_to("region",canvas,depth)); assert(layer); layer_selection.push_back(layer); - layer->set_description(get_id()+_(" Outline")); + layer->set_description(get_id()+_(" Region")); 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"); } + if(get_layer_outline_flag()) + layer->set_param("color",synfigapp::Main::get_background_color()); + + // I don't know if it's safe to reuse the same layer_param_connect action, so I'm + // using 2 separate ones. { synfigapp::Action::Handle action(synfigapp::Action::create("layer_param_connect")); assert(action); @@ -682,9 +758,9 @@ StateBLine_Context::run_() if(!get_canvas_interface()->get_instance()->perform_action(action)) { - //get_canvas_view()->get_ui_interface()->error(_("Unable to create BLine layer")); + //get_canvas_view()->get_ui_interface()->error(_("Unable to create Region layer")); group.cancel(); - throw String(_("Unable to create Outline layer")); + throw String(_("Unable to create Region layer")); return false; } } @@ -704,31 +780,32 @@ StateBLine_Context::run_() if(!get_canvas_interface()->get_instance()->perform_action(action)) { - //get_canvas_view()->get_ui_interface()->error(_("Unable to create BLine layer")); + //get_canvas_view()->get_ui_interface()->error(_("Unable to create Region layer")); group.cancel(); - throw String(_("Unable to create Outline layer")); + throw String(_("Unable to create Region layer")); return false; } } - - /*if(get_layer_region_flag() && !get_auto_export_flag()) - { - get_canvas_interface()->auto_export(synfigapp::ValueDesc(layer,"bline")); - }*/ } + /////////////////////////////////////////////////////////////////////////// + // O U T L I N E + /////////////////////////////////////////////////////////////////////////// - - // If we were asked to create a CurveGradient layer, go ahead and do so - if(get_layer_curve_gradient_flag()) + if(get_layer_outline_flag()) { synfigapp::PushMode push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL); - Layer::Handle layer(get_canvas_interface()->add_layer_to("curve_gradient",canvas,depth)); + Layer::Handle layer(get_canvas_interface()->add_layer_to("outline",canvas,depth)); assert(layer); layer_selection.push_back(layer); - layer->set_description(get_id()+_(" Gradient")); + layer->set_description(get_id()+_(" 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("layer_param_connect")); @@ -746,7 +823,7 @@ StateBLine_Context::run_() { //get_canvas_view()->get_ui_interface()->error(_("Unable to create BLine layer")); group.cancel(); - throw String(_("Unable to create Gradient layer")); + throw String(_("Unable to create Outline layer")); return false; } } @@ -768,15 +845,10 @@ StateBLine_Context::run_() { //get_canvas_view()->get_ui_interface()->error(_("Unable to create BLine layer")); group.cancel(); - throw String(_("Unable to create Gradient layer")); + throw String(_("Unable to create Outline layer")); return false; } } - - /*if(get_layer_region_flag() && !get_auto_export_flag()) - { - get_canvas_interface()->auto_export(synfigapp::ValueDesc(layer,"bline")); - }*/ } egress_on_selection_change=false;