summaryrefslogtreecommitdiff
path: root/iup/test/canvas_cddbuffer.c
diff options
context:
space:
mode:
authorPixel <pixel@nobis-crew.org>2009-11-04 11:56:41 -0800
committerPixel <pixel@nobis-crew.org>2009-11-04 11:59:33 -0800
commitd577d991b97ae2b5ee1af23641bcffc3f83af5b2 (patch)
tree590639d50205d1bcfaff2a7d2dc6ebf3f373c7ed /iup/test/canvas_cddbuffer.c
Initial import. Contains the im, cd and iup librairies, and a "working" Makefile for them under linux.
Diffstat (limited to 'iup/test/canvas_cddbuffer.c')
-rwxr-xr-xiup/test/canvas_cddbuffer.c124
1 files changed, 124 insertions, 0 deletions
diff --git a/iup/test/canvas_cddbuffer.c b/iup/test/canvas_cddbuffer.c
new file mode 100755
index 0000000..dd7ce3e
--- /dev/null
+++ b/iup/test/canvas_cddbuffer.c
@@ -0,0 +1,124 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include "iup.h"
+#include "cd.h"
+#include "cdiup.h"
+#include "cddbuf.h"
+
+
+static void appUpdateRender(cdCanvas *cddbuffer)
+{
+ int width, height;
+
+ cdCanvasBackground(cddbuffer, CD_WHITE);
+ cdCanvasClear(cddbuffer);
+
+ cdCanvasForeground(cddbuffer, CD_RED);
+ cdCanvasGetSize(cddbuffer, &width, &height, NULL, NULL);
+ cdCanvasLine(cddbuffer, 0, 0, width-1, height-1);
+ cdCanvasLine(cddbuffer, 0, height-1, width-1, 0);
+}
+
+static int redraw_cb(Ihandle *ih)
+{
+ cdCanvas *cddbuffer = (cdCanvas*)IupGetAttribute(ih, "_APP_CDDBUFFER");
+ if (!cddbuffer)
+ return IUP_DEFAULT;
+
+ /* update display */
+ cdCanvasFlush(cddbuffer);
+ return IUP_DEFAULT;
+}
+
+static int resize_cb(Ihandle *ih)
+{
+ cdCanvas *cddbuffer = (cdCanvas*)IupGetAttribute(ih, "_APP_CDDBUFFER");
+ if (!cddbuffer)
+ {
+ cdCanvas *cdcanvas = (cdCanvas*)IupGetAttribute(ih, "_APP_CDCANVAS");
+
+ /* update canvas size */
+ cdCanvasActivate(cdcanvas);
+
+ /* this can fail if canvas size is zero */
+ cddbuffer = cdCreateCanvas(CD_DBUFFER, cdcanvas);
+ }
+
+ if (!cddbuffer)
+ return IUP_DEFAULT;
+
+ /* update size */
+ cdCanvasActivate(cddbuffer);
+
+ /* update render */
+ appUpdateRender(cddbuffer);
+
+ return IUP_DEFAULT;
+}
+
+static int map_cb(Ihandle *ih)
+{
+ cdCanvas *cddbuffer, *cdcanvas;
+
+ cdcanvas = cdCreateCanvas(CD_IUP, ih);
+ if (!cdcanvas)
+ return IUP_DEFAULT;
+
+ /* this can fail if canvas size is zero */
+ cddbuffer = cdCreateCanvas(CD_DBUFFER, cdcanvas);
+
+ IupSetAttribute(ih, "_APP_CDCANVAS", (char*)cdcanvas);
+ IupSetAttribute(ih, "_APP_CDDBUFFER", (char*)cddbuffer);
+
+ return IUP_DEFAULT;
+}
+
+static int unmap_cb(Ihandle *ih)
+{
+ cdCanvas *cddbuffer = (cdCanvas*)IupGetAttribute(ih, "_APP_CDDBUFFER");
+ cdCanvas *cdcanvas = (cdCanvas*)IupGetAttribute(ih, "_APP_CDCANVAS");
+
+ if (cddbuffer)
+ cdKillCanvas(cddbuffer);
+
+ if (cdcanvas)
+ cdKillCanvas(cdcanvas);
+
+ return IUP_DEFAULT;
+}
+
+void CanvasCDDBufferTest(void)
+{
+ Ihandle *dlg, *canvas;
+
+ canvas = IupCanvas(NULL);
+ IupSetAttribute(canvas, "RASTERSIZE", "300x200"); /* initial size */
+
+ IupSetCallback(canvas, "RESIZE_CB", (Icallback)resize_cb);
+ IupSetCallback(canvas, "ACTION", (Icallback)redraw_cb);
+ IupSetCallback(canvas, "MAP_CB", (Icallback)map_cb);
+ IupSetCallback(canvas, "UNMAP_CB", (Icallback)unmap_cb);
+
+ dlg = IupDialog(canvas);
+ IupSetAttribute(dlg, "TITLE", "CD Double Buffer Test");
+
+ IupMap(dlg);
+ IupSetAttribute(canvas, "RASTERSIZE", NULL); /* release the minimum limitation */
+
+ IupShowXY(dlg,IUP_CENTER,IUP_CENTER);
+}
+
+#ifndef BIG_TEST
+int main(int argc, char* argv[])
+{
+ IupOpen(&argc, &argv);
+
+ CanvasCDDBufferTest();
+
+ IupMainLoop();
+
+ IupClose();
+
+ return EXIT_SUCCESS;
+}
+#endif