Author: Carlos Lopez <[email protected]>
Date:   Thu Nov 29 19:29:49 2012 +0100

Importer: prepare infrastructure to receive use the render method with the new 
CairoImporter class.

---

 synfig-core/src/modules/lyr_std/import.cpp |  199 ++++++++++++++++++++++------
 synfig-core/src/modules/lyr_std/import.h   |    1 +
 2 files changed, 157 insertions(+), 43 deletions(-)

diff --git a/synfig-core/src/modules/lyr_std/import.cpp 
b/synfig-core/src/modules/lyr_std/import.cpp
index 1ad7aae..1264539 100644
--- a/synfig-core/src/modules/lyr_std/import.cpp
+++ b/synfig-core/src/modules/lyr_std/import.cpp
@@ -94,7 +94,9 @@ Import::set_param(const String & param, const ValueBase 
&value)
                {
                        filename=value.get(filename);
                        importer=0;
+                       //cimporter=0;
                        surface.clear();
+                       //csurface.set_cairo_surface(NULL);
                        return true;
                }
 
@@ -132,53 +134,115 @@ Import::set_param(const String & param, const ValueBase 
&value)
                {
                        filename=newfilename;
                        importer=0;
+                       //cimporter=0;
                        surface.clear();
+                       //csurface.set_cairo_surface(NULL);
                        return true;
                }
 
-               // If we are already loaded, don't reload
-               if(filename==newfilename && importer)
+               switch (get_method())
                {
-                       synfig::warning(strprintf(_("Filename seems to already 
be set to \"%s\" (%s)"),filename.c_str(),newfilename.c_str()));
-                       return true;
-               }
-
-               assert(get_canvas());
-
-               if(is_absolute_path(newfilename))
-                       filename_with_path=newfilename;
-               else
-                       
filename_with_path=get_canvas()->get_file_path()+ETL_DIRECTORY_SEPARATOR+newfilename;
-
-               handle<Importer> newimporter;
+               
+               case SOFTWARE:
+                       {
+                               // If we are already loaded, don't reload
+                               if(filename==newfilename && importer)
+                               {
+                                       synfig::warning(strprintf(_("Filename 
seems to already be set to \"%s\" (%s)"),filename.c_str(),newfilename.c_str()));
+                                       return true;
+                               }
+
+                               assert(get_canvas());
+
+                               if(is_absolute_path(newfilename))
+                                       filename_with_path=newfilename;
+                               else
+                                       
filename_with_path=get_canvas()->get_file_path()+ETL_DIRECTORY_SEPARATOR+newfilename;
+
+                               handle<Importer> newimporter;
+
+                               
newimporter=Importer::open(absolute_path(filename_with_path));
+
+                               if(!newimporter)
+                               {
+                                       
newimporter=Importer::open(get_canvas()->get_file_path()+ETL_DIRECTORY_SEPARATOR+basename(newfilename));
+                                       if(!newimporter)
+                                       {
+                                               synfig::error(strprintf("Unable 
to create an importer object with file \"%s\"",filename_with_path.c_str()));
+                                               importer=0;
+                                               filename=newfilename;
+                                               
abs_filename=absolute_path(filename_with_path);
+                                               surface.clear();
+                                               return false;
+                                       }
+                               }
 
-               newimporter=Importer::open(absolute_path(filename_with_path));
+                               surface.clear();
+                               
if(!newimporter->get_frame(surface,get_canvas()->rend_desc(),Time(0),trimmed,width,height,top,left))
+                               {
+                                       synfig::warning(strprintf("Unable to 
get frame from \"%s\"",filename_with_path.c_str()));
+                               }
 
-               if(!newimporter)
-               {
-                       
newimporter=Importer::open(get_canvas()->get_file_path()+ETL_DIRECTORY_SEPARATOR+basename(newfilename));
-                       if(!newimporter)
-                       {
-                               synfig::error(strprintf("Unable to create an 
importer object with file \"%s\"",filename_with_path.c_str()));
-                               importer=0;
+                               importer=newimporter;
                                filename=newfilename;
                                abs_filename=absolute_path(filename_with_path);
-                               surface.clear();
+
+                               return true;
+                       }
+               case OPENGL:
+                       {
+                               return false;
+                       }
+               case CAIRO:
+                       {
+                               /*
+                               if(filename==newfilename && cimporter)
+                               {
+                               synfig::warning(strprintf(_("Filename seems to 
already be set to \"%s\" (%s)"),filename.c_str(),newfilename.c_str()));
+                               return true;
+                               }
+                                assert(get_canvas());
+                                
+                                if(is_absolute_path(newfilename))
+                                filename_with_path=newfilename;
+                                else
+                                
filename_with_path=get_canvas()->get_file_path()+ETL_DIRECTORY_SEPARATOR+newfilename;
+                                
+                                handle<CairoImporter> newimporter;
+                                
+                                
newimporter=CairoImporter::open(absolute_path(filename_with_path));
+                                
+                                if(!newimporter)
+                                {
+                                        
newimporter=Importer::open(get_canvas()->get_file_path()+ETL_DIRECTORY_SEPARATOR+basename(newfilename));
+                                        if(!newimporter)
+                                        {
+                                                
synfig::error(strprintf("Unable to create an importer object with file 
\"%s\"",filename_with_path.c_str()));
+                                                cimporter=0;
+                                                filename=newfilename;
+                                                
abs_filename=absolute_path(filename_with_path);
+                                                
csurface.set_cairo_surface(NULL);
+                                                return false;
+                                        }
+                                }
+                                
+                                cairo_surface_t* cs;
+                                if(!newimporter->get_frame(&cs, 
get_canvas()->rend_desc(), Time(0), trimmed, width, height, top, left))
+                                {
+                                       synfig::warning(strprintf("Unable to 
get frame from \"%s\"",filename_with_path.c_str()));
+                                }
+                                csurface.set_cairo_surface(cs);
+                                cairo_surface_destroy(cs);
+                                
+                                cimporter=newimporter;
+                                filename=newfilename;
+                                abs_filename=absolute_path(filename_with_path);
+                                
+                                return true;
+                               */
                                return false;
                        }
                }
-
-               surface.clear();
-               
if(!newimporter->get_frame(surface,get_canvas()->rend_desc(),Time(0),trimmed,width,height,top,left))
-               {
-                       synfig::warning(strprintf("Unable to get frame from 
\"%s\"",filename_with_path.c_str()));
-               }
-
-               importer=newimporter;
-               filename=newfilename;
-               abs_filename=absolute_path(filename_with_path);
-
-               return true;
        }
        } catch(...) { set_amount(0); return false; }
 
@@ -231,20 +295,68 @@ Import::get_param_vocab()const
 void
 Import::set_time(Context context, Time time)const
 {
-       if(get_amount() && importer &&
-          importer->is_animated())
-               
importer->get_frame(surface,get_canvas()->rend_desc(),time+time_offset,trimmed,width,height,top,left);
-
+       switch (get_method())
+       {
+       case SOFTWARE:
+               if(get_amount() && importer &&
+                  importer->is_animated())
+                       
importer->get_frame(surface,get_canvas()->rend_desc(),time+time_offset,trimmed,width,height,top,left);
+               break;
+       case OPENGL:
+               break;
+       case CAIRO:
+               {
+/*
+                       if(get_amount() && cimporter &&
+                          cimporter->is_animated())
+                       {
+                               cairo_surface_t* cs;
+                               cimporter->get_frame(&cs, 
get_canvas()->rend_desc(), time+time_offset, trimmed, width, height, top, left);
+                               if(cs)
+                               {
+                                       csurface.set_cairo_surface(cs);
+                                       cairo_surface_destroy(cs);
+                               }
+                       }
+                       break;
+*/
+               }
+       
+       }
        context.set_time(time);
 }
 
 void
 Import::set_time(Context context, Time time, const Point &pos)const
 {
-       if(get_amount() && importer &&
-          importer->is_animated())
-               
importer->get_frame(surface,get_canvas()->rend_desc(),time+time_offset,trimmed,width,height,top,left);
-
+       switch (get_method())
+       {
+               case SOFTWARE:
+                       if(get_amount() && importer &&
+                          importer->is_animated())
+                               
importer->get_frame(surface,get_canvas()->rend_desc(),time+time_offset,trimmed,width,height,top,left);
+                       break;
+               case OPENGL:
+                       break;
+               case CAIRO:
+               {
+/*
+                       if(get_amount() && cimporter &&
+                          cimporter->is_animated())
+                       {
+                               cairo_surface_t* cs;
+                               cimporter->get_frame(&cs, 
get_canvas()->rend_desc(), time+time_offset, trimmed, width, height, top, left);
+                               if(cs)
+                               {
+                                       csurface.set_cairo_surface(cs);
+                                       cairo_surface_destroy(cs);
+                               }
+                       }
+                       break;
+*/
+               }
+                       
+       }
        context.set_time(time,pos);
 }
 
@@ -255,6 +367,7 @@ Import::set_render_method(Context context, RenderMethod x)
        {
                Layer_Bitmap::set_render_method(context, x); // set the method 
(and pass to the other layers)
                importer=0; // invalidate the importer
+               //cimporter=0;
                set_param("filename", filename); // this will update the 
importer to the new type
        }
        else
diff --git a/synfig-core/src/modules/lyr_std/import.h 
b/synfig-core/src/modules/lyr_std/import.h
index 33b9432..25d0258 100644
--- a/synfig-core/src/modules/lyr_std/import.h
+++ b/synfig-core/src/modules/lyr_std/import.h
@@ -49,6 +49,7 @@ private:
        String filename;
        String abs_filename;
        Importer::Handle importer;
+       //CairoImporter::Handle cimporter;
        Time time_offset;
 
 protected:


------------------------------------------------------------------------------
Keep yourself connected to Go Parallel: 
VERIFY Test and improve your parallel project with help from experts 
and peers. http://goparallel.sourceforge.net
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to