Author: Carlos Lopez <[email protected]>
Date: Tue Jun 19 18:45:49 2012 +0200
Make Layer::accelerated_render a template
---
synfig-core/src/synfig/context.h | 7 +++--
synfig-core/src/synfig/layer.cpp | 29 -------------------------
synfig-core/src/synfig/layer.h | 43 +++++++++++++++++++++++++++++++++++++-
3 files changed, 46 insertions(+), 33 deletions(-)
diff --git a/synfig-core/src/synfig/context.h b/synfig-core/src/synfig/context.h
index 4716b72..bbc393e 100644
--- a/synfig-core/src/synfig/context.h
+++ b/synfig-core/src/synfig/context.h
@@ -31,6 +31,7 @@
#include "rect.h"
#include "renddesc.h"
#include "surface.h"
+#include "layer.h"
#include "layer_composite.h"
#include "general.h"
@@ -50,6 +51,7 @@ class CairoSurface;
class RendDesc;
class ProgressCallback;
class Layer;
+class Layer_Composite;
class Time;
class Rect;
@@ -78,9 +80,8 @@ public:
bool accelerated_render(Surface *surface,int quality, const RendDesc
&renddesc, ProgressCallback *cb) const
{ return accelerated_render_<Surface>(surface, quality, renddesc, cb); }
- bool accelerated_render(CairoSurface */*surface*/,int /*quality*/,
const RendDesc &/*renddesc*/, ProgressCallback */*cb*/) const
- { return true; }
- // accelerated_render_<CairoSurface>(surface, quality, renddesc, cb); }
+ bool accelerated_render(CairoSurface *surface,int quality, const
RendDesc &renddesc, ProgressCallback *cb) const
+ { return accelerated_render_<CairoSurface>(surface, quality, renddesc,
cb); }
template<class S>
bool accelerated_render_(S *surface,int quality, const RendDesc
&renddesc, ProgressCallback *cb) const;
diff --git a/synfig-core/src/synfig/layer.cpp b/synfig-core/src/synfig/layer.cpp
index 3937928..47c5883 100644
--- a/synfig-core/src/synfig/layer.cpp
+++ b/synfig-core/src/synfig/layer.cpp
@@ -37,7 +37,6 @@
#include "value.h"
#include "layer_bitmap.h"
#include "layer_mime.h"
-#include "context.h"
#include "paramdesc.h"
#include "layer_solidcolor.h"
@@ -536,34 +535,6 @@ Layer::hit_check(synfig::Context context, const
synfig::Point &pos)const
return context.hit_check(pos);
}
-/* The default accelerated renderer
-** is anything but accelerated...
-*/
-bool
-Layer::accelerated_render(Context context,Surface *surface,int /*quality*/,
const RendDesc &renddesc, ProgressCallback *cb) const
-{
- handle<Target> target=surface_target(surface);
- if(!target)
- {
- if(cb)cb->error(_("Unable to create surface target"));
- return false;
- }
- RendDesc desc=renddesc;
- target->set_rend_desc(&desc);
-
- // When we render, we want to
- // make sure that we are rendered too...
- // Since the context iterator is for
- // the layer after us, we need to back up.
- // This could be considered a hack, as
- // it is a possibility that we are indeed
- // not the previous layer.
- --context;
-
- return render(context,target,desc,cb);
- //return render_threaded(context,target,desc,cb,2);
-}
-
String
Layer::get_name()const
{
diff --git a/synfig-core/src/synfig/layer.h b/synfig-core/src/synfig/layer.h
index 2179d2a..18a0515 100644
--- a/synfig-core/src/synfig/layer.h
+++ b/synfig-core/src/synfig/layer.h
@@ -39,6 +39,8 @@
#include "node.h"
#include "time.h"
#include "guid.h"
+#include "surface.h"
+#include "context.h"
/* === M A C R O S ========================================================= */
@@ -160,6 +162,7 @@ class ValueNode;
class ValueBase;
class Time;
class Surface;
+class CairoSurface;
class RendDesc;
class ProgressCallback;
class Context;
@@ -512,7 +515,15 @@ public:
** \return \c true on success, \c false on failure
** \see Context::accelerated_render()
*/
- virtual bool accelerated_render(Context context,Surface *surface,int
quality, const RendDesc &renddesc, ProgressCallback *cb)const;
+ virtual bool accelerated_render(Context context,Surface *surface, int
quality, const RendDesc &renddesc, ProgressCallback *cb)const
+ { return accelerated_render_<Surface>(context, surface, quality,
renddesc, cb); }
+
+ virtual bool accelerated_render(Context /*context*/,CairoSurface
*/*surface*/,int /*quality*/, const RendDesc &/*renddesc*/, ProgressCallback
*/*cb*/)const
+ { return true; }
+ // accelerated_render_<CairoSurface>(context, surface, quality,
renddesc, cb); }
+
+ template<class S>
+ bool accelerated_render_(Context context,S *surface,int quality, const
RendDesc &renddesc, ProgressCallback *cb)const;
//! Checks to see if a part of the layer is directly under \a point
/*! \param context Context iterator referring to next
Layer.
@@ -570,6 +581,36 @@ public:
}; // END of class Layer
+/* The default accelerated renderer
+ ** is anything but accelerated...
+ */
+template <class S>
+bool
+Layer::accelerated_render_(synfig::Context context,S *surface,int /*quality*/,
const RendDesc &renddesc, ProgressCallback *cb) const
+{
+ handle<Target> target=surface_target(surface);
+ if(!target)
+ {
+ if(cb)cb->error(_("Unable to create surface target"));
+ return false;
+ }
+ RendDesc desc=renddesc;
+ target->set_rend_desc(&desc);
+
+ // When we render, we want to
+ // make sure that we are rendered too...
+ // Since the context iterator is for
+ // the layer after us, we need to back up.
+ // This could be considered a hack, as
+ // it is a possibility that we are indeed
+ // not the previous layer.
+ --context;
+
+ return render(context,target,desc,cb);
+ //return render_threaded(context,target,desc,cb,2);
+}
+
+
}; // END of namespace synfig
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl