test.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /* A test app for X3. */
  2. #include "x3.h"
  3. #include <stdlib.h>
  4. int
  5. mycallback(x3widget *w, void *data,
  6. char *cmd, char *what, char *arg, void *more)
  7. {
  8. printf("my callback: cmd=\"%s\", what=\"%s\", arg=\"%s\"\n",
  9. cmd, what ? what : "(null)", arg ? arg : "(null)");
  10. return 1;
  11. }
  12. #if defined(X3_GTK) || defined(X3_CARBON)
  13. static void test_viewclient_draw(x3viewclient *self, x3dc *dc)
  14. {
  15. if (dc->buf) {
  16. int i, j;
  17. for (i = 0; i < dc->height; i++) {
  18. for (j = 0; j < dc->width; j++) {
  19. dc->buf[i * dc->rowstride + j * 3] = i;
  20. dc->buf[i * dc->rowstride + j * 3 + 1] = 0x80;
  21. dc->buf[i * dc->rowstride + j * 3 + 2] = j;
  22. }
  23. }
  24. } else {
  25. x3extents ext;
  26. x3moveto(dc, 10, 10);
  27. x3curveto(dc, 200, 10, 100, 100, 490, 100);
  28. x3stroke(dc);
  29. x3selectfont(dc, "Nimbus Roman No9 L", 0, 0);
  30. x3moveto(dc, 10, 50);
  31. x3setfontsize(dc, 16);
  32. x3showtext(dc, "hello, world!");
  33. x3textextents(dc, "hello, world!", &ext);
  34. printf("text extents: %g %g %g %g %g %g\n",
  35. ext.x_bearing, ext.y_bearing,
  36. ext.width, ext.height,
  37. ext.x_advance, ext.y_advance);
  38. }
  39. }
  40. static int test_viewclient_key(x3viewclient *self,
  41. char *keyname, int mods, int key)
  42. {
  43. printf("view key: %s %d %d\n", keyname, mods, key);
  44. return 1;
  45. }
  46. static void test_viewclient_mouse(x3viewclient *self,
  47. int button, int mods,
  48. double x, double y)
  49. {
  50. printf("view button: %d %d %g %g\n", button, mods, x, y);
  51. }
  52. x3viewclient *test_viewclient(void)
  53. {
  54. x3viewclient *result = (x3viewclient *)malloc(sizeof(x3viewclient));
  55. x3viewclient_init(result);
  56. result->draw = test_viewclient_draw;
  57. result->key = test_viewclient_key;
  58. result->mouse = test_viewclient_mouse;
  59. return result;
  60. }
  61. #ifdef X3_USEMAIN
  62. int
  63. main(int argc, char **argv)
  64. {
  65. x3widget *mainwin;
  66. x3widget *pane;
  67. x3widget *vbox;
  68. x3widget *m;
  69. x3viewflags viewflags = x3view_click | x3view_hover | x3view_key;
  70. x3init(&argc, &argv);
  71. mainwin = x3window(x3window_main, "untitled", mycallback, NULL);
  72. #if 1
  73. m = x3menu(mainwin, "F\xc2\xa1le");
  74. x3menuitem(m, "Save", "save", "<cmd>s");
  75. x3setactive(x3menuitem(m, "Save As...", "sava", "<cmd>S"), 0);
  76. x3menusep(m);
  77. x3menuitem(m, "Preferences...", "pref", "<cmd>,");
  78. m = x3menu(mainwin, "Edit");
  79. x3menuitem(m, "ctrl-delete", "cdel", "<ctl>Delete");
  80. x3menuitem(m, "ctrl-f1", "cf1", "<ctl>F1");
  81. if (0) {
  82. int i, j;
  83. for (j = 0; j < 3; j++) {
  84. char mname[16];
  85. mname[0] = '0' + j;
  86. mname[1] = 0;
  87. m = x3menu(mainwin, mname);
  88. for (i = 0x20 + 0x20 * j; i < 0x40 + 0x20 * j; i++) {
  89. char name[16];
  90. name[0] = i;
  91. name[1] = 0;
  92. x3menuitem(m, name, name, name);
  93. }
  94. }
  95. }
  96. #endif
  97. #if 1
  98. pane = x3vpane(mainwin);
  99. vbox = x3vbox(x3pad(pane, 10, 10, 10, 10), 0, 5);
  100. x3setpacking(vbox, FALSE, FALSE, 0);
  101. x3button(x3align(vbox, x3center), "foo", "Click me!");
  102. x3button(vbox, "bar", "Click me too!");
  103. x3setactive(x3button(vbox, "bar", "But not me"), 0);
  104. x3label(vbox, "I am a label.");
  105. x3edittext(vbox, "etxt");
  106. #endif
  107. x3setpacking(vbox, TRUE, TRUE, 0);
  108. viewflags |= x3view_2d;
  109. viewflags |= x3view_scroll;
  110. x3view(pane, viewflags, test_viewclient());
  111. #if 0
  112. x3_window_show(mainwin);
  113. #endif
  114. x3main();
  115. return 0;
  116. }
  117. #endif
  118. #endif
  119. #ifdef X3_USEWINMAIN
  120. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
  121. int iCmdShow)
  122. {
  123. //printf("winmain\n");
  124. x3widget *mainwin;
  125. x3widget *vbox;
  126. x3init_win32(hInstance);
  127. mainwin = x3window(x3window_main, "untitled", mycallback, NULL);
  128. x3_window_show(mainwin);
  129. vbox = x3vbox(mainwin, 0, 5);
  130. x3button(vbox, "foo", "Click me!");
  131. x3button(vbox, "bar", "And me too!");
  132. x3main();
  133. return 0;
  134. }
  135. #endif