summaryrefslogtreecommitdiffstats
path: root/libdimension/canvas.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@gmail.com>2009-07-05 19:18:24 +0000
committerTavian Barnes <tavianator@gmail.com>2009-07-05 19:18:24 +0000
commitf0caa7d190e51af9ba4a487dc371b56174d56f31 (patch)
treedf7126c72187056d36478c43e878137303b3d156 /libdimension/canvas.c
parent32216655e1d8e523cf3e1239000442b2a30da193 (diff)
downloaddimension-f0caa7d190e51af9ba4a487dc371b56174d56f31.tar.xz
Make optimizer registration fail if a canvas has already been written
to.
Diffstat (limited to 'libdimension/canvas.c')
-rw-r--r--libdimension/canvas.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/libdimension/canvas.c b/libdimension/canvas.c
index d53c7ef..4151a0b 100644
--- a/libdimension/canvas.c
+++ b/libdimension/canvas.c
@@ -43,6 +43,7 @@ dmnsn_new_canvas(unsigned int x, unsigned int y)
/* Allocate room for the optimizers */
canvas->optimizers = dmnsn_new_array(sizeof(dmnsn_canvas_optimizer));
+ canvas->too_late = 0;
}
return canvas;
@@ -71,10 +72,15 @@ dmnsn_delete_canvas(dmnsn_canvas *canvas)
}
/* Set a canvas optimizer */
-void
+int
dmnsn_optimize_canvas(dmnsn_canvas *canvas, dmnsn_canvas_optimizer optimizer)
{
- dmnsn_array_push(canvas->optimizers, &optimizer);
+ if (canvas->too_late) {
+ return 1;
+ } else {
+ dmnsn_array_push(canvas->optimizers, &optimizer);
+ return 0;
+ }
}
/* Set the color of a pixel */
@@ -85,6 +91,9 @@ dmnsn_set_pixel(dmnsn_canvas *canvas, unsigned int x, unsigned int y,
unsigned int i;
dmnsn_canvas_optimizer optimizer;
+ /* Don't allow any more optimizers */
+ canvas->too_late = 1;
+
/* Set the pixel */
canvas->pixels[y*canvas->x + x] = color;