Author: Carlos Lopez <[email protected]>
Date: Fri Oct 7 21:25:46 2011 +0200
Add basic support for Draw Tool to create Advanced Outlines. Extend doesn't
work yet.
---
synfig-studio/src/gui/states/state_draw.cpp | 163 +++++++++++++++++++-------
1 files changed, 119 insertions(+), 44 deletions(-)
diff --git a/synfig-studio/src/gui/states/state_draw.cpp
b/synfig-studio/src/gui/states/state_draw.cpp
index bb287ae..4e4ae51 100644
--- a/synfig-studio/src/gui/states/state_draw.cpp
+++ b/synfig-studio/src/gui/states/state_draw.cpp
@@ -44,6 +44,7 @@
#include "workarea.h"
#include "app.h"
#include <synfig/valuenode_bline.h>
+#include <synfig/valuenode_wplist.h>
#include <synfig/valuenode_composite.h>
#include <ETL/hermite>
#include <ETL/calculus>
@@ -119,8 +120,7 @@ class studio::StateDraw_Context : public sigc::trackable
void fill_last_stroke();
Smach::event_result fill_last_stroke_and_unselect_other_layers();
- Smach::event_result new_bline(std::list<synfig::BLinePoint> bline,bool
loop_bline_flag,float radius);
-
+ Smach::event_result new_bline(std::list<synfig::BLinePoint> bline,
std::list<synfig::WidthPoint> wplist, bool loop_bline_flag,float radius);
Smach::event_result new_region(std::list<synfig::BLinePoint>
bline,synfig::Real radius);
Smach::event_result extend_bline_from_begin(ValueNode_BLine::Handle
value_node,std::list<synfig::BLinePoint> bline,bool complete_loop);
@@ -764,7 +764,11 @@ StateDraw_Context::process_stroke(StrokeData stroke_data,
WidthData width_data,
}
blineconv(bline,*stroke_data,*width_data);
- wplistconv(wplist, *stroke_data,*width_data);
+ if(get_advanced_outline_flag())
+ {
+ wplistconv.err2max=get_width_max_error();
+ wplistconv(wplist, *stroke_data,*width_data);
+ }
// print out resutls
synfig::info("-----------widths");
std::list<synfig::WidthPoint>::iterator iter;
@@ -779,6 +783,8 @@ StateDraw_Context::process_stroke(StrokeData stroke_data,
WidthData width_data,
if(get_min_pressure_flag())
{
synfigapp::BLineConverter::EnforceMinWidth(bline,get_min_pressure());
+ if(get_advanced_outline_flag())
+
synfigapp::WPListConverter::EnforceMinWidth(wplist,get_min_pressure());
}
// If the start and end points are similar, then make them the same
point
@@ -834,11 +840,11 @@ StateDraw_Context::process_stroke(StrokeData stroke_data,
WidthData width_data,
if(region_flag)
return new_region(bline,radius);
- return new_bline(bline,loop_bline_flag,radius);
+ return new_bline(bline,wplist,loop_bline_flag,radius);
}
Smach::event_result
-StateDraw_Context::new_bline(std::list<synfig::BLinePoint> bline,bool
loop_bline_flag,float radius)
+StateDraw_Context::new_bline(std::list<synfig::BLinePoint>
bline,std::list<synfig::WidthPoint> wplist,bool loop_bline_flag,float radius)
{
synfigapp::SelectionManager::LayerList layer_list =
get_canvas_view()->get_selection_manager()->get_selected_layers();
@@ -1092,20 +1098,20 @@
StateDraw_Context::new_bline(std::list<synfig::BLinePoint> bline,bool loop_bline
{
// Create the layer(s)
- Layer::Handle layer;
+ Layer::Handle layer, layer2, somelayer;
Canvas::Handle canvas(get_canvas_view()->get_canvas());
int depth(0);
// we are temporarily using the layer to hold something
-
layer=get_canvas_view()->get_selection_manager()->get_selected_layer();
- if(layer)
+
somelayer=get_canvas_view()->get_selection_manager()->get_selected_layer();
+ if(somelayer)
{
- depth=layer->get_depth();
- canvas=layer->get_canvas();
+ depth=somelayer->get_depth();
+ canvas=somelayer->get_canvas();
}
// fill_last_stroke() will take care of clearing the selection
if we're calling it
- if(get_outline_flag() && get_region_flag())
+ if((get_outline_flag() || get_advanced_outline_flag()) &&
get_region_flag())
{
if (fill_last_stroke_and_unselect_other_layers() ==
Smach::RESULT_ERROR)
{
@@ -1123,17 +1129,32 @@
StateDraw_Context::new_bline(std::list<synfig::BLinePoint> bline,bool loop_bline
synfigapp::PushMode
push_mode(get_canvas_interface(),synfigapp::MODE_NORMAL);
// if they're both defined, we'll add the region later
- if(get_outline_flag())
+ if(get_outline_flag() || get_advanced_outline_flag())
{
-
layer=get_canvas_interface()->add_layer_to("outline",canvas,depth);
- if (!layer)
+ if(get_outline_flag())
{
-
get_canvas_view()->get_selection_manager()->set_selected_layers(layer_list);
-
get_canvas_view()->get_ui_interface()->error(_("Unable to create layer"));
- group.cancel();
- return Smach::RESULT_ERROR;
+
layer=get_canvas_interface()->add_layer_to("outline",canvas,depth);
+ if (!layer)
+ {
+
get_canvas_view()->get_selection_manager()->set_selected_layers(layer_list);
+
get_canvas_view()->get_ui_interface()->error(_("Unable to create layer"));
+ group.cancel();
+ return Smach::RESULT_ERROR;
+ }
+ layer->set_description(get_id()+_(" Outline"));
+ }
+ if(get_advanced_outline_flag())
+ {
+
layer2=get_canvas_interface()->add_layer_to("advanced_outline",canvas,depth);
+ if (!layer2)
+ {
+
get_canvas_view()->get_selection_manager()->set_selected_layers(layer_list);
+
get_canvas_view()->get_ui_interface()->error(_("Unable to create layer"));
+ group.cancel();
+ return Smach::RESULT_ERROR;
+ }
+ layer2->set_description(get_id()+_(" Advanced
Outline"));
}
- layer->set_description(get_id()+_(" Outline"));
}
else
{
@@ -1150,42 +1171,96 @@
StateDraw_Context::new_bline(std::list<synfig::BLinePoint> bline,bool loop_bline
if(get_feather())
{
- layer->set_param("feather",get_feather());
-
get_canvas_interface()->signal_layer_param_changed()(layer,"feather");
+ if(layer)
+ {
+ layer->set_param("feather",get_feather());
+
get_canvas_interface()->signal_layer_param_changed()(layer,"feather");
+ }
+ if(get_advanced_outline_flag())
+ {
+ layer2->set_param("feather",get_feather());
+
get_canvas_interface()->signal_layer_param_changed()(layer2,"feather");
+ }
+
}
- assert(layer);
+ if(get_outline_flag()) assert(layer);
+ if(get_advanced_outline_flag()) assert(layer2);
//layer->set_description(strprintf("Stroke %d",number));
//get_canvas_interface()->signal_layer_new_description()(layer,layer->get_description());
if (shift_origin)
+ {
get_canvas_interface()->
change_value(synfigapp::ValueDesc(layer,"origin"),shift_origin_vector);
-
- synfigapp::Action::Handle
action(synfigapp::Action::create("LayerParamConnect"));
-
- 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)))
- synfig::error("LayerParamConnect didn't like
\"value_node\"");
-
-
if(!get_canvas_interface()->get_instance()->perform_action(action))
+ if(get_advanced_outline_flag())
+ get_canvas_interface()->
+
change_value(synfigapp::ValueDesc(layer2,"origin"),shift_origin_vector);
+ }
+ // Regular Outline or Region
+ if(layer)
{
- get_canvas_view()->get_ui_interface()->error(_("Unable
to create layer"));
- group.cancel();
- increment_id();
- //refresh_ducks();
- return Smach::RESULT_ERROR;
+ synfigapp::Action::Handle
action(synfigapp::Action::create("LayerParamConnect"));
+ 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)))
+ 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 layer"));
+ group.cancel();
+ increment_id();
+ //refresh_ducks();
+ return Smach::RESULT_ERROR;
+ }
+ layer_list.push_back(layer);
+ }
+ // Advanced Outline
+ if(layer2)
+ {
+ synfigapp::Action::Handle
action2(synfigapp::Action::create("LayerParamConnect"));
+ assert(action2);
+ ValueNode_WPList::Handle value_node_wplist;
+
value_node_wplist=ValueNode_WPList::create(synfig::ValueBase(wplist));
+ if(value_node_wplist)
value_node_wplist->set_member_canvas(get_canvas());
+ action2->set_param("canvas",get_canvas());
+
action2->set_param("canvas_interface",get_canvas_interface());
+ action2->set_param("layer", layer2);
+ action2->set_param("param", String("wplist"));
+ action2->set_param("value_node",
ValueNode::Handle(value_node_wplist));
+
if(!get_canvas_interface()->get_instance()->perform_action(action2))
+ {
+
get_canvas_view()->get_ui_interface()->error(_("Unable to create layer"));
+ group.cancel();
+ increment_id();
+ //refresh_ducks();
+ return Smach::RESULT_ERROR;
+ }
+ synfigapp::Action::Handle
action3(synfigapp::Action::create("LayerParamConnect"));
+ assert(action3);
+ action3->set_param("canvas",get_canvas());
+
action3->set_param("canvas_interface",get_canvas_interface());
+ action3->set_param("layer", layer2);
+ if(!action3->set_param("param",String("bline")))
+ synfig::error("LayerParamConnect didn't like
\"param\"");
+
if(!action3->set_param("value_node",ValueNode::Handle(value_node)))
+ synfig::error("LayerParamConnect didn't like
\"value_node\"");
+
if(!get_canvas_interface()->get_instance()->perform_action(action3))
+ {
+
get_canvas_view()->get_ui_interface()->error(_("Unable to create layer"));
+ group.cancel();
+ increment_id();
+ //refresh_ducks();
+ return Smach::RESULT_ERROR;
+ }
+ layer_list.push_back(layer2);
}
- layer_list.push_back(layer);
get_canvas_view()->get_selection_manager()->set_selected_layers(layer_list);
- //refresh_ducks();
}
-
increment_id();
return Smach::RESULT_ACCEPT;
}
------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2dcopy2
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl