Author: Carlos Lopez <[email protected]>
Date: Thu Jul 28 09:47:03 2011 +0200
Add new parameter 'DIList' (Dash Items List) to Advanced Outline Layer
---
.../src/modules/mod_geometry/advanced_outline.cpp | 73 +++++++++++++++++++-
.../src/modules/mod_geometry/advanced_outline.h | 2 +
synfig-studio/src/synfigapp/canvasinterface.cpp | 9 +++
3 files changed, 83 insertions(+), 1 deletions(-)
diff --git a/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
b/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
index adbc4d8..a57b9e9 100644
--- a/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
+++ b/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
@@ -45,6 +45,7 @@
#include <synfig/valuenode_bline.h>
#include <synfig/valuenode_wplist.h>
+#include <synfig/valuenode_dilist.h>
#include <synfig/valuenode_composite.h>
#endif
@@ -104,6 +105,9 @@ Advanced_Outline::Advanced_Outline()
wpoint_list[0].set_side_type_before(WidthPoint::TYPE_INTERPOLATE);
wpoint_list[1].set_side_type_after(WidthPoint::TYPE_INTERPOLATE);
wplist_=wpoint_list;
+ vector<DashItem> ditem_list;
+ ditem_list.push_back(DashItem());
+ dilist_=ditem_list;
Layer::Vocab voc(get_param_vocab());
Layer::fill_static(voc);
}
@@ -518,6 +522,11 @@ Advanced_Outline::set_param(const String & param, const
ValueBase &value)
wplist_=value;
return true;
}
+ if(param=="dilist" && value.get_type()==ValueBase::TYPE_LIST)
+ {
+ dilist_=value;
+ return true;
+ }
if(param=="vector_list")
return false;
return Layer_Polygon::set_param(param,value);
@@ -548,6 +557,7 @@ Advanced_Outline::get_param(const String& param)const
EXPORT_AS(end_tip_,"end_tip");
EXPORT_AS(width_, "width");
EXPORT_AS(wplist_, "wplist");
+ EXPORT_AS(dilist_, "dilist");
EXPORT_NAME();
EXPORT_VERSION();
if(param=="vector_list")
@@ -612,17 +622,24 @@ Advanced_Outline::get_param_vocab()const
.set_origin("origin")
.set_description(_("List of width Points that defines the
variable width"))
);
+ ret.push_back(ParamDesc("dilist")
+ .set_local_name(_("Dash Item List"))
+ .set_hint("dash")
+ .set_origin("origin")
+ .set_description(_("List of dash items that defines the dashed
outline"))
+ );
return ret;
}
bool
Advanced_Outline::connect_dynamic_param(const String& param,
etl::loose_handle<ValueNode> x)
{
- //synfig::info("attempting to connect %s", param.c_str());
if(param=="bline")
{
if(!connect_bline_to_wplist(x))
synfig::warning("Advanced Outline: WPList doesn't
accept new bline");
+ if(!connect_bline_to_dilist(x))
+ synfig::warning("Advanced Outline: DIList doesn't
accept new bline");
}
if(param=="wplist")
{
@@ -644,6 +661,27 @@ Advanced_Outline::connect_dynamic_param(const String&
param, etl::loose_handle<V
else
return false;
}
+ if(param=="dilist")
+ {
+ if(Layer::connect_dynamic_param(param, x))
+ {
+ DynamicParamList::const_iterator
iter(dynamic_param_list().find("bline"));
+ if(iter==dynamic_param_list().end())
+ {
+ synfig::warning("BLine doesn't exist yet!!");
+ return false;
+ }
+ else if(!connect_bline_to_dilist(iter->second))
+ {
+ synfig::warning("Advanced Outline: DIList
doesn't accept new bline");
+ return false;
+ }
+ return true;
+ }
+ else
+ return false;
+ }
+
return Layer::connect_dynamic_param(param, x);
}
@@ -680,6 +718,39 @@
Advanced_Outline::connect_bline_to_wplist(etl::loose_handle<ValueNode> x)
return true;
}
+bool
+Advanced_Outline::connect_bline_to_dilist(etl::loose_handle<ValueNode> x)
+{
+ if(x->get_type() != ValueBase::TYPE_LIST)
+ {
+ synfig::info("Not a list");
+ return false;
+ }
+ if((*x)(Time(0)).get_list().front().get_type() !=
ValueBase::TYPE_BLINEPOINT)
+ {
+ synfig::info("No blinepoints!");
+ return false;
+ }
+ ValueNode::LooseHandle vnode;
+ DynamicParamList::const_iterator
iter(dynamic_param_list().find("dilist"));
+ if(iter==dynamic_param_list().end())
+ {
+ synfig::warning("DIList doesn't exist yet");
+ return false;
+ }
+ ValueNode_DIList::Handle
dilist(ValueNode_DIList::Handle::cast_dynamic(iter->second));
+ if(!dilist)
+ {
+ synfig::info("DIList is not ready: NULL");
+ return false;
+ }
+ if(!dilist->link_count())
+ synfig::warning("Advanced_Outline::connect_bline_to_dilist:
DIList::link_count()=0");
+ dilist->set_bline(ValueNode::Handle(x));
+ synfig::info("success dlilist");
+ return true;
+}
+
Real
Advanced_Outline::bline_to_bezier(Real bline_pos, Real origin, Real
bezier_size)
diff --git a/synfig-core/src/modules/mod_geometry/advanced_outline.h
b/synfig-core/src/modules/mod_geometry/advanced_outline.h
index d4702f3..3543197 100644
--- a/synfig-core/src/modules/mod_geometry/advanced_outline.h
+++ b/synfig-core/src/modules/mod_geometry/advanced_outline.h
@@ -51,6 +51,7 @@ private:
synfig::ValueBase bline_;
synfig::ValueBase wplist_;
+ synfig::ValueBase dilist_;
WidthPoint::SideType start_tip_;
WidthPoint::SideType end_tip_;
int cusp_type_;
@@ -81,6 +82,7 @@ public:
private:
bool connect_bline_to_wplist(etl::loose_handle<ValueNode> x);
+ bool connect_bline_to_dilist(etl::loose_handle<ValueNode> x);
Real bline_to_bezier(Real bline_pos, Real origin, Real bezier_size);
Real bezier_to_bline(Real bezier_pos, Real origin, Real bezier_size);
void add_tip(std::vector<Point> &side_a, std::vector<Point> &side_b,
const Point vertex, const Vector tangent, const WidthPoint wp);
diff --git a/synfig-studio/src/synfigapp/canvasinterface.cpp
b/synfig-studio/src/synfigapp/canvasinterface.cpp
index 01947e9..6d76295 100644
--- a/synfig-studio/src/synfigapp/canvasinterface.cpp
+++ b/synfig-studio/src/synfigapp/canvasinterface.cpp
@@ -45,6 +45,7 @@
#include <synfig/valuenode_stripes.h>
#include <synfig/valuenode_bline.h>
#include <synfig/valuenode_wplist.h>
+#include <synfig/valuenode_dilist.h>
#include <synfig/waypoint.h>
#include <synfig/loadcanvas.h>
@@ -269,6 +270,14 @@ CanvasInterface::add_layer_to(synfig::String name,
synfig::Canvas::Handle canvas
value_node=LinkableValueNode::create("wplist",iter->second);
ValueNode_WPList::Handle::cast_dynamic(value_node)->set_member_canvas(canvas);
}
+ for (iter2 = list.begin(); iter2 !=
list.end(); iter2++)
+ if (iter2->get_type() !=
ValueBase::TYPE_DASHITEM)
+ break;
+ if (iter2 == list.end())
+ {
+
value_node=LinkableValueNode::create("dilist",iter->second);
+
ValueNode_DIList::Handle::cast_dynamic(value_node)->set_member_canvas(canvas);
+ }
}
// it has something else so just insert the
dynamic list
if (!value_node)
------------------------------------------------------------------------------
Got Input? Slashdot Needs You.
Take our quick survey online. Come on, we don't ask for help often.
Plus, you'll get a chance to win $100 to spend on ThinkGeek.
http://p.sf.net/sfu/slashdot-survey
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl