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

Reply via email to