From: <ro...@sy...> - 2012-07-14 16:11:50
|
Author: Carlos Lopez <gen...@gm...> Date: Sat Jul 14 13:20:55 2012 +0200 Versions of the set_render_method member for Layer_Bitmap and Import --- synfig-core/src/modules/lyr_std/import.cpp | 13 +++++++++++ synfig-core/src/modules/lyr_std/import.h | 3 ++ synfig-core/src/synfig/layer_bitmap.cpp | 32 ++++++++++++++++++++++++++- synfig-core/src/synfig/layer_bitmap.h | 7 ++++++ 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/synfig-core/src/modules/lyr_std/import.cpp b/synfig-core/src/modules/lyr_std/import.cpp index b8e0541..1ad7aae 100644 --- a/synfig-core/src/modules/lyr_std/import.cpp +++ b/synfig-core/src/modules/lyr_std/import.cpp @@ -247,3 +247,16 @@ Import::set_time(Context context, Time time, const Point &pos)const context.set_time(time,pos); } + +void +Import::set_render_method(Context context, RenderMethod x) +{ + if(get_method() != x) // if the method is different + { + Layer_Bitmap::set_render_method(context, x); // set the method (and pass to the other layers) + importer=0; // invalidate the importer + set_param("filename", filename); // this will update the importer to the new type + } + else + context.set_render_method(x); // pass it down. +} diff --git a/synfig-core/src/modules/lyr_std/import.h b/synfig-core/src/modules/lyr_std/import.h index 2452319..50cbd6a 100644 --- a/synfig-core/src/modules/lyr_std/import.h +++ b/synfig-core/src/modules/lyr_std/import.h @@ -31,6 +31,7 @@ #include <synfig/color.h> #include <synfig/vector.h> #include <synfig/importer.h> +#include <synfig/target.h> /* === M A C R O S ========================================================= */ @@ -65,6 +66,8 @@ public: virtual void set_time(synfig::Context context, synfig::Time time)const; virtual void set_time(synfig::Context context, synfig::Time time, const synfig::Point &point)const; + + virtual void set_render_method(synfig::Context context, synfig::RenderMethod x); }; /* === E N D =============================================================== */ diff --git a/synfig-core/src/synfig/layer_bitmap.cpp b/synfig-core/src/synfig/layer_bitmap.cpp index c5d51dc..6e3405b 100644 --- a/synfig-core/src/synfig/layer_bitmap.cpp +++ b/synfig-core/src/synfig/layer_bitmap.cpp @@ -62,6 +62,7 @@ using namespace etl; synfig::Layer_Bitmap::Layer_Bitmap(): Layer_Composite (1.0,Color::BLEND_COMPOSITE), + method (SOFTWARE), tl (-0.5,0.5), br (0.5,-0.5), c (1), @@ -108,7 +109,17 @@ synfig::Layer_Bitmap::get_param(const String & param)const { ValueBase ret1(ValueBase::TYPE_INTEGER); ret1=int(width); - ValueBase ret2(surface.get_w()); + ValueBase ret2(ValueBase::TYPE_INTEGER); + switch (method) + { + case SOFTWARE: + ret2=int(surface.get_w()); + break; + case CAIRO: + default: + ret2=int(cairosurface.get_w()); + break; + } ret1.set_static(get_param_static(param)); ret2.set_static(get_param_static(param)); if (trimmed) return ret1; @@ -118,7 +129,17 @@ synfig::Layer_Bitmap::get_param(const String & param)const { ValueBase ret1(ValueBase::TYPE_INTEGER); ret1=int(height); - ValueBase ret2(surface.get_h()); + ValueBase ret2(ValueBase::TYPE_INTEGER); + switch (method) + { + case SOFTWARE: + ret2=int(surface.get_h()); + break; + case CAIRO: + default: + ret2=int(cairosurface.get_h()); + break; + } ret1.set_static(get_param_static(param)); ret2.set_static(get_param_static(param)); if (trimmed) return ret1; @@ -179,6 +200,13 @@ Layer_Bitmap::hit_check(synfig::Context context, const synfig::Point &pos)const return context.hit_check(pos); } +void +synfig::Layer_Bitmap::set_render_method(Context context, RenderMethod x) +{ + set_method(x); + context.set_render_method(x); +} + inline const Color& synfig::Layer_Bitmap::filter(Color& x)const diff --git a/synfig-core/src/synfig/layer_bitmap.h b/synfig-core/src/synfig/layer_bitmap.h index 1b907b3..581dbfc 100644 --- a/synfig-core/src/synfig/layer_bitmap.h +++ b/synfig-core/src/synfig/layer_bitmap.h @@ -29,6 +29,7 @@ #include "layer_composite.h" #include "surface.h" +#include "target.h" // for RenderMethod /* === M A C R O S ========================================================= */ @@ -45,6 +46,7 @@ class Layer_Bitmap : public Layer_Composite, public Layer_NoDeform { const Color& filter(Color& c)const; const CairoColor& filter(CairoColor& c)const; + RenderMethod method; public: typedef etl::handle<Layer_Bitmap> Handle; @@ -75,6 +77,11 @@ public: virtual bool accelerated_cairorender(Context context,cairo_surface_t *surface,int quality, const RendDesc &renddesc, ProgressCallback *cb)const; virtual synfig::Layer::Handle hit_check(synfig::Context context, const synfig::Point &point)const; + + virtual void set_render_method(Context context, RenderMethod x); + void set_method(RenderMethod x) { method=x;} + RenderMethod get_method()const { return method;} + }; // END of class Layer_Bitmap }; // END of namespace synfig |