X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fstate_bline.cpp;h=cee1d8d5ef1676778312504bf20630871503c212;hb=003520b8158176c1509825eef09f46cd417dcc16;hp=9eadbfbb55b1311063a300cf87b149ef8a9a899c;hpb=0ae3e155c6ee0ba414613772063d16cce1c5427a;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/state_bline.cpp b/synfig-studio/trunk/src/gtkmm/state_bline.cpp index 9eadbfb..cee1d8d 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 @@ -64,6 +64,9 @@ using namespace studio; /* === M A C R O S ========================================================= */ +// if defined, show the first duck as green while drawing +#define DISTINGUISH_FIRST_DUCK + /* === G L O B A L S ======================================================= */ StateBLine studio::state_bline; @@ -324,7 +327,7 @@ StateBLine_Context::increment_id() String str_number; str_number=String(id,id.size()-digits,id.size()); id=String(id,0,id.size()-digits); - synfig::info("---------------- \"%s\"",str_number.c_str()); + // synfig::info("---------------- \"%s\"",str_number.c_str()); number=atoi(str_number.c_str()); } @@ -475,7 +478,7 @@ StateBLine_Context::~StateBLine_Context() Smach::event_result StateBLine_Context::event_stop_handler(const Smach::event& /*x*/) { - synfig::info("STATE RotoBLine: Received Stop Event"); +// synfig::info("STATE RotoBLine: Received Stop Event"); // run(); reset(); // throw Smach::egress_exception(); @@ -486,7 +489,7 @@ StateBLine_Context::event_stop_handler(const Smach::event& /*x*/) Smach::event_result StateBLine_Context::event_refresh_handler(const Smach::event& /*x*/) { - synfig::info("STATE RotoBLine: Received Refresh Event"); +// synfig::info("STATE RotoBLine: Received Refresh Event"); refresh_ducks(); return Smach::RESULT_ACCEPT; } @@ -600,6 +603,8 @@ StateBLine_Context::run_() if(!canvas) canvas=get_canvas_view()->get_canvas(); + value_node_bline->set_member_canvas(canvas); + synfigapp::SelectionManager::LayerList layer_selection; /////////////////////////////////////////////////////////////////////////// @@ -906,7 +911,7 @@ StateBLine_Context::event_mouse_release_handler(const Smach::event& /*x*/) Smach::event_result StateBLine_Context::event_mouse_click_handler(const Smach::event& x) { - synfig::info("STATE BLINE: Received mouse button down Event"); + // synfig::info("STATE BLINE: Received mouse button down Event"); const EventMouse& event(*reinterpret_cast(&x)); switch(event.button) { @@ -988,7 +993,12 @@ StateBLine_Context::refresh_ducks(bool button_down) // First add the duck associated with this vertex duck=new WorkArea::Duck(bline_point.get_vertex()); duck->set_editable(true); +#ifdef DISTINGUISH_FIRST_DUCK + if (iter!=bline_point_list.begin()) + duck->set_type(Duck::TYPE_VERTEX); +#else duck->set_type(Duck::TYPE_VERTEX); +#endif duck->set_name(strprintf("%x-vertex",value_node.get())); duck->signal_edited().connect( sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::on_vertex_change),value_node) @@ -996,7 +1006,7 @@ StateBLine_Context::refresh_ducks(bool button_down) duck->signal_user_click(2).connect( sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::popup_vertex_menu),value_node) ); - duck->set_guid(value_node->get_guid()^GUID::hasher(0)); + duck->set_guid(value_node->get_guid()^synfig::GUID::hasher(0)); get_work_area()->add_duck(duck); @@ -1007,7 +1017,7 @@ StateBLine_Context::refresh_ducks(bool button_down) tduck->set_origin(duck); tduck->set_scalar(-0.33333333333333333); tduck->set_tangent(true); - tduck->set_guid(value_node->get_guid()^GUID::hasher(3)); + tduck->set_guid(value_node->get_guid()^synfig::GUID::hasher(3)); tduck->signal_edited().connect( sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::on_tangent1_change),value_node) ); @@ -1070,7 +1080,7 @@ StateBLine_Context::refresh_ducks(bool button_down) sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::on_tangent1_change),value_node) ); } - tduck->set_guid(value_node->get_guid()^GUID::hasher(4)); + tduck->set_guid(value_node->get_guid()^synfig::GUID::hasher(4)); tduck->signal_user_click(2).connect( sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::popup_handle_menu),value_node) ); @@ -1091,6 +1101,9 @@ StateBLine_Context::refresh_ducks(bool button_down) duck=new WorkArea::Duck(bline_point.get_vertex()); duck->set_editable(true); +#ifndef DISTINGUISH_FIRST_DUCK + duck->set_type(Duck::TYPE_VERTEX); +#endif duck->set_name(strprintf("%x-vertex",bline_point_list.front().get())); duck->signal_edited().connect( sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::on_vertex_change),bline_point_list.front()) @@ -1134,12 +1147,12 @@ StateBLine_Context::refresh_ducks(bool button_down) if(bezier && !loop_) { duck=new WorkArea::Duck(bline_point.get_vertex()); - duck->set_editable(false); + duck->set_ignore(true); duck->set_name("temp"); // Add the tangent1 duck tduck=new WorkArea::Duck(Vector(0,0)); - tduck->set_editable(false); + tduck->set_ignore(true); tduck->set_name("ttemp"); tduck->set_origin(duck); tduck->set_scalar(-0.33333333333333333); @@ -1152,8 +1165,8 @@ StateBLine_Context::refresh_ducks(bool button_down) //get_work_area()->add_duck(bezier->c2); get_work_area()->add_bezier(bezier); - duck->set_guid(GUID()); - tduck->set_guid(GUID()); + duck->set_guid(synfig::GUID()); + tduck->set_guid(synfig::GUID()); next_duck=duck; } @@ -1271,36 +1284,29 @@ StateBLine_Context::bline_insert_vertex(synfig::ValueNode_Const::Handle value_no for(iter=bline_point_list.begin();iter!=bline_point_list.end();++iter) if(*iter==value_node) { - list::iterator prev(iter); - --prev; - BLinePoint bline_point; - BLinePoint next_bline_point((*iter)->get_value().get(BLinePoint())); BLinePoint prev_bline_point; - if(iter!=bline_point_list.begin()) - { - prev_bline_point=(*prev)->get_value().get(BLinePoint()); - } - else + list::iterator prev(iter); + if(iter==bline_point_list.begin()) { - prev_bline_point.set_vertex(Point(0,0)); - prev_bline_point.set_width(next_bline_point.get_width()); - prev_bline_point.set_origin(0.5); - prev_bline_point.set_split_tangent_flag(false); + assert(loop_); + prev = bline_point_list.end(); } + prev--; + + prev_bline_point=(*prev)->get_value().get(BLinePoint()); - etl::hermite curve(prev_bline_point.get_vertex(),next_bline_point.get_vertex(),prev_bline_point.get_tangent2(),next_bline_point.get_tangent1()); + etl::hermite curve(prev_bline_point.get_vertex(), + next_bline_point.get_vertex(), + prev_bline_point.get_tangent2(), + next_bline_point.get_tangent1()); etl::derivative< etl::hermite > deriv(curve); bline_point.set_vertex(curve(origin)); bline_point.set_width((next_bline_point.get_width()-prev_bline_point.get_width())*origin+prev_bline_point.get_width()); -#ifdef ETL_FIXED_DERIVATIVE bline_point.set_tangent1(deriv(origin)*std::min(1.0f-origin,origin)); -#else - bline_point.set_tangent1(-deriv(origin)*std::min(1.0f-origin,origin)); -#endif bline_point.set_tangent2(bline_point.get_tangent1()); bline_point.set_split_tangent_flag(false); bline_point.set_origin(origin);