gnome-games r7396 - trunk/gnometris
- From: jmas svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-games r7396 - trunk/gnometris
- Date: Tue, 19 Feb 2008 20:31:23 +0000 (GMT)
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]