gnome-games r7396 - trunk/gnometris



Author: jmas
Date: Tue Feb 19 20:31:23 2008
New Revision: 7396
URL: http://svn.gnome.org/viewvc/gnome-games?rev=7396&view=rev

Log:
2008-02-19 Jordi Mas <jmas softcatala org>

	* renderer.cpp: Cache Renderer object to avoid so many alloc/deallocs
	* renderer.h: Cache Renderer object to avoid so many alloc/deallocs
	* field.h: Cache Renderer object to avoid so many alloc/deallocs



Modified:
   trunk/gnometris/ChangeLog
   trunk/gnometris/field.cpp
   trunk/gnometris/field.h
   trunk/gnometris/renderer.cpp
   trunk/gnometris/renderer.h

Modified: trunk/gnometris/field.cpp
==============================================================================
--- trunk/gnometris/field.cpp	(original)
+++ trunk/gnometris/field.cpp	Tue Feb 19 20:31:23 2008
@@ -37,6 +37,8 @@
 	backgroundColor(NULL)
 {
         themeID = 0;
+        renderer = NULL;
+        rendererTheme = -1;
 
 	w = gtk_drawing_area_new();
 
@@ -56,6 +58,9 @@
 		cairo_surface_destroy(buffer);
 	if (background)
 		cairo_surface_destroy(background);
+
+        if (renderer)
+                delete renderer;
 }
 
 void
@@ -209,17 +214,30 @@
 Field::redraw()
 {
 	cairo_t *cr;
-        Renderer *r;
         
 	g_return_if_fail(buffer);
 
         generateTarget ();
 
-        r = rendererFactory (themeID, buffer, background, field, 
-                             COLUMNS, LINES, width, height);
+        if (rendererTheme != themeID) {
+
+                if (renderer)
+                        delete renderer;
+
+                renderer = rendererFactory (themeID, buffer, background, field, 
+                                     COLUMNS, LINES, width, height);
+                rendererTheme = themeID;
+        } else {
+                    renderer->setTarget (buffer);
+                    renderer->setBackground (background);
+                    renderer->data = field;
+                    renderer->width = COLUMNS;
+                    renderer->height = LINES;
+                    renderer->pxwidth = width;
+                    renderer->pxheight = height;
+        }
 
-        r->render ();
-        delete r;
+        renderer->render ();
 
 	cr = cairo_create(buffer);
 

Modified: trunk/gnometris/field.h
==============================================================================
--- trunk/gnometris/field.h	(original)
+++ trunk/gnometris/field.h	Tue Feb 19 20:31:23 2008
@@ -24,6 +24,7 @@
 
 #include "tetris.h"
 #include "blockops.h"
+#include "renderer.h"
 
 class Field:public BlockOps {
 public:
@@ -54,6 +55,8 @@
 
   bool showPause;
   bool showGameOver;
+  Renderer *renderer;
+  gint rendererTheme;
 
   GdkPixbuf *backgroundImage;
   bool backgroundImageTiled;

Modified: trunk/gnometris/renderer.cpp
==============================================================================
--- trunk/gnometris/renderer.cpp	(original)
+++ trunk/gnometris/renderer.cpp	Tue Feb 19 20:31:23 2008
@@ -100,6 +100,18 @@
         cairo_surface_destroy (background);
 }
 
+void Renderer::setTarget (cairo_surface_t * dst)
+{
+        cairo_surface_destroy (target);
+        target = cairo_surface_reference (dst);
+}
+
+void Renderer::setBackground (cairo_surface_t *bg)
+{
+        cairo_surface_destroy (background);
+        background = cairo_surface_reference (bg);
+}
+
 void Renderer::drawCell (cairo_t *cr, gint x, gint y)
 {
         int i;

Modified: trunk/gnometris/renderer.h
==============================================================================
--- trunk/gnometris/renderer.h	(original)
+++ trunk/gnometris/renderer.h	Tue Feb 19 20:31:23 2008
@@ -42,14 +42,19 @@
 	    int w, int h, int pxw, int pxh);
     virtual ~ Renderer ();
   virtual void render ();
-protected:
-    cairo_surface_t * target;
-  cairo_surface_t *background;
+
+  void setTarget (cairo_surface_t *target);
+  void setBackground (cairo_surface_t *background);
+
   Block **data;
   int width;
   int height;
   int pxwidth;
   int pxheight;
+protected:
+
+  cairo_surface_t * target;
+  cairo_surface_t *background;
 
   virtual void drawCell (cairo_t * cr, gint x, gint y);
   virtual void drawBackground (cairo_t * cr);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]