X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fstate_draw.cpp;h=b8c90f325318f3dff6be7ae580ed06545f9ff3a4;hb=1c747ab2650db927deca6f1a5e9d14100f65ed8b;hp=1b68e0fe222e487b08e548f2420c59824a1e5b72;hpb=72a80236bc170c6eb8b6d0462badc7244bd85dd3;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/state_draw.cpp b/synfig-studio/trunk/src/gtkmm/state_draw.cpp index 1b68e0f..b8c90f3 100644 --- a/synfig-studio/trunk/src/gtkmm/state_draw.cpp +++ b/synfig-studio/trunk/src/gtkmm/state_draw.cpp @@ -62,6 +62,8 @@ #include #include +#include "general.h" + #endif /* === U S I N G =========================================================== */ @@ -97,7 +99,7 @@ class studio::StateDraw_Context : public sigc::trackable bool prev_workarea_layer_status_; int nested; - SigC::Connection process_queue_connection; + sigc::connection process_queue_connection; ValueNode_BLine::Handle last_stroke; synfig::String last_stroke_id; @@ -112,7 +114,7 @@ class studio::StateDraw_Context : public sigc::trackable Duckmatic::Type old_duckmask; - void fill_last_stroke(int depth_offset); + void fill_last_stroke(); Smach::event_result new_bline(std::list bline,bool loop_bline_flag,float radius); @@ -366,7 +368,10 @@ StateDraw_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()); @@ -448,7 +453,7 @@ StateDraw_Context::StateDraw_Context(CanvasView* canvas_view): //options_table.attach(button_fill_last_stroke, 0, 2, 13, 14, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0); - button_fill_last_stroke.signal_pressed().connect(sigc::bind(sigc::mem_fun(*this,&StateDraw_Context::fill_last_stroke), 0)); + button_fill_last_stroke.signal_pressed().connect(sigc::mem_fun(*this,&StateDraw_Context::fill_last_stroke)); check_localerror.signal_toggled().connect(sigc::mem_fun(*this,&StateDraw_Context::UpdateErrorBox)); options_table.show_all(); @@ -519,11 +524,9 @@ StateDraw_Context::refresh_tool_options() Gtk::StockID("synfig-fill"), _("Fill Last Stroke") )->signal_clicked().connect( - sigc::bind( - sigc::mem_fun( - *this, - &StateDraw_Context::fill_last_stroke), - 0)); + sigc::mem_fun( + *this, + &StateDraw_Context::fill_last_stroke)); } Smach::event_result @@ -822,6 +825,7 @@ StateDraw_Context::new_bline(std::list bline,bool loop_bline // don't extend looped blines if(finish_duck_value_node_bline&&!finish_duck_value_node_bline->get_loop()&& (finish_duck_index==0||finish_duck_index==finish_duck_value_node_bline->link_count()-1)) + { if(extend_start) { // we've started and finished drawing at the end of a bline. we can't @@ -834,6 +838,7 @@ StateDraw_Context::new_bline(std::list bline,bool loop_bline shift_offset=true; shift_offset_vector=finish_duck->get_origin(); } + } }while(0); // if the new line's start didn't extend an existing line, @@ -1001,8 +1006,11 @@ StateDraw_Context::new_bline(std::list bline,bool loop_bline } } - // Create the layer + last_stroke=value_node; + last_stroke_id=get_id(); + { + // Create the layer(s) Layer::Handle layer; Canvas::Handle canvas(get_canvas_view()->get_canvas()); int depth(0); @@ -1014,7 +1022,12 @@ StateDraw_Context::new_bline(std::list bline,bool loop_bline depth=layer->get_depth(); canvas=layer->get_canvas(); } - get_canvas_interface()->get_selection_manager()->clear_selected_layers(); + + // fill_last_stroke() will take care of clearing the selection if we're calling it + if(get_outline_flag() && get_region_flag()) + fill_last_stroke(); + else + get_canvas_interface()->get_selection_manager()->clear_selected_layers(); //int number(synfig::UniqueID().get_uid()); @@ -1069,12 +1082,6 @@ StateDraw_Context::new_bline(std::list bline,bool loop_bline //refresh_ducks(); } - last_stroke=value_node; - last_stroke_id=get_id(); - - if(get_outline_flag() && get_region_flag()) - fill_last_stroke(1); - increment_id(); return Smach::RESULT_ACCEPT; } @@ -1230,10 +1237,12 @@ debug_show_vertex_list(int iteration, std::list& vertex_li { if (started) printf(", "); else started = true; if (start != -1) + { if (dir != 0) printf("%d--%d", start, prev); else printf("%d", start); + } printf(")"); } printf("\n"); @@ -1386,12 +1395,14 @@ StateDraw_Context::new_region(std::list bline, synfig::Real this_index = iter->get_index(); // printf("index went from %d to %d\n", last_index, this_index); if (looped) + { if (this_index - last_index > points_in_line/2) while (this_index - last_index > points_in_line/2) this_index -= points_in_line; else if (last_index - this_index > points_in_line/2) while (last_index - this_index > points_in_line/2) this_index += points_in_line; + } if (this_index < min_index) min_index = this_index; if (this_index > max_index) max_index = this_index; @@ -1520,7 +1531,6 @@ StateDraw_Context::new_region(std::list bline, synfig::Real if(value_prev.get_parent_value_node()==value_next.get_parent_value_node() && value_prev.get_parent_value_node()!=value_desc.get_parent_value_node()) { - DEBUGPOINT(); vertex_list.erase(iter); done=false; break; @@ -1535,7 +1545,6 @@ StateDraw_Context::new_region(std::list bline, synfig::Real // if(value_prev.get_value_node()==value_desc.get_value_node() || // value_desc.get_value_node()==value_next.get_value_node()) // { - // // DEBUGPOINT(); // vertex_list.erase(iter); // done=false; // printf("erased node - i = %d\n", i); @@ -1545,7 +1554,6 @@ StateDraw_Context::new_region(std::list bline, synfig::Real // // if previous is the same as next, remove previous? or next? // if(value_prev.get_value_node()==value_next.get_value_node()) // { - // // DEBUGPOINT(); // vertex_list.erase(next); // // vertex_list.erase(prev); // done=false; @@ -1574,7 +1582,6 @@ StateDraw_Context::new_region(std::list bline, synfig::Real // strprintf("same parent, different points this %d < next-1 %d", // value_desc.get_index(), ((value_next.get_index()-1))), // current); - // // DEBUGPOINT(); // for (int index = value_desc.get_index()+1; index < value_next.get_index(); index++) // { // printf("inserting up %d\n", index); @@ -1590,7 +1597,6 @@ StateDraw_Context::new_region(std::list bline, synfig::Real // strprintf("same parent, different points next %d < this-1 %d", // value_next.get_index(), ((value_desc.get_index()-1))), // current); - // // DEBUGPOINT(); // for (int index = value_desc.get_index()-1; index > value_next.get_index(); index--) // { // printf("inserting down %d\n", index); @@ -1630,7 +1636,6 @@ StateDraw_Context::new_region(std::list bline, synfig::Real if((vertex.get_vertex()-vertex_next.get_vertex()).mag_squared() bline, synfig::Real synfig::info(__FILE__":%d: Unable to properly connect blines.",__LINE__); continue; } - // DEBUGPOINT(); // \todo if next isn't split, don't we want to copy its 'Tangent 1' instead? value_node->set_link(5,value_node_next->get_link(5)); // Tangent 2 value_node->set_link(3,ValueNode_Const::create(true)); // Split Tangents @@ -1661,7 +1665,6 @@ StateDraw_Context::new_region(std::list bline, synfig::Real else if (value_prev.parent_is_value_node()) { printf("in two - it's far\n"); - // DEBUGPOINT(); // \todo this only makes sense if prev is on the same bline printf("this is index %d\n", value_desc.get_index()); printf("prev is index %d\n", value_prev.get_index()); @@ -1677,7 +1680,6 @@ StateDraw_Context::new_region(std::list bline, synfig::Real if (value_desc.get_index()link_count()-1) { printf("in two - b\n"); - // DEBUGPOINT(); printf("inserting node with index %d\n", value_desc.get_index()+1); vertex_list.insert(next, synfigapp::ValueDesc(value_desc.get_parent_value_node(), @@ -1692,7 +1694,6 @@ StateDraw_Context::new_region(std::list bline, synfig::Real if(value_desc.get_index()>0) { printf("in two - a\n"); - // DEBUGPOINT(); printf("inserting node on this line with index %d\n", value_desc.get_index()-1); vertex_list.insert(next, @@ -1932,7 +1933,7 @@ StateDraw_Context::reverse_bline(std::list &bline) } void -StateDraw_Context::fill_last_stroke(int depth_offset) +StateDraw_Context::fill_last_stroke() { if(!last_stroke) return; @@ -1951,10 +1952,11 @@ StateDraw_Context::fill_last_stroke(int depth_offset) layer=get_canvas_view()->get_selection_manager()->get_selected_layer(); if(layer) { - depth=layer->get_depth() + depth_offset; + depth=layer->get_depth(); canvas=layer->get_canvas(); } + get_canvas_interface()->get_selection_manager()->clear_selected_layers(); layer=get_canvas_interface()->add_layer_to("region", canvas, depth); assert(layer); layer->set_param("color",synfigapp::Main::get_background_color());