bool on_vertex_change(const synfig::Point &point, synfig::ValueNode_Const::Handle value_node);
bool on_tangent1_change(const synfig::Point &point, synfig::ValueNode_Const::Handle value_node);
bool on_tangent2_change(const synfig::Point &point, synfig::ValueNode_Const::Handle value_node);
bool on_vertex_change(const synfig::Point &point, synfig::ValueNode_Const::Handle value_node);
bool on_tangent1_change(const synfig::Point &point, synfig::ValueNode_Const::Handle value_node);
bool on_tangent2_change(const synfig::Point &point, synfig::ValueNode_Const::Handle value_node);
void bline_delete_vertex(synfig::ValueNode_Const::Handle value_node);
void bline_insert_vertex(synfig::ValueNode_Const::Handle value_node,float origin=0.5);
void loop_bline();
void bline_delete_vertex(synfig::ValueNode_Const::Handle value_node);
void bline_insert_vertex(synfig::ValueNode_Const::Handle value_node,float origin=0.5);
void loop_bline();
Gtk::Button button_clear;
Gtk::Adjustment adj_feather;
Gtk::SpinButton spin_feather;
Gtk::Button button_clear;
Gtk::Adjustment adj_feather;
Gtk::SpinButton spin_feather;
bool get_auto_export_flag()const { return checkbutton_auto_export.get_active(); }
void set_auto_export_flag(bool x) { return checkbutton_auto_export.set_active(x); }
bool get_auto_export_flag()const { return checkbutton_auto_export.get_active(); }
void set_auto_export_flag(bool x) { return checkbutton_auto_export.set_active(x); }
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_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_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_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_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); }
Smach::event_result event_refresh_tool_options(const Smach::event& x);
Smach::event_result event_hijack(const Smach::event& x) { return Smach::RESULT_ACCEPT; }
Smach::event_result event_refresh_tool_options(const Smach::event& x);
Smach::event_result event_hijack(const Smach::event& x) { return Smach::RESULT_ACCEPT; }
synfig::Canvas::Handle get_canvas()const{return canvas_view_->get_canvas();}
WorkArea * get_work_area()const{return canvas_view_->get_work_area();}
const synfig::TransformStack& get_transform_stack()const { return canvas_view_->get_curr_transform_stack(); }
synfig::Canvas::Handle get_canvas()const{return canvas_view_->get_canvas();}
WorkArea * get_work_area()const{return canvas_view_->get_work_area();}
const synfig::TransformStack& get_transform_stack()const { return canvas_view_->get_curr_transform_stack(); }
bool no_egress_on_selection_change;
Smach::event_result event_layer_selection_changed_handler(const Smach::event& x)
{
bool no_egress_on_selection_change;
Smach::event_result event_layer_selection_changed_handler(const Smach::event& x)
{
insert(event_def(EVENT_WORKAREA_MOUSE_MOTION,&StateBLine_Context::event_mouse_motion_handler));
insert(event_def(EVENT_WORKAREA_MOUSE_BUTTON_DRAG,&StateBLine_Context::event_mouse_motion_handler));
insert(event_def(EVENT_REFRESH_TOOL_OPTIONS,&StateBLine_Context::event_refresh_tool_options));
insert(event_def(EVENT_WORKAREA_MOUSE_MOTION,&StateBLine_Context::event_mouse_motion_handler));
insert(event_def(EVENT_WORKAREA_MOUSE_BUTTON_DRAG,&StateBLine_Context::event_mouse_motion_handler));
insert(event_def(EVENT_REFRESH_TOOL_OPTIONS,&StateBLine_Context::event_refresh_tool_options));
sanity_check();
settings.set_value("bline.layer_bline",get_layer_bline_flag()?"1":"0");
settings.set_value("bline.layer_region",get_layer_region_flag()?"1":"0");
sanity_check();
settings.set_value("bline.layer_bline",get_layer_bline_flag()?"1":"0");
settings.set_value("bline.layer_region",get_layer_region_flag()?"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);
{
// 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);
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());
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());
// Add the number back onto the id
{
const String format(strprintf("%%0%dd",digits));
id+=strprintf(format.c_str(),number);
}
// Add the number back onto the id
{
const String format(strprintf("%%0%dd",digits));
id+=strprintf(format.c_str(),number);
}
- //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(*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(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(*manage(new Gtk::Label(_("Feather"))), 0, 1, 10, 11, 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(*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(spin_feather, 1, 2, 10, 11, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
- options_table.attach(checkbutton_auto_export, 0, 2, 11, 12, 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);
+ options_table.attach(checkbutton_auto_export, 0, 2, 11, 12, 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);
//button_make.signal_pressed().connect(sigc::mem_fun(*this,&StateBLine_Context::run));
options_table.show_all();
refresh_tool_options();
App::dialog_tool_options->present();
//button_make.signal_pressed().connect(sigc::mem_fun(*this,&StateBLine_Context::run));
options_table.show_all();
refresh_tool_options();
App::dialog_tool_options->present();
// Hide the tables if they are showing
prev_table_status=get_canvas_view()->tables_are_visible();
if(prev_table_status)get_canvas_view()->hide_tables();
// Hide the tables if they are showing
prev_table_status=get_canvas_view()->tables_are_visible();
if(prev_table_status)get_canvas_view()->hide_tables();
// Connect a signal
//get_work_area()->signal_user_click().connect(sigc::mem_fun(*this,&studio::StateBLine_Context::on_user_click));
get_canvas_view()->work_area->set_cursor(Gdk::CROSSHAIR);
// Connect a signal
//get_work_area()->signal_user_click().connect(sigc::mem_fun(*this,&studio::StateBLine_Context::on_user_click));
get_canvas_view()->work_area->set_cursor(Gdk::CROSSHAIR);
// Bring back the tables if they were out before
if(prev_table_status)get_canvas_view()->show_tables();
// get_canvas_view()->get_smach().process_event(EVENT_REFRESH_DUCKS);
// Bring back the tables if they were out before
if(prev_table_status)get_canvas_view()->show_tables();
// get_canvas_view()->get_smach().process_event(EVENT_REFRESH_DUCKS);
// Create the action group
synfigapp::Action::PassiveGrouper group(get_canvas_interface()->get_instance().get(),_("New BLine"));
std::vector<BLinePoint> new_list;
std::list<synfig::ValueNode_Const::Handle>::iterator iter;
const synfig::TransformStack& transform(get_transform_stack());
// Create the action group
synfigapp::Action::PassiveGrouper group(get_canvas_interface()->get_instance().get(),_("New BLine"));
std::vector<BLinePoint> new_list;
std::list<synfig::ValueNode_Const::Handle>::iterator iter;
const synfig::TransformStack& transform(get_transform_stack());
for(iter=bline_point_list.begin();iter!=bline_point_list.end();++iter)
{
BLinePoint bline_point((*iter)->get_value().get(BLinePoint()));
Point new_vertex(transform.unperform(bline_point.get_vertex()));
for(iter=bline_point_list.begin();iter!=bline_point_list.end();++iter)
{
BLinePoint bline_point((*iter)->get_value().get(BLinePoint()));
Point new_vertex(transform.unperform(bline_point.get_vertex()));
// Add the BLine to the canvas
if(get_auto_export_flag() && !get_canvas_interface()->add_value_node(value_node_bline,get_id()))
{
// Add the BLine to the canvas
if(get_auto_export_flag() && !get_canvas_interface()->add_value_node(value_node_bline,get_id()))
{
// we are temporarily using the layer to hold something
layer=get_canvas_view()->get_selection_manager()->get_selected_layer();
// we are temporarily using the layer to hold something
layer=get_canvas_view()->get_selection_manager()->get_selected_layer();
// If we were asked to create a region layer, go ahead and do so
if(get_layer_region_flag())
{
// If we were asked to create a region layer, go ahead and do so
if(get_layer_region_flag())
{
layer->set_param("feather",get_feather());
get_canvas_interface()->signal_layer_param_changed()(layer,"feather");
}
layer->set_param("feather",get_feather());
get_canvas_interface()->signal_layer_param_changed()(layer,"feather");
}
if(get_layer_bline_flag())
layer->set_param("color",synfigapp::Main::get_background_color());
if(get_layer_bline_flag())
layer->set_param("color",synfigapp::Main::get_background_color());
-
- action->set_param("canvas",get_canvas());
- action->set_param("canvas_interface",get_canvas_interface());
+
+ 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\"");
action->set_param("layer",layer);
if(!action->set_param("param",String("bline")))
synfig::error("LayerParamConnect didn't like \"param\"");
layer->set_param("feather",get_feather());
get_canvas_interface()->signal_layer_param_changed()(layer,"feather");
}
layer->set_param("feather",get_feather());
get_canvas_interface()->signal_layer_param_changed()(layer,"feather");
}
-
- action->set_param("canvas",get_canvas());
- action->set_param("canvas_interface",get_canvas_interface());
- action->set_param("layer",layer);
+
+ 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)))
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)))
// If we were asked to create a CurveGradient layer, go ahead and do so
if(get_layer_curve_gradient_flag())
{
// If we were asked to create a CurveGradient layer, go ahead and do so
if(get_layer_curve_gradient_flag())
{
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Gradient"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
layer_selection.push_back(layer);
layer->set_description(get_id()+_(" Gradient"));
get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
-
- action->set_param("canvas",get_canvas());
- action->set_param("canvas_interface",get_canvas_interface());
- action->set_param("layer",layer);
+
+ 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)))
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)))
get_canvas_interface()->get_selection_manager()->clear_selected_layers();
get_canvas_interface()->get_selection_manager()->set_selected_layers(layer_selection);
no_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);
no_egress_on_selection_change=false;
//if(finish_bline_dialog.get_region_flag() || finish_bline_dialog.get_bline_flag())
// get_canvas_interface()->signal_dirty_preview()();
//if(finish_bline_dialog.get_region_flag() || finish_bline_dialog.get_bline_flag())
// get_canvas_interface()->signal_dirty_preview()();
StateBLine_Context::event_mouse_motion_handler(const Smach::event& x)
{
const EventMouse& event(*reinterpret_cast<const EventMouse*>(&x));
StateBLine_Context::event_mouse_motion_handler(const Smach::event& x)
{
const EventMouse& event(*reinterpret_cast<const EventMouse*>(&x));
bline_point.set_vertex(get_work_area()->snap_point_to_grid(event.pos));
//bline_point.set_width(synfigapp::Main::get_bline_width());
bline_point.set_width(1.0f);
bline_point.set_origin(0.5f);
bline_point.set_split_tangent_flag(false);
bline_point.set_tangent1(Vector(0,0));
bline_point.set_vertex(get_work_area()->snap_point_to_grid(event.pos));
//bline_point.set_width(synfigapp::Main::get_bline_width());
bline_point.set_width(1.0f);
bline_point.set_origin(0.5f);
bline_point.set_split_tangent_flag(false);
bline_point.set_tangent1(Vector(0,0));
const Vector t(event.pos-bline_point_list.back()->get_value().get(BLinePoint()).get_vertex());
bline_point.set_tangent1(t);
}
const Vector t(event.pos-bline_point_list.back()->get_value().get(BLinePoint()).get_vertex());
bline_point.set_tangent1(t);
}
case BUTTON_RIGHT: // Intercept the right-button click to short-circut the pop-up menu
return Smach::RESULT_ACCEPT;
case BUTTON_RIGHT: // Intercept the right-button click to short-circut the pop-up menu
return Smach::RESULT_ACCEPT;
handle<WorkArea::Bezier> bezier;
handle<WorkArea::Duck> duck,tduck;
BLinePoint bline_point;
handle<WorkArea::Bezier> bezier;
handle<WorkArea::Duck> duck,tduck;
BLinePoint bline_point;
for(iter=bline_point_list.begin();iter!=bline_point_list.end();++iter)
{
ValueNode_Const::Handle value_node(*iter);
for(iter=bline_point_list.begin();iter!=bline_point_list.end();++iter)
{
ValueNode_Const::Handle value_node(*iter);
duck=new WorkArea::Duck(bline_point.get_vertex());
duck->set_editable(true);
duck->set_type(Duck::TYPE_VERTEX);
duck=new WorkArea::Duck(bline_point.get_vertex());
duck->set_editable(true);
duck->set_type(Duck::TYPE_VERTEX);
tduck->signal_user_click(2).connect(
sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::popup_handle_menu),value_node)
);
tduck->signal_user_click(2).connect(
sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::popup_handle_menu),value_node)
);
// If our next iterator is the end, then we don't need
// to add a bezier.
//if(next==bline_point_list.end() && !loop_)
// continue;
// If our next iterator is the end, then we don't need
// to add a bezier.
//if(next==bline_point_list.end() && !loop_)
// continue;
tduck->signal_user_click(2).connect(
sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::popup_handle_menu),value_node)
);
tduck->signal_user_click(2).connect(
sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::popup_handle_menu),value_node)
);
duck->signal_user_click(2).connect(
sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::popup_vertex_menu),bline_point_list.front())
);
duck->signal_user_click(2).connect(
sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::popup_vertex_menu),bline_point_list.front())
);
tduck->signal_user_click(2).connect(
sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::popup_handle_menu),bline_point_list.front())
);
tduck->signal_user_click(2).connect(
sigc::bind(sigc::mem_fun(*this,&studio::StateBLine_Context::popup_handle_menu),bline_point_list.front())
);
menu.items().push_back(Gtk::Menu_Helpers::MenuElem("Loop BLine",
sigc::mem_fun(*this,&studio::StateBLine_Context::loop_bline)
));
}
menu.items().push_back(Gtk::Menu_Helpers::MenuElem("Loop BLine",
sigc::mem_fun(*this,&studio::StateBLine_Context::loop_bline)
));
}
menu.items().push_back(Gtk::Menu_Helpers::MenuElem("Delete Vertex",
sigc::bind(
sigc::mem_fun(*this,&studio::StateBLine_Context::bline_delete_vertex),
menu.items().push_back(Gtk::Menu_Helpers::MenuElem("Delete Vertex",
sigc::bind(
sigc::mem_fun(*this,&studio::StateBLine_Context::bline_delete_vertex),
StateBLine_Context::bline_insert_vertex(synfig::ValueNode_Const::Handle value_node, float origin)
{
list<ValueNode_Const::Handle>::iterator iter;
StateBLine_Context::bline_insert_vertex(synfig::ValueNode_Const::Handle value_node, float origin)
{
list<ValueNode_Const::Handle>::iterator iter;
bline_point.set_tangent2(bline_point.get_tangent1());
bline_point.set_split_tangent_flag(false);
bline_point.set_origin(origin);
bline_point.set_tangent2(bline_point.get_tangent1());
bline_point.set_split_tangent_flag(false);
bline_point.set_origin(origin);
/*
bline_point.set_vertex((next_bline_point.get_vertex()+prev_bline_point.get_vertex())*0.5);
bline_point.set_width((next_bline_point.get_width()+prev_bline_point.get_width())*0.5);
/*
bline_point.set_vertex((next_bline_point.get_vertex()+prev_bline_point.get_vertex())*0.5);
bline_point.set_width((next_bline_point.get_width()+prev_bline_point.get_width())*0.5);
get_canvas_view()->get_ui_interface()->error("Unable to find where to insert vertex, internal error, please report this bug");
}
get_canvas_view()->get_ui_interface()->error("Unable to find where to insert vertex, internal error, please report this bug");
}
}
void
StateBLine_Context::bline_delete_vertex(synfig::ValueNode_Const::Handle value_node)
{
list<ValueNode_Const::Handle>::iterator iter;
}
void
StateBLine_Context::bline_delete_vertex(synfig::ValueNode_Const::Handle value_node)
{
list<ValueNode_Const::Handle>::iterator iter;
get_canvas_view()->get_ui_interface()->error("Unable to remove vertex, internal error, please report this bug");
}
get_canvas_view()->get_ui_interface()->error("Unable to remove vertex, internal error, please report this bug");
}