Author: Carlos Lopez <[email protected]>
Date: Mon Jan 2 21:06:14 2012 +0100
Add new interpolation type. Non functional yet
---
synfig-core/src/synfig/interpolation.h | 16 +++++++-----
synfig-core/src/synfig/loadcanvas.cpp | 6 ++++-
synfig-core/src/synfig/savecanvas.cpp | 8 +++++-
synfig-studio/src/gui/canvasview.cpp | 12 ++++++++-
synfig-studio/src/gui/widgets/widget_defaults.cpp | 4 ++-
.../src/gui/widgets/widget_timeslider.cpp | 25 ++++++++++++++++++++
6 files changed, 60 insertions(+), 11 deletions(-)
diff --git a/synfig-core/src/synfig/interpolation.h
b/synfig-core/src/synfig/interpolation.h
index 63f2ee6..d862123 100644
--- a/synfig-core/src/synfig/interpolation.h
+++ b/synfig-core/src/synfig/interpolation.h
@@ -7,6 +7,7 @@
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
** Copyright (c) 2007, 2008 Chris Moore
+** Copyright (c) 2012, Carlos López
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
@@ -38,13 +39,14 @@ namespace synfig {
enum Interpolation
{
- INTERPOLATION_TCB, // 0
- INTERPOLATION_CONSTANT, // 1
- INTERPOLATION_LINEAR, // 2
- INTERPOLATION_HALT, // 3
- INTERPOLATION_MANUAL, // 4
- INTERPOLATION_UNDEFINED, // 5
- INTERPOLATION_NIL // 6
+ INTERPOLATION_TCB, // 0
+ INTERPOLATION_CONSTANT, // 1
+ INTERPOLATION_LINEAR, // 2
+ INTERPOLATION_HALT, // 3
+ INTERPOLATION_MANUAL, // 4
+ INTERPOLATION_UNDEFINED, // 5
+ INTERPOLATION_NIL, // 6
+ INTERPOLATION_CLAMPED // 7
}; // END enum Interpolation
}; // END of namespace synfig
diff --git a/synfig-core/src/synfig/loadcanvas.cpp
b/synfig-core/src/synfig/loadcanvas.cpp
index 3c03389..43383b6 100644
--- a/synfig-core/src/synfig/loadcanvas.cpp
+++ b/synfig-core/src/synfig/loadcanvas.cpp
@@ -9,7 +9,7 @@
** Copyright (c) 2007, 2008 Chris Moore
** Copyright (c) 2009 Carlos A. Sosa Navarro
** Copyright (c) 2009 Nikita Kitaev
-** Copyright (c) 2011 Carlos López
+** Copyright (c) 2011, 2012 Carlos López
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
@@ -1409,6 +1409,8 @@ CanvasParser::parse_animated(xmlpp::Element
*element,Canvas::Handle canvas)
waypoint->set_before(INTERPOLATION_MANUAL);
else if(val=="auto")
waypoint->set_before(INTERPOLATION_TCB);
+ else if(val=="clamped")
+
waypoint->set_before(INTERPOLATION_CLAMPED);
else
error(child,strprintf(_("\"%s\" not a
valid value for attribute \"%s\" in <%s>"),val.c_str(),"before","waypoint"));
}
@@ -1426,6 +1428,8 @@ CanvasParser::parse_animated(xmlpp::Element
*element,Canvas::Handle canvas)
waypoint->set_after(INTERPOLATION_MANUAL);
else if(val=="auto")
waypoint->set_after(INTERPOLATION_TCB);
+ else if(val=="clamped")
+
waypoint->set_after(INTERPOLATION_CLAMPED);
else
error(child,strprintf(_("\"%s\" not a
valid value for attribute \"%s\" in <%s>"),val.c_str(),"before","waypoint"));
}
diff --git a/synfig-core/src/synfig/savecanvas.cpp
b/synfig-core/src/synfig/savecanvas.cpp
index 460575d..0aa738e 100644
--- a/synfig-core/src/synfig/savecanvas.cpp
+++ b/synfig-core/src/synfig/savecanvas.cpp
@@ -7,7 +7,7 @@
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
** Copyright (c) 2007, 2008 Chris Moore
-** Copyright (c) 2011 Carlos López
+** Copyright (c) 2011, 2012 Carlos López
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
@@ -339,6 +339,9 @@ xmlpp::Element* encode_animated(xmlpp::Element*
root,ValueNode_Animated::ConstHa
case INTERPOLATION_TCB:
waypoint_node->set_attribute("before","auto");
break;
+ case INTERPOLATION_CLAMPED:
+ waypoint_node->set_attribute("before","clamped");
+ break;
default:
error("Unknown waypoint type for \"before\" attribute");
}
@@ -360,6 +363,9 @@ xmlpp::Element* encode_animated(xmlpp::Element*
root,ValueNode_Animated::ConstHa
case INTERPOLATION_TCB:
waypoint_node->set_attribute("after","auto");
break;
+ case INTERPOLATION_CLAMPED:
+ waypoint_node->set_attribute("after","clamped");
+ break;
default:
error("Unknown waypoint type for \"after\" attribute");
}
diff --git a/synfig-studio/src/gui/canvasview.cpp
b/synfig-studio/src/gui/canvasview.cpp
index 162be65..c48f7d2 100644
--- a/synfig-studio/src/gui/canvasview.cpp
+++ b/synfig-studio/src/gui/canvasview.cpp
@@ -7,7 +7,7 @@
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
** Copyright (c) 2007, 2008 Chris Moore
-** Copyright (c) 2009, 2011 Carlos López
+** Copyright (c) 2009, 2011, 2012 Carlos López
** Copyright (c) 2009, 2011 Nikita Kitaev
**
** This package is free software; you can redistribute it and/or
@@ -3467,6 +3467,16 @@
CanvasView::on_waypoint_clicked_canvasview(synfigapp::ValueDesc value_desc,
model.set_before(INTERPOLATION_CONSTANT);
interp_menu_both->items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Constant"),
sigc::bind(sigc::ptr_fun(set_waypoint_model),
waypoint_set, model, canvas_interface())));
+
+ model.reset(); model.set_before(INTERPOLATION_CLAMPED);
+
interp_menu_in->items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Clamped"),
+ sigc::bind(sigc::ptr_fun(set_waypoint_model),
waypoint_set, model, canvas_interface())));
+ model.reset(); model.set_after(INTERPOLATION_CLAMPED);
+
interp_menu_out->items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Clamped"),
+ sigc::bind(sigc::ptr_fun(set_waypoint_model),
waypoint_set, model, canvas_interface())));
+ model.set_before(INTERPOLATION_CLAMPED);
+
interp_menu_both->items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Clamped"),
+ sigc::bind(sigc::ptr_fun(set_waypoint_model),
waypoint_set, model, canvas_interface())));
}
//
------------------------------------------------------------------------
diff --git a/synfig-studio/src/gui/widgets/widget_defaults.cpp
b/synfig-studio/src/gui/widgets/widget_defaults.cpp
index 9cbdbed..d1aba65 100644
--- a/synfig-studio/src/gui/widgets/widget_defaults.cpp
+++ b/synfig-studio/src/gui/widgets/widget_defaults.cpp
@@ -7,7 +7,7 @@
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
** Copyright (c) 2008 Chris Moore
-** Copyright (c) 2008 Carlos López
+** Copyright (c) 2008, 2011, 2012 Carlos López
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
@@ -296,11 +296,13 @@ Widget_Defaults::Widget_Defaults()
.add_enum_value(INTERPOLATION_CONSTANT,"constant",_("Constant"))
.add_enum_value(INTERPOLATION_HALT,"ease",_("Ease
In/Out"))
.add_enum_value(INTERPOLATION_LINEAR,"linear",_("Linear"))
+
.add_enum_value(INTERPOLATION_CLAMPED,"clamped",_("Clamped"))
);
widget_interpolation->set_icon(0,
Gtk::Button().render_icon(Gtk::StockID("synfig-interpolation_type_tcb"),Gtk::ICON_SIZE_MENU));
widget_interpolation->set_icon(1,
Gtk::Button().render_icon(Gtk::StockID("synfig-interpolation_type_const"),Gtk::ICON_SIZE_MENU));
widget_interpolation->set_icon(2,
Gtk::Button().render_icon(Gtk::StockID("synfig-interpolation_type_ease"),Gtk::ICON_SIZE_MENU));
widget_interpolation->set_icon(3,
Gtk::Button().render_icon(Gtk::StockID("synfig-interpolation_type_linear"),Gtk::ICON_SIZE_MENU));
+ // TODO: add icon for Clamped
attach(*widget_interpolation,0, 2, 5, 6, Gtk::EXPAND|Gtk::FILL,
Gtk::SHRINK|Gtk::FILL, 1, 1);
widget_interpolation->set_tooltip_text(_("Default Interpolation"));
diff --git a/synfig-studio/src/gui/widgets/widget_timeslider.cpp
b/synfig-studio/src/gui/widgets/widget_timeslider.cpp
index 28d0673..5395bbb 100644
--- a/synfig-studio/src/gui/widgets/widget_timeslider.cpp
+++ b/synfig-studio/src/gui/widgets/widget_timeslider.cpp
@@ -7,6 +7,7 @@
** \legal
** Copyright (c) 2004 Adrian Bentley
** Copyright (c) 2007, 2008 Chris Moore
+** Copyright (c) 2012, Carlos López
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
@@ -81,6 +82,10 @@ Gdk::Color get_interp_color(synfig::Interpolation x)
return Gdk::Color("#B000B0");
break;
+ case INTERPOLATION_CLAMPED:
+ return Gdk::Color("#c08000");
+ break;
+
case INTERPOLATION_UNDEFINED: default:
return Gdk::Color("#808080");
break;
@@ -200,6 +205,16 @@ studio::render_time_point_to_window(
window->draw_lines(gc,points);
break;
+ case INTERPOLATION_CLAMPED:
+ points.clear();
+
points.push_back(Gdk::Point(area.get_x()+area.get_width()/2,area.get_y()));
+
points.push_back(Gdk::Point(area.get_x(),area.get_y()+area.get_height()/2));
+
points.push_back(Gdk::Point(area.get_x()+area.get_width()/2,area.get_y()+area.get_height()));
+ window->draw_polygon(gc,true,points);
+ gc->set_rgb_fg_color(black);
+ window->draw_lines(gc,points);
+ break;
+
case INTERPOLATION_UNDEFINED: default:
points.clear();
points.push_back(Gdk::Point(area.get_x()+area.get_width()/2,area.get_y()));
@@ -294,6 +309,16 @@ studio::render_time_point_to_window(
window->draw_lines(gc,points);
break;
+ case INTERPOLATION_CLAMPED:
+ points.clear();
+
points.push_back(Gdk::Point(area.get_x()+area.get_width()/2,area.get_y()));
+
points.push_back(Gdk::Point(area.get_x()+area.get_width(),area.get_y()+area.get_height()/2));
+
points.push_back(Gdk::Point(area.get_x()+area.get_width()/2,area.get_y()+area.get_height()));
+ window->draw_polygon(gc,true,points);
+ gc->set_rgb_fg_color(black);
+ window->draw_lines(gc,points);
+ break;
+
case INTERPOLATION_UNDEFINED: default:
points.clear();
points.push_back(Gdk::Point(area.get_x()+area.get_width()/2,area.get_y()));
------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual
desktops for less than the cost of PCs and save 60% on VDI infrastructure
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl