X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fstate_draw.cpp;h=8bda933e37e12976d31ccb771bff5ab111791b2d;hb=63e709f66d50c124cc0ece2325f4773ac4ae7b20;hp=844b198f75f78020ab5f825068e5b489a360cebb;hpb=7c25b6ef895ea86838d17bef0e2f2c2f61dce4aa;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/state_draw.cpp b/synfig-studio/trunk/src/gtkmm/state_draw.cpp index 844b198..8bda933 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; @@ -521,10 +523,7 @@ StateDraw_Context::refresh_tool_options() )->signal_clicked().connect( sigc::mem_fun( *this, - &StateDraw_Context::fill_last_stroke - ) - ); - + &StateDraw_Context::fill_last_stroke)); } Smach::event_result @@ -589,7 +588,8 @@ StateDraw_Context::event_mouse_down_handler(const Smach::event& x) } case BUTTON_RIGHT: // Intercept the right-button click to short-circuit the pop-up menu - return Smach::RESULT_ACCEPT; + if (!getenv("SYNFIG_ENABLE_POPUP_MENU_IN_ALL_TOOLS")) + return Smach::RESULT_ACCEPT; default: return Smach::RESULT_OK; @@ -1001,8 +1001,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); @@ -1015,6 +1018,12 @@ StateDraw_Context::new_bline(std::list bline,bool loop_bline canvas=layer->get_canvas(); } + // 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()); synfigapp::PushMode push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL); @@ -1068,12 +1077,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(); - increment_id(); return Smach::RESULT_ACCEPT; } @@ -1519,7 +1522,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; @@ -1534,7 +1536,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); @@ -1544,7 +1545,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; @@ -1573,7 +1573,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); @@ -1589,7 +1588,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); @@ -1629,7 +1627,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 @@ -1660,7 +1656,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()); @@ -1676,7 +1671,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(), @@ -1691,7 +1685,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, @@ -1944,7 +1937,18 @@ StateDraw_Context::fill_last_stroke() synfigapp::PushMode push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL); - layer=get_canvas_interface()->add_layer("region"); + Canvas::Handle canvas(get_canvas_view()->get_canvas()); + int depth(0); + + layer=get_canvas_view()->get_selection_manager()->get_selected_layer(); + if(layer) + { + 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()); layer->set_description(last_stroke_id + _(" Region"));