Blender  V3.3
MultiTest.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2001-2002 NaN Holding BV. All rights reserved. */
3 
4 /* Developers Note:
5  *
6  * This test currently only creates windows and draws a 'dot' under the cursor on LMB,
7  * quits when Q is pressed.
8  *
9  * More work is needed for logging drawing to work properly.
10  *
11  * - Use GPU_matrix API.
12  * - Replace old OpenGL calls to glColor, etc with 'imm' API.
13  * - Investigate BLF font flushing (UI_widgetbase_draw_cache_flush) which is currently disabled.
14  */
15 
16 #ifdef _MSC_VER
17 # pragma warning(disable : 4244 4305)
18 #endif
19 
20 #include <math.h>
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24 
25 #include "GL.h"
26 #include <GL/glew.h>
27 
28 #include "MEM_guardedalloc.h"
29 
30 #include "GHOST_C-api.h"
31 
32 #include "BLF_api.h"
33 
34 #include "Basic.h"
35 #include "EventToBuf.h"
36 #include "ScrollBar.h"
37 #include "Util.h"
38 
39 #include "WindowData.h"
40 
41 /* GPU API. */
42 #include "GPU_context.h"
43 #include "GPU_immediate.h"
44 #include "GPU_init_exit.h"
45 
46 extern int datatoc_bfont_ttf_size;
47 extern char const datatoc_bfont_ttf[];
48 
49 typedef struct _LoggerWindow LoggerWindow;
50 typedef struct _MultiTestApp MultiTestApp;
51 
52 void loggerwindow_log(LoggerWindow *lw, char *line);
53 
57 GHOST_SystemHandle multitestapp_get_system(MultiTestApp *app);
59 
60 
61 
62 void rect_bevel_side(int rect[2][2], int side, float *lt, float *dk, const float col[3], int width)
63 {
64  int ltidx = (side / 2) % 4;
65  int dkidx = (ltidx + 1 + (side & 1)) % 4;
66  int i, corner;
67 
68  glBegin(GL_LINES);
69  for (i = 0; i < width; i++) {
70  float ltf = pow(lt[i], 1.0 / 2.2), dkf = pow(dk[i], 1.0 / 2.2);
71  float stf = (dkidx > ltidx) ? dkf : ltf;
72  int lx = rect[1][0] - i - 1;
73  int ly = rect[0][1] + i;
74 
75  glColor3f(col[0] * stf, col[1] * stf, col[2] * stf);
76  for (corner = 0; corner < 4; corner++) {
77  int x = (corner == 0 || corner == 1) ? (rect[0][0] + i) : (rect[1][0] - i - 1);
78  int y = (corner == 0 || corner == 3) ? (rect[0][1] + i) : (rect[1][1] - i - 1);
79 
80  if (ltidx == corner)
81  glColor3f(col[0] * ltf, col[1] * ltf, col[2] * ltf);
82  if (dkidx == corner)
83  glColor3f(col[0] * dkf, col[1] * dkf, col[2] * dkf);
84 
85  glVertex2i(lx, ly);
86  glVertex2i(lx = x, ly = y);
87  }
88  }
89  glEnd();
90 
91  glColor3fv(col);
92  glRecti(rect[0][0] + width, rect[0][1] + width, rect[1][0] - width, rect[1][1] - width);
93 }
94 
95 void rect_bevel_smooth(int rect[2][2], int width)
96 {
97  float *lt = malloc(sizeof(*lt) * width);
98  float *dk = malloc(sizeof(*dk) * width);
99  float col[4];
100  int i;
101 
102  for (i = 0; i < width; i++) {
103  float v = width - 1 ? ((float)i / (width - 1)) : 0;
104  lt[i] = 1.2 + (1.0 - 1.2) * v;
105  dk[i] = 0.2 + (1.0 - 0.2) * v;
106  }
107 
108  glGetFloatv(GL_CURRENT_COLOR, col);
109 
110  rect_bevel_side(rect, 3, lt, dk, col, width);
111 
112  free(lt);
113  free(dk);
114 }
115 
116 /*
117  * MainWindow
118  */
119 
120 typedef struct {
122 
123  GHOST_WindowHandle win;
125 
126  int size[2];
127 
128  int lmouse[2], lmbut[3];
129 
130  int tmouse[2];
131 } MainWindow;
132 
133 static void mainwindow_log(MainWindow *mw, char *str)
134 {
136 }
137 
139 {
142 
143  if (mw->lmbut[0]) {
144  glClearColor(0.5, 0.5, 0.5, 1);
145  }
146  else {
147  glClearColor(1, 1, 1, 1);
148  }
149  glClear(GL_COLOR_BUFFER_BIT);
150 
151  glColor3f(0.5, 0.6, 0.8);
152  glRecti(mw->tmouse[0] - 5, mw->tmouse[1] - 5, mw->tmouse[0] + 5, mw->tmouse[1] + 5);
153 
155 }
156 
158 {
159  GHOST_RectangleHandle bounds = GHOST_GetClientBounds(mw->win);
160 
163 
166 
167  glViewport(0, 0, mw->size[0], mw->size[1]);
168 
169  glMatrixMode(GL_PROJECTION);
170  glLoadIdentity();
171  glOrtho(0, mw->size[0], 0, mw->size[1], -1, 1);
172  glTranslatef(0.375, 0.375, 0.0);
173 
174  glMatrixMode(GL_MODELVIEW);
175  glLoadIdentity();
176 }
177 
178 static void mainwindow_do_key(MainWindow *mw, GHOST_TKey key, int press)
179 {
180  switch (key) {
181  case GHOST_kKeyC:
182  if (press)
185  break;
187  if (press)
189  break;
191  if (press)
193  break;
194  case GHOST_kKeyE:
195  if (press)
197  break;
198  case GHOST_kKeyQ:
199  if (press)
200  multitestapp_exit(mw->app);
201  break;
202  case GHOST_kKeyT:
203  if (press)
204  mainwindow_log(mw, "TextTest~|`hello`\"world\",<>/");
205  break;
206  case GHOST_kKeyR:
207  if (press) {
208  int i;
209 
210  mainwindow_log(mw, "Invalidating window 10 times");
211  for (i = 0; i < 10; i++)
213  }
214  break;
215  case GHOST_kKeyF11:
216  if (press) {
218  }
219  break;
220  }
221 }
222 
223 static void mainwindow_do_move(MainWindow *mw, int x, int y)
224 {
225  mw->lmouse[0] = x, mw->lmouse[1] = y;
226 
227  if (mw->lmbut[0]) {
228  mw->tmouse[0] = x, mw->tmouse[1] = y;
230  }
231 }
232 
233 static void mainwindow_do_button(MainWindow *mw, int which, int press)
234 {
235  if (which == GHOST_kButtonMaskLeft) {
236  mw->lmbut[0] = press;
237  mw->tmouse[0] = mw->lmouse[0], mw->tmouse[1] = mw->lmouse[1];
239  }
240  else if (which == GHOST_kButtonMaskLeft) {
241  mw->lmbut[1] = press;
242  }
243  else if (which == GHOST_kButtonMaskLeft) {
244  mw->lmbut[2] = press;
245  }
246 }
247 
248 static void mainwindow_handle(void *priv, GHOST_EventHandle evt)
249 {
250  MainWindow *mw = priv;
252  char buf[256];
253 
254  event_to_buf(evt, buf);
255  mainwindow_log(mw, buf);
256 
257  switch (type) {
258  case GHOST_kEventCursorMove: {
260  int x, y;
261  GHOST_ScreenToClient(mw->win, cd->x, cd->y, &x, &y);
262  mainwindow_do_move(mw, x, mw->size[1] - y - 1);
263  break;
264  }
266  case GHOST_kEventButtonUp: {
269  break;
270  }
271  case GHOST_kEventKeyDown:
272  case GHOST_kEventKeyUp: {
275  break;
276  }
277 
279  mainwindow_do_draw(mw);
280  break;
283  break;
284  }
285 }
286 
287 
288 
289 static void mainwindow_timer_proc(GHOST_TimerTaskHandle task, uint64_t time)
290 {
292  char buf[64];
293 
294  sprintf(buf, "timer: %6.2f", (double)((int64_t)time) / 1000);
295  mainwindow_log(mw, buf);
296 }
297 
299 {
300  GHOST_SystemHandle sys = multitestapp_get_system(app);
301  GHOST_WindowHandle win;
302  GHOST_GLSettings glSettings = {0};
303 
304  win = GHOST_CreateWindow(sys,
305  NULL,
306  "MultiTest:Main",
307  40,
308  40,
309  400,
310  400,
312  false,
314  glSettings);
315 
316  if (win) {
317  MainWindow *mw = MEM_callocN(sizeof(*mw), "mainwindow_new");
318 
319  mw->gpu_context = GPU_context_create(win);
320  GPU_init();
321 
322  mw->app = app;
323  mw->win = win;
324 
326 
327  GHOST_InstallTimer(sys, 1000, 10000, mainwindow_timer_proc, mw);
328 
329  return mw;
330  }
331  else {
332  return NULL;
333  }
334 }
335 
337 {
338  GHOST_SystemHandle sys = multitestapp_get_system(mw->app);
339 
341  GHOST_DisposeWindow(sys, mw->win);
342  MEM_freeN(mw);
343 }
344 
345 /*
346  * LoggerWindow
347  */
348 
351 
352  GHOST_WindowHandle win;
354 
355  int font;
357 
358  int size[2];
359 
361  int textarea[2][2];
363 
364  char **loglines;
366 
367  int lmbut[3];
368  int lmouse[2];
369 };
370 
371 #define SCROLLBAR_PAD 2
372 #define SCROLLBAR_WIDTH 14
373 #define TEXTAREA_PAD 2
375 {
376  int nscroll[2][2];
377 
378  nscroll[0][0] = SCROLLBAR_PAD;
379  nscroll[0][1] = SCROLLBAR_PAD;
380  nscroll[1][0] = nscroll[0][0] + SCROLLBAR_WIDTH;
381  nscroll[1][1] = lw->size[1] - SCROLLBAR_PAD - 1;
382 
383  lw->textarea[0][0] = nscroll[1][0] + TEXTAREA_PAD;
384  lw->textarea[0][1] = TEXTAREA_PAD;
385  lw->textarea[1][0] = lw->size[0] - TEXTAREA_PAD - 1;
386  lw->textarea[1][1] = lw->size[1] - TEXTAREA_PAD - 1;
387 
388  lw->ndisplines = (lw->textarea[1][1] - lw->textarea[0][1]) / lw->fontheight;
389 
390  scrollbar_set_thumbpct(lw->scroll, (float)lw->ndisplines / lw->nloglines);
391  scrollbar_set_rect(lw->scroll, nscroll);
392 }
393 
395 {
396  glViewport(0, 0, lw->size[0], lw->size[1]);
397 
398  glMatrixMode(GL_PROJECTION);
399  glLoadIdentity();
400  glOrtho(0, lw->size[0], 0, lw->size[1], -1, 1);
401  glTranslatef(0.375, 0.375, 0.0);
402 
403  glMatrixMode(GL_MODELVIEW);
404  glLoadIdentity();
405 }
406 
408 {
409  GHOST_RectangleHandle bounds = GHOST_GetClientBounds(lw->win);
410 
413 
416 
419 }
420 
422 {
423  int i, ndisplines, startline;
424  int sb_rect[2][2], sb_thumb[2][2];
425 
428 
429  glClearColor(1, 1, 1, 1);
430  glClear(GL_COLOR_BUFFER_BIT);
431 
432  glColor3f(0.8, 0.8, 0.8);
433  rect_bevel_smooth(lw->textarea, 4);
434 
435  scrollbar_get_rect(lw->scroll, sb_rect);
436  scrollbar_get_thumb(lw->scroll, sb_thumb);
437 
438  glColor3f(0.6, 0.6, 0.6);
439  rect_bevel_smooth(sb_rect, 1);
440 
441  if (scrollbar_is_scrolling(lw->scroll)) {
442  glColor3f(0.6, 0.7, 0.5);
443  }
444  else {
445  glColor3f(0.9, 0.9, 0.92);
446  }
447  rect_bevel_smooth(sb_thumb, 1);
448 
449  startline = scrollbar_get_thumbpos(lw->scroll) * (lw->nloglines - 1);
450  ndisplines = min_i(lw->ndisplines, lw->nloglines - startline);
451 
452  glColor3f(0, 0, 0);
453  for (i = 0; i < ndisplines; i++) {
454  /* stored in reverse order */
455  char *line = lw->loglines[(lw->nloglines - 1) - (i + startline)];
456  int x_pos = lw->textarea[0][0] + 4;
457  int y_pos = lw->textarea[0][1] + 4 + i * lw->fontheight;
458 
459  BLF_position(lw->font, x_pos, y_pos, 0.0);
460  BLF_draw(lw->font, line, 256); // XXX
461  }
462 
464 
465  immDeactivate();
466 }
467 
468 static void loggerwindow_do_move(LoggerWindow *lw, int x, int y)
469 {
470  lw->lmouse[0] = x, lw->lmouse[1] = y;
471 
472  if (scrollbar_is_scrolling(lw->scroll)) {
475  }
476 }
477 
478 static void loggerwindow_do_button(LoggerWindow *lw, int which, int press)
479 {
480  if (which == GHOST_kButtonMaskLeft) {
481  lw->lmbut[0] = press;
482 
483  if (press) {
484  if (scrollbar_contains_pt(lw->scroll, lw->lmouse)) {
488  }
489  }
490  else {
491  if (scrollbar_is_scrolling(lw->scroll)) {
495  }
496  }
497  }
498  else if (which == GHOST_kButtonMaskMiddle) {
499  lw->lmbut[1] = press;
500  }
501  else if (which == GHOST_kButtonMaskRight) {
502  lw->lmbut[2] = press;
503  }
504 }
505 
506 static void loggerwindow_do_key(LoggerWindow *lw, GHOST_TKey key, int press)
507 {
508  switch (key) {
509  case GHOST_kKeyQ:
510  if (press)
511  multitestapp_exit(lw->app);
512  break;
513  }
514 }
515 
516 static void loggerwindow_handle(void *priv, GHOST_EventHandle evt)
517 {
518  LoggerWindow *lw = priv;
520 
521  switch (type) {
522  case GHOST_kEventCursorMove: {
524  int x, y;
525  GHOST_ScreenToClient(lw->win, cd->x, cd->y, &x, &y);
526  loggerwindow_do_move(lw, x, lw->size[1] - y - 1);
527  break;
528  }
530  case GHOST_kEventButtonUp: {
533  break;
534  }
535  case GHOST_kEventKeyDown:
536  case GHOST_kEventKeyUp: {
539  break;
540  }
541 
544  break;
547  break;
548  }
549 }
550 
551 
552 
554 {
555  GHOST_GLSettings glSettings = {0};
556  GHOST_SystemHandle sys = multitestapp_get_system(app);
557  uint32_t screensize[2];
558  GHOST_WindowHandle win;
559 
560  GHOST_GetMainDisplayDimensions(sys, &screensize[0], &screensize[1]);
561  win = GHOST_CreateWindow(sys,
562  NULL,
563  "MultiTest:Logger",
564  40,
565  screensize[1] - 432,
566  800,
567  300,
569  false,
571  glSettings);
572 
573  if (win) {
574  LoggerWindow *lw = MEM_callocN(sizeof(*lw), "loggerwindow_new");
575 
576  lw->gpu_context = GPU_context_create(win);
577  GPU_init();
578 
579  int bbox[2][2];
580  lw->app = app;
581  lw->win = win;
582 
583  lw->font = BLF_load_default(false);
584  BLF_size(lw->font, 11, 72);
585  lw->fontheight = BLF_height(lw->font, "A_", 2);
586 
587  lw->nloglines = lw->logsize = 0;
588  lw->loglines = MEM_mallocN(sizeof(*lw->loglines) * lw->nloglines, "loglines");
589 
590  lw->scroll = scrollbar_new(2, 40);
591 
593 
595 
596  return lw;
597  }
598  else {
599  return NULL;
600  }
601 }
602 
603 void loggerwindow_log(LoggerWindow *lw, char *line)
604 {
605  if (lw->nloglines == lw->logsize) {
606  lw->loglines = memdbl(lw->loglines, &lw->logsize, sizeof(*lw->loglines));
607  }
608 
609  lw->loglines[lw->nloglines++] = string_dup(line);
610  scrollbar_set_thumbpct(lw->scroll, (float)lw->ndisplines / lw->nloglines);
611 
613 }
614 
616 {
617  GHOST_SystemHandle sys = multitestapp_get_system(lw->app);
618  int i;
619 
620  for (i = 0; i < lw->nloglines; i++) {
621  MEM_freeN(lw->loglines[i]);
622  }
623  MEM_freeN(lw->loglines);
624 
626  GHOST_DisposeWindow(sys, lw->win);
627  MEM_freeN(lw);
628 }
629 
630 /*
631  * ExtraWindow
632  */
633 
634 typedef struct {
636 
637  GHOST_WindowHandle win;
639 
640  int size[2];
641 } ExtraWindow;
642 
644 {
647 
648  glClearColor(1, 1, 1, 1);
649  glClear(GL_COLOR_BUFFER_BIT);
650 
651  glColor3f(0.8, 0.8, 0.8);
652  glRecti(10, 10, ew->size[0] - 10, ew->size[1] - 10);
653 
655 }
656 
658 {
659  GHOST_RectangleHandle bounds = GHOST_GetClientBounds(ew->win);
660 
663 
666 
667  glViewport(0, 0, ew->size[0], ew->size[1]);
668 
669  glMatrixMode(GL_PROJECTION);
670  glLoadIdentity();
671  glOrtho(0, ew->size[0], 0, ew->size[1], -1, 1);
672  glTranslatef(0.375, 0.375, 0.0);
673 
674  glMatrixMode(GL_MODELVIEW);
675  glLoadIdentity();
676 }
677 
678 static void extrawindow_do_key(ExtraWindow *ew, GHOST_TKey key, int press)
679 {
680  switch (key) {
681  case GHOST_kKeyE:
682  if (press)
684  break;
685  }
686 }
687 
689 {
690  uint8_t bitmap[16][2];
691  uint8_t mask[16][2];
692  double ftime = (double)((int64_t)time) / 1000;
693  float angle = fmod(ftime, 1.0) * 3.1415 * 2;
694  int i;
695 
696  memset(&bitmap, 0, sizeof(bitmap));
697  memset(&mask, 0, sizeof(mask));
698 
699  bitmap[0][0] |= mask[0][0] |= 0xF;
700  bitmap[1][0] |= mask[1][0] |= 0xF;
701  bitmap[2][0] |= mask[2][0] |= 0xF;
702  bitmap[3][0] |= mask[3][0] |= 0xF;
703 
704  for (i = 0; i < 7; i++) {
705  int x = 7 + cos(angle) * i;
706  int y = 7 + sin(angle) * i;
707 
708  mask[y][x / 8] |= (1 << (x % 8));
709  }
710  for (i = 0; i < 64; i++) {
711  float v = (i / 63.0) * 3.1415 * 2;
712  int x = 7 + cos(v) * 7;
713  int y = 7 + sin(v) * 7;
714 
715  mask[y][x / 8] |= (1 << (x % 8));
716  }
717 
718  GHOST_SetCustomCursorShape(ew->win, &bitmap[0][0], &mask[0][0], 16, 16, 0, 0, true);
719 }
720 
721 static void extrawindow_handle(void *priv, GHOST_EventHandle evt)
722 {
723  ExtraWindow *ew = priv;
725  char buf[256];
726 
727  event_to_buf(evt, buf);
729 
730  switch (type) {
731  case GHOST_kEventKeyDown:
732  case GHOST_kEventKeyUp: {
735  break;
736  }
737 
738  case GHOST_kEventCursorMove: {
740  break;
741  }
742 
745  break;
748  break;
751  break;
752  }
753 }
754 
755 
756 
758 {
759  GHOST_GLSettings glSettings = {0};
760  GHOST_SystemHandle sys = multitestapp_get_system(app);
761  GHOST_WindowHandle win;
762 
763  win = GHOST_CreateWindow(sys,
764  NULL,
765  "MultiTest:Extra",
766  500,
767  40,
768  400,
769  400,
771  false,
773  glSettings);
774 
775  if (win) {
776  ExtraWindow *ew = MEM_callocN(sizeof(*ew), "mainwindow_new");
777 
778  ew->gpu_context = GPU_context_create(win);
779  GPU_init();
780 
781  ew->app = app;
782  ew->win = win;
783 
785 
786  return ew;
787  }
788  else {
789  return NULL;
790  }
791 }
792 
794 {
795  GHOST_SystemHandle sys = multitestapp_get_system(ew->app);
796 
798  GHOST_DisposeWindow(sys, ew->win);
799  MEM_freeN(ew);
800 }
801 
802 /*
803  * MultiTestApp
804  */
805 
807  GHOST_SystemHandle sys;
811 
812  int exit;
813 };
814 
815 static bool multitest_event_handler(GHOST_EventHandle evt, GHOST_TUserDataPtr data)
816 {
817  MultiTestApp *app = data;
818  GHOST_WindowHandle win;
819 
820  win = GHOST_GetEventWindow(evt);
821  if (win && !GHOST_ValidWindow(app->sys, win)) {
822  loggerwindow_log(app->logger, "WARNING: bad event, non-valid window\n");
823  return true;
824  }
825 
826  if (win) {
828 
829  windowdata_handle(wb, evt);
830  }
831  else {
833 
834  /* GHOST_kEventQuit are the only 'system' events,
835  * that is, events without a window.
836  */
837  switch (type) {
839  app->exit = 1;
840  break;
841 
842  default:
843  fatal("Unhandled system event: %d (%s)\n", type, eventtype_to_string(type));
844  break;
845  }
846  }
847 
848  return true;
849 }
850 
851 
852 
854 {
855  MultiTestApp *app = MEM_mallocN(sizeof(*app), "multitestapp_new");
856  GHOST_EventConsumerHandle consumer = GHOST_CreateEventConsumer(multitest_event_handler, app);
857 
858  app->sys = GHOST_CreateSystem();
859  if (!app->sys)
860  fatal("Unable to create ghost system");
861 
862  if (!GHOST_AddEventConsumer(app->sys, consumer))
863  fatal("Unable to add multitest event consumer ");
864 
865  app->main = mainwindow_new(app);
866  if (!app->main)
867  fatal("Unable to create main window");
868 
869  app->logger = loggerwindow_new(app);
870  if (!app->logger)
871  fatal("Unable to create logger window");
872 
873  app->extra = NULL;
874  app->exit = 0;
875 
876  return app;
877 }
878 
880 {
881  return app->logger;
882 }
883 
884 GHOST_SystemHandle multitestapp_get_system(MultiTestApp *app)
885 {
886  return app->sys;
887 }
888 
890 {
891  extrawindow_free(app->extra);
892  app->extra = NULL;
893 }
894 
896 {
897  if (app->extra) {
899  }
900  else {
901  app->extra = extrawindow_new(app);
902  }
903 }
904 
906 {
907  app->exit = 1;
908 }
909 
911 {
912  while (!app->exit) {
913  GHOST_ProcessEvents(app->sys, true);
915  }
916 }
917 
919 {
920  BLF_exit();
921  GPU_exit();
922 
923  mainwindow_free(app->main);
925  GHOST_DisposeSystem(app->sys);
926  MEM_freeN(app);
927 }
928 
929 /***/
930 
931 int main(int argc, char **argv)
932 {
933  MultiTestApp *app;
934 
935  BLF_init();
936 
937  app = multitestapp_new();
938 
939  multitestapp_run(app);
940  multitestapp_free(app);
941 
942  return 0;
943 }
typedef float(TangentPoint)[2]
int BLF_init(void)
Definition: blf.c:59
int BLF_load_default(bool unique)
float BLF_height(int fontid, const char *str, size_t str_len) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition: blf.c:717
void BLF_draw(int fontid, const char *str, size_t str_len) ATTR_NONNULL(2)
Definition: blf.c:538
void BLF_exit(void)
Definition: blf.c:70
void BLF_size(int fontid, float size, int dpi)
Definition: blf.c:363
void BLF_position(int fontid, float x, float y, float z)
Definition: blf.c:308
void BLI_kdtree_nd_() free(KDTree *tree)
Definition: kdtree_impl.h:102
int min_i(int a, int b)
Definition: Basic.c:6
typedef double(DMatrix)[4][4]
void event_to_buf(GHOST_EventHandle evt, char buf[128])
Definition: EventToBuf.c:187
char * eventtype_to_string(GHOST_TEventType type)
Definition: EventToBuf.c:13
GHOST C-API function and type declarations.
GHOST_TSuccess GHOST_SetCustomCursorShape(GHOST_WindowHandle windowhandle, uint8_t *bitmap, uint8_t *mask, int sizex, int sizey, int hotX, int hotY, bool canInvertColor)
int32_t GHOST_GetWidthRectangle(GHOST_RectangleHandle rectanglehandle)
GHOST_TSuccess GHOST_SetWindowOrder(GHOST_WindowHandle windowhandle, GHOST_TWindowOrder order)
GHOST_TUserDataPtr GHOST_GetWindowUserData(GHOST_WindowHandle windowhandle)
GHOST_SystemHandle GHOST_CreateSystem(void)
Definition: GHOST_C-api.cpp:25
GHOST_TSuccess GHOST_AddEventConsumer(GHOST_SystemHandle systemhandle, GHOST_EventConsumerHandle consumerhandle)
void GHOST_SetWindowUserData(GHOST_WindowHandle windowhandle, GHOST_TUserDataPtr userdata)
bool GHOST_ProcessEvents(GHOST_SystemHandle systemhandle, bool waitForEvent)
void GHOST_ScreenToClient(GHOST_WindowHandle windowhandle, int32_t inX, int32_t inY, int32_t *outX, int32_t *outY)
GHOST_TSuccess GHOST_SetCursorShape(GHOST_WindowHandle windowhandle, GHOST_TStandardCursor cursorshape)
uint64_t GHOST_GetEventTime(GHOST_EventHandle eventhandle)
GHOST_TUserDataPtr GHOST_GetTimerTaskUserData(GHOST_TimerTaskHandle timertaskhandle)
GHOST_TSuccess GHOST_InvalidateWindow(GHOST_WindowHandle windowhandle)
GHOST_TSuccess GHOST_DisposeWindow(GHOST_SystemHandle systemhandle, GHOST_WindowHandle windowhandle)
int32_t GHOST_GetHeightRectangle(GHOST_RectangleHandle rectanglehandle)
GHOST_TimerTaskHandle GHOST_InstallTimer(GHOST_SystemHandle systemhandle, uint64_t delay, uint64_t interval, GHOST_TimerProcPtr timerProc, GHOST_TUserDataPtr userData)
Definition: GHOST_C-api.cpp:78
void GHOST_GetMainDisplayDimensions(GHOST_SystemHandle systemhandle, uint32_t *width, uint32_t *height)
GHOST_TSuccess GHOST_SwapWindowBuffers(GHOST_WindowHandle windowhandle)
GHOST_TEventDataPtr GHOST_GetEventData(GHOST_EventHandle eventhandle)
GHOST_TSuccess GHOST_SetCursorVisibility(GHOST_WindowHandle windowhandle, bool visible)
GHOST_TSuccess GHOST_ActivateWindowDrawingContext(GHOST_WindowHandle windowhandle)
bool GHOST_ValidWindow(GHOST_SystemHandle systemhandle, GHOST_WindowHandle windowhandle)
GHOST_TEventType GHOST_GetEventType(GHOST_EventHandle eventhandle)
GHOST_WindowHandle GHOST_GetEventWindow(GHOST_EventHandle eventhandle)
void GHOST_DispatchEvents(GHOST_SystemHandle systemhandle)
GHOST_WindowHandle GHOST_CreateWindow(GHOST_SystemHandle systemhandle, GHOST_WindowHandle parent_windowhandle, const char *title, int32_t left, int32_t top, uint32_t width, uint32_t height, GHOST_TWindowState state, bool is_dialog, GHOST_TDrawingContextType type, GHOST_GLSettings glSettings)
GHOST_EventConsumerHandle GHOST_CreateEventConsumer(GHOST_EventCallbackProcPtr eventCallback, GHOST_TUserDataPtr userdata)
Definition: GHOST_C-api.cpp:59
GHOST_RectangleHandle GHOST_GetClientBounds(GHOST_WindowHandle windowhandle)
GHOST_TSuccess GHOST_DisposeSystem(GHOST_SystemHandle systemhandle)
Definition: GHOST_C-api.cpp:40
@ GHOST_kWindowStateNormal
Definition: GHOST_Types.h:130
void * GHOST_TUserDataPtr
Definition: GHOST_Types.h:72
GHOST_TStandardCursor
Definition: GHOST_Types.h:214
@ GHOST_kStandardCursorUpDown
Definition: GHOST_Types.h:243
@ GHOST_kStandardCursorDefault
Definition: GHOST_Types.h:216
@ GHOST_kStandardCursorNumCursors
Definition: GHOST_Types.h:256
GHOST_TEventType
Definition: GHOST_Types.h:169
@ GHOST_kEventWindowClose
Definition: GHOST_Types.h:189
@ GHOST_kEventWindowSize
Definition: GHOST_Types.h:193
@ GHOST_kEventCursorMove
Definition: GHOST_Types.h:172
@ GHOST_kEventButtonUp
Definition: GHOST_Types.h:174
@ GHOST_kEventWindowUpdate
Definition: GHOST_Types.h:192
@ GHOST_kEventButtonDown
Definition: GHOST_Types.h:173
@ GHOST_kEventKeyDown
Definition: GHOST_Types.h:183
@ GHOST_kEventKeyUp
Definition: GHOST_Types.h:184
@ GHOST_kEventQuitRequest
Definition: GHOST_Types.h:187
GHOST_TKey
Definition: GHOST_Types.h:259
@ GHOST_kKeyT
Definition: GHOST_Types.h:311
@ GHOST_kKeyC
Definition: GHOST_Types.h:294
@ GHOST_kKeyF11
Definition: GHOST_Types.h:382
@ GHOST_kKeyR
Definition: GHOST_Types.h:309
@ GHOST_kKeyQ
Definition: GHOST_Types.h:308
@ GHOST_kKeyLeftBracket
Definition: GHOST_Types.h:319
@ GHOST_kKeyRightBracket
Definition: GHOST_Types.h:320
@ GHOST_kKeyE
Definition: GHOST_Types.h:296
@ GHOST_kDrawingContextTypeOpenGL
Definition: GHOST_Types.h:150
@ GHOST_kWindowOrderBottom
Definition: GHOST_Types.h:146
@ GHOST_kButtonMaskRight
Definition: GHOST_Types.h:160
@ GHOST_kButtonMaskLeft
Definition: GHOST_Types.h:158
@ GHOST_kButtonMaskMiddle
Definition: GHOST_Types.h:159
struct GPUContext GPUContext
Definition: GPU_context.h:27
GPUContext * GPU_context_create(void *ghost_window)
Definition: gpu_context.cc:93
void GPU_context_active_set(GPUContext *)
Definition: gpu_context.cc:127
void GPU_init(void)
Definition: gpu_init_exit.c:24
void GPU_exit(void)
Definition: gpu_init_exit.c:45
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
Read Guarded memory(de)allocation.
static void loggerwindow_recalc_regions(LoggerWindow *lw)
Definition: MultiTest.c:374
ExtraWindow * extrawindow_new(MultiTestApp *app)
Definition: MultiTest.c:757
static void loggerwindow_setup_window_gl(LoggerWindow *lw)
Definition: MultiTest.c:394
void multitestapp_toggle_extra_window(MultiTestApp *app)
Definition: MultiTest.c:895
MainWindow * mainwindow_new(MultiTestApp *app)
Definition: MultiTest.c:298
static void mainwindow_do_button(MainWindow *mw, int which, int press)
Definition: MultiTest.c:233
void loggerwindow_free(LoggerWindow *lw)
Definition: MultiTest.c:615
static void loggerwindow_do_move(LoggerWindow *lw, int x, int y)
Definition: MultiTest.c:468
static void extrawindow_spin_cursor(ExtraWindow *ew, uint64_t time)
Definition: MultiTest.c:688
#define TEXTAREA_PAD
Definition: MultiTest.c:373
GHOST_SystemHandle multitestapp_get_system(MultiTestApp *app)
Definition: MultiTest.c:884
static void mainwindow_do_move(MainWindow *mw, int x, int y)
Definition: MultiTest.c:223
int main(int argc, char **argv)
Definition: MultiTest.c:931
static void loggerwindow_handle(void *priv, GHOST_EventHandle evt)
Definition: MultiTest.c:516
static void loggerwindow_do_reshape(LoggerWindow *lw)
Definition: MultiTest.c:407
LoggerWindow * loggerwindow_new(MultiTestApp *app)
Definition: MultiTest.c:553
int datatoc_bfont_ttf_size
void multitestapp_free(MultiTestApp *app)
Definition: MultiTest.c:918
static bool multitest_event_handler(GHOST_EventHandle evt, GHOST_TUserDataPtr data)
Definition: MultiTest.c:815
void multitestapp_free_extrawindow(MultiTestApp *app)
Definition: MultiTest.c:889
MultiTestApp * multitestapp_new(void)
Definition: MultiTest.c:853
void mainwindow_free(MainWindow *mw)
Definition: MultiTest.c:336
static void extrawindow_do_draw(ExtraWindow *ew)
Definition: MultiTest.c:643
static void mainwindow_do_key(MainWindow *mw, GHOST_TKey key, int press)
Definition: MultiTest.c:178
static void loggerwindow_do_key(LoggerWindow *lw, GHOST_TKey key, int press)
Definition: MultiTest.c:506
char const datatoc_bfont_ttf[]
static void mainwindow_timer_proc(GHOST_TimerTaskHandle task, uint64_t time)
Definition: MultiTest.c:289
#define SCROLLBAR_WIDTH
Definition: MultiTest.c:372
void extrawindow_free(ExtraWindow *ew)
Definition: MultiTest.c:793
void rect_bevel_smooth(int rect[2][2], int width)
Definition: MultiTest.c:95
static void loggerwindow_do_button(LoggerWindow *lw, int which, int press)
Definition: MultiTest.c:478
void rect_bevel_side(int rect[2][2], int side, float *lt, float *dk, const float col[3], int width)
Definition: MultiTest.c:62
void multitestapp_exit(MultiTestApp *app)
Definition: MultiTest.c:905
void multitestapp_run(MultiTestApp *app)
Definition: MultiTest.c:910
LoggerWindow * multitestapp_get_logger(MultiTestApp *app)
Definition: MultiTest.c:879
static void mainwindow_log(MainWindow *mw, char *str)
Definition: MultiTest.c:133
static void extrawindow_handle(void *priv, GHOST_EventHandle evt)
Definition: MultiTest.c:721
void loggerwindow_log(LoggerWindow *lw, char *line)
Definition: MultiTest.c:603
static void extrawindow_do_reshape(ExtraWindow *ew)
Definition: MultiTest.c:657
static void mainwindow_handle(void *priv, GHOST_EventHandle evt)
Definition: MultiTest.c:248
#define SCROLLBAR_PAD
Definition: MultiTest.c:371
static void mainwindow_do_reshape(MainWindow *mw)
Definition: MultiTest.c:157
static void loggerwindow_do_draw(LoggerWindow *lw)
Definition: MultiTest.c:421
static void mainwindow_do_draw(MainWindow *mw)
Definition: MultiTest.c:138
static void extrawindow_do_key(ExtraWindow *ew, GHOST_TKey key, int press)
Definition: MultiTest.c:678
void scrollbar_keep_scrolling(ScrollBar *sb, int yco)
Definition: ScrollBar.c:94
void scrollbar_start_scrolling(ScrollBar *sb, int yco)
Definition: ScrollBar.c:80
int scrollbar_is_scrolling(ScrollBar *sb)
Definition: ScrollBar.c:71
ScrollBar * scrollbar_new(int inset, int minthumb)
Definition: ScrollBar.c:50
float scrollbar_get_thumbpos(ScrollBar *sb)
Definition: ScrollBar.c:123
void scrollbar_get_rect(ScrollBar *sb, int rect_r[2][2])
Definition: ScrollBar.c:127
void scrollbar_get_thumb(ScrollBar *sb, int thumb_r[2][2])
Definition: ScrollBar.c:59
void scrollbar_set_rect(ScrollBar *sb, int rect[2][2])
Definition: ScrollBar.c:114
int scrollbar_contains_pt(ScrollBar *sb, int pt[2])
Definition: ScrollBar.c:75
void scrollbar_set_thumbpct(ScrollBar *sb, float pct)
Definition: ScrollBar.c:106
void scrollbar_stop_scrolling(ScrollBar *sb)
Definition: ScrollBar.c:100
void * memdbl(void *mem, int *size_pr, int item_size)
Definition: Util.c:14
void fatal(char *fmt,...)
Definition: Util.c:37
char * string_dup(char *str)
Definition: Util.c:27
void windowdata_free(WindowData *wb)
Definition: WindowData.c:31
WindowData * windowdata_new(void *data, WindowDataHandler handler)
Definition: WindowData.c:17
void windowdata_handle(WindowData *wb, GHOST_EventHandle evt)
Definition: WindowData.c:26
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
Definition: btDbvt.cpp:299
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
Definition: btVector3.h:356
double time
#define str(s)
#define glColor3f
Definition: gl-deprecated.h:40
#define glBegin
Definition: gl-deprecated.h:18
#define glTranslatef
#define glOrtho
#define glMatrixMode
#define glVertex2i
#define glRecti
#define glColor3fv
Definition: gl-deprecated.h:42
#define glEnd
#define glLoadIdentity
uint col
void immDeactivate()
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:27
void *(* MEM_callocN)(size_t len, const char *str)
Definition: mallocn.c:31
void *(* MEM_mallocN)(size_t len, const char *str)
Definition: mallocn.c:33
ccl_device_inline float3 pow(float3 v, float e)
Definition: math_float3.h:533
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
Definition: math_float4.h:513
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
Definition: rall1d.h:319
INLINE Rall1d< T, V, S > sin(const Rall1d< T, V, S > &arg)
Definition: rall1d.h:311
struct blender::compositor::@179::@181 task
unsigned int uint32_t
Definition: stdint.h:80
__int64 int64_t
Definition: stdint.h:89
unsigned char uint8_t
Definition: stdint.h:78
unsigned __int64 uint64_t
Definition: stdint.h:90
MultiTestApp * app
Definition: MultiTest.c:635
GHOST_WindowHandle win
Definition: MultiTest.c:637
int size[2]
Definition: MultiTest.c:640
GPUContext * gpu_context
Definition: MultiTest.c:638
GHOST_TButton button
Definition: GHOST_Types.h:440
GPUContext * gpu_context
Definition: MultiTest.c:124
int size[2]
Definition: MultiTest.c:126
int tmouse[2]
Definition: MultiTest.c:130
int lmbut[3]
Definition: MultiTest.c:128
int lmouse[2]
Definition: MultiTest.c:128
MultiTestApp * app
Definition: MultiTest.c:121
GHOST_WindowHandle win
Definition: MultiTest.c:123
int lmouse[2]
Definition: MultiTest.c:368
ScrollBar * scroll
Definition: MultiTest.c:362
int textarea[2][2]
Definition: MultiTest.c:361
int size[2]
Definition: MultiTest.c:358
GHOST_WindowHandle win
Definition: MultiTest.c:352
int lmbut[3]
Definition: MultiTest.c:367
char ** loglines
Definition: MultiTest.c:364
MultiTestApp * app
Definition: MultiTest.c:350
GPUContext * gpu_context
Definition: MultiTest.c:353
GHOST_SystemHandle sys
Definition: MultiTest.c:807
ExtraWindow * extra
Definition: MultiTest.c:810
MainWindow * main
Definition: MultiTest.c:808
LoggerWindow * logger
Definition: MultiTest.c:809