summaryrefslogtreecommitdiff
path: root/third_party/spiro/x3/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/spiro/x3/test.c')
-rw-r--r--third_party/spiro/x3/test.c158
1 files changed, 158 insertions, 0 deletions
diff --git a/third_party/spiro/x3/test.c b/third_party/spiro/x3/test.c
new file mode 100644
index 0000000..53fae33
--- /dev/null
+++ b/third_party/spiro/x3/test.c
@@ -0,0 +1,158 @@
+/* A test app for X3. */
+
+#include "x3.h"
+#include <stdlib.h>
+
+int
+mycallback(x3widget *w, void *data,
+ char *cmd, char *what, char *arg, void *more)
+{
+ printf("my callback: cmd=\"%s\", what=\"%s\", arg=\"%s\"\n",
+ cmd, what ? what : "(null)", arg ? arg : "(null)");
+ return 1;
+}
+
+#if defined(X3_GTK) || defined(X3_CARBON)
+static void test_viewclient_draw(x3viewclient *self, x3dc *dc)
+{
+ if (dc->buf) {
+ int i, j;
+
+ for (i = 0; i < dc->height; i++) {
+ for (j = 0; j < dc->width; j++) {
+ dc->buf[i * dc->rowstride + j * 3] = i;
+ dc->buf[i * dc->rowstride + j * 3 + 1] = 0x80;
+ dc->buf[i * dc->rowstride + j * 3 + 2] = j;
+ }
+ }
+ } else {
+ x3extents ext;
+
+ x3moveto(dc, 10, 10);
+ x3curveto(dc, 200, 10, 100, 100, 490, 100);
+ x3stroke(dc);
+ x3selectfont(dc, "Nimbus Roman No9 L", 0, 0);
+ x3moveto(dc, 10, 50);
+ x3setfontsize(dc, 16);
+ x3showtext(dc, "hello, world!");
+ x3textextents(dc, "hello, world!", &ext);
+ printf("text extents: %g %g %g %g %g %g\n",
+ ext.x_bearing, ext.y_bearing,
+ ext.width, ext.height,
+ ext.x_advance, ext.y_advance);
+ }
+}
+
+static int test_viewclient_key(x3viewclient *self,
+ char *keyname, int mods, int key)
+{
+ printf("view key: %s %d %d\n", keyname, mods, key);
+ return 1;
+}
+
+static void test_viewclient_mouse(x3viewclient *self,
+ int button, int mods,
+ double x, double y)
+{
+ printf("view button: %d %d %g %g\n", button, mods, x, y);
+}
+
+x3viewclient *test_viewclient(void)
+{
+ x3viewclient *result = (x3viewclient *)malloc(sizeof(x3viewclient));
+ x3viewclient_init(result);
+ result->draw = test_viewclient_draw;
+ result->key = test_viewclient_key;
+ result->mouse = test_viewclient_mouse;
+
+ return result;
+}
+
+#ifdef X3_USEMAIN
+int
+main(int argc, char **argv)
+{
+ x3widget *mainwin;
+ x3widget *pane;
+ x3widget *vbox;
+ x3widget *m;
+ x3viewflags viewflags = x3view_click | x3view_hover | x3view_key;
+
+ x3init(&argc, &argv);
+ mainwin = x3window(x3window_main, "untitled", mycallback, NULL);
+#if 1
+ m = x3menu(mainwin, "F\xc2\xa1le");
+ x3menuitem(m, "Save", "save", "<cmd>s");
+ x3setactive(x3menuitem(m, "Save As...", "sava", "<cmd>S"), 0);
+ x3menusep(m);
+ x3menuitem(m, "Preferences...", "pref", "<cmd>,");
+
+ m = x3menu(mainwin, "Edit");
+
+ x3menuitem(m, "ctrl-delete", "cdel", "<ctl>Delete");
+ x3menuitem(m, "ctrl-f1", "cf1", "<ctl>F1");
+ if (0) {
+ int i, j;
+
+ for (j = 0; j < 3; j++) {
+ char mname[16];
+ mname[0] = '0' + j;
+ mname[1] = 0;
+ m = x3menu(mainwin, mname);
+ for (i = 0x20 + 0x20 * j; i < 0x40 + 0x20 * j; i++) {
+ char name[16];
+
+ name[0] = i;
+ name[1] = 0;
+ x3menuitem(m, name, name, name);
+ }
+ }
+ }
+#endif
+
+#if 1
+ pane = x3vpane(mainwin);
+ vbox = x3vbox(x3pad(pane, 10, 10, 10, 10), 0, 5);
+
+ x3setpacking(vbox, FALSE, FALSE, 0);
+ x3button(x3align(vbox, x3center), "foo", "Click me!");
+ x3button(vbox, "bar", "Click me too!");
+ x3setactive(x3button(vbox, "bar", "But not me"), 0);
+ x3label(vbox, "I am a label.");
+ x3edittext(vbox, "etxt");
+#endif
+
+ x3setpacking(vbox, TRUE, TRUE, 0);
+ viewflags |= x3view_2d;
+ viewflags |= x3view_scroll;
+ x3view(pane, viewflags, test_viewclient());
+
+#if 0
+ x3_window_show(mainwin);
+#endif
+
+ x3main();
+ return 0;
+}
+#endif
+#endif
+
+#ifdef X3_USEWINMAIN
+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
+ int iCmdShow)
+{
+ //printf("winmain\n");
+ x3widget *mainwin;
+ x3widget *vbox;
+
+ x3init_win32(hInstance);
+
+ mainwin = x3window(x3window_main, "untitled", mycallback, NULL);
+ x3_window_show(mainwin);
+ vbox = x3vbox(mainwin, 0, 5);
+ x3button(vbox, "foo", "Click me!");
+ x3button(vbox, "bar", "And me too!");
+ x3main();
+ return 0;
+}
+#endif