Blender V4.3
MultiTest.c
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5/* Developers Note:
6 *
7 * This test currently only creates windows and draws a 'dot' under the cursor on LMB,
8 * quits when Q is pressed.
9 *
10 * More work is needed for logging drawing to work properly.
11 *
12 * - Use GPU_matrix API.
13 * - Replace old OpenGL calls to glColor, etc with 'imm' API.
14 * - Investigate BLF font flushing (UI_widgetbase_draw_cache_flush) which is currently disabled.
15 */
16
17#ifdef _MSC_VER
18# pragma warning(disable : 4244 4305)
19#endif
20
21#include <math.h>
22#include <stdio.h>
23#include <stdlib.h>
24#include <string.h>
25
26#include "GL.h"
27#include <GL/glew.h>
28
29#include "MEM_guardedalloc.h"
30
31#include "GHOST_C-api.h"
32
33#include "BLF_api.hh"
34
35#include "Basic.h"
36#include "EventToBuf.h"
37#include "ScrollBar.h"
38#include "Util.h"
39
40#include "WindowData.h"
41
42/* GPU API. */
43#include "GPU_context.hh"
44#include "GPU_immediate.hh"
45#include "GPU_init_exit.hh"
46
47extern int datatoc_bfont_ttf_size;
48extern char const datatoc_bfont_ttf[];
49
52
53void loggerwindow_log(LoggerWindow *lw, char *line);
54
58GHOST_SystemHandle multitestapp_get_system(MultiTestApp *app);
60
61
62
63void rect_bevel_side(int rect[2][2], int side, float *lt, float *dk, const float col[3], int width)
64{
65 int ltidx = (side / 2) % 4;
66 int dkidx = (ltidx + 1 + (side & 1)) % 4;
67 int i, corner;
68
69 glBegin(GL_LINES);
70 for (i = 0; i < width; i++) {
71 float ltf = pow(lt[i], 1.0 / 2.2), dkf = pow(dk[i], 1.0 / 2.2);
72 float stf = (dkidx > ltidx) ? dkf : ltf;
73 int lx = rect[1][0] - i - 1;
74 int ly = rect[0][1] + i;
75
76 glColor3f(col[0] * stf, col[1] * stf, col[2] * stf);
77 for (corner = 0; corner < 4; corner++) {
78 int x = (corner == 0 || corner == 1) ? (rect[0][0] + i) : (rect[1][0] - i - 1);
79 int y = (corner == 0 || corner == 3) ? (rect[0][1] + i) : (rect[1][1] - i - 1);
80
81 if (ltidx == corner) {
82 glColor3f(col[0] * ltf, col[1] * ltf, col[2] * ltf);
83 }
84 if (dkidx == corner) {
85 glColor3f(col[0] * dkf, col[1] * dkf, col[2] * dkf);
86 }
87
88 glVertex2i(lx, ly);
89 glVertex2i(lx = x, ly = y);
90 }
91 }
92 glEnd();
93
94 glColor3fv(col);
95 glRecti(rect[0][0] + width, rect[0][1] + width, rect[1][0] - width, rect[1][1] - width);
96}
97
98void rect_bevel_smooth(int rect[2][2], int width)
99{
100 float *lt = malloc(sizeof(*lt) * width);
101 float *dk = malloc(sizeof(*dk) * width);
102 float col[4];
103 int i;
104
105 for (i = 0; i < width; i++) {
106 float v = width - 1 ? ((float)i / (width - 1)) : 0;
107 lt[i] = 1.2 + (1.0 - 1.2) * v;
108 dk[i] = 0.2 + (1.0 - 0.2) * v;
109 }
110
111 glGetFloatv(GL_CURRENT_COLOR, col);
112
113 rect_bevel_side(rect, 3, lt, dk, col, width);
114
115 free(lt);
116 free(dk);
117}
118
119/*
120 * MainWindow
121 */
122
123typedef struct {
125
126 GHOST_WindowHandle win;
128
129 int size[2];
130
131 int lmouse[2], lmbut[3];
132
133 int tmouse[2];
134} MainWindow;
135
136static void mainwindow_log(MainWindow *mw, char *str)
137{
139}
140
142{
145
146 if (mw->lmbut[0]) {
147 glClearColor(0.5, 0.5, 0.5, 1);
148 }
149 else {
150 glClearColor(1, 1, 1, 1);
151 }
152 glClear(GL_COLOR_BUFFER_BIT);
153
154 glColor3f(0.5, 0.6, 0.8);
155 glRecti(mw->tmouse[0] - 5, mw->tmouse[1] - 5, mw->tmouse[0] + 5, mw->tmouse[1] + 5);
156
158}
159
161{
162 GHOST_RectangleHandle bounds = GHOST_GetClientBounds(mw->win);
163
166
169
170 glViewport(0, 0, mw->size[0], mw->size[1]);
171
172 glMatrixMode(GL_PROJECTION);
173 glLoadIdentity();
174 glOrtho(0, mw->size[0], 0, mw->size[1], -1, 1);
175 glTranslatef(0.375, 0.375, 0.0);
176
177 glMatrixMode(GL_MODELVIEW);
178 glLoadIdentity();
179}
180
181static void mainwindow_do_key(MainWindow *mw, GHOST_TKey key, int press)
182{
183 switch (key) {
184 case GHOST_kKeyC:
185 if (press) {
188 }
189 break;
191 if (press) {
192 GHOST_SetCursorVisibility(mw->win, false);
193 }
194 break;
196 if (press) {
198 }
199 break;
200 case GHOST_kKeyE:
201 if (press) {
203 }
204 break;
205 case GHOST_kKeyQ:
206 if (press) {
208 }
209 break;
210 case GHOST_kKeyT:
211 if (press) {
212 mainwindow_log(mw, "TextTest~|`hello`\"world\",<>/");
213 }
214 break;
215 case GHOST_kKeyR:
216 if (press) {
217 int i;
218
219 mainwindow_log(mw, "Invalidating window 10 times");
220 for (i = 0; i < 10; i++) {
222 }
223 }
224 break;
225 case GHOST_kKeyF11:
226 if (press) {
228 }
229 break;
230 }
231}
232
233static void mainwindow_do_move(MainWindow *mw, int x, int y)
234{
235 mw->lmouse[0] = x, mw->lmouse[1] = y;
236
237 if (mw->lmbut[0]) {
238 mw->tmouse[0] = x, mw->tmouse[1] = y;
240 }
241}
242
243static void mainwindow_do_button(MainWindow *mw, int which, int press)
244{
245 if (which == GHOST_kButtonMaskLeft) {
246 mw->lmbut[0] = press;
247 mw->tmouse[0] = mw->lmouse[0], mw->tmouse[1] = mw->lmouse[1];
249 }
250 else if (which == GHOST_kButtonMaskLeft) {
251 mw->lmbut[1] = press;
252 }
253 else if (which == GHOST_kButtonMaskLeft) {
254 mw->lmbut[2] = press;
255 }
256}
257
258static void mainwindow_handle(void *priv, GHOST_EventHandle evt)
259{
260 MainWindow *mw = priv;
262 char buf[256];
263
264 event_to_buf(evt, buf);
265 mainwindow_log(mw, buf);
266
267 switch (type) {
270 int x, y;
271 GHOST_ScreenToClient(mw->win, cd->x, cd->y, &x, &y);
272 mainwindow_do_move(mw, x, mw->size[1] - y - 1);
273 break;
274 }
279 break;
280 }
282 case GHOST_kEventKeyUp: {
284 mainwindow_do_key(mw, kd->key, (type == GHOST_kEventKeyDown));
285 break;
286 }
287
290 break;
293 break;
294 }
295}
296
297
298
299static void mainwindow_timer_proc(GHOST_TimerTaskHandle task, uint64_t time)
300{
302 char buf[64];
303
304 sprintf(buf, "timer: %6.2f", (double)((int64_t)time) / 1000);
305 mainwindow_log(mw, buf);
306}
307
309{
310 GHOST_SystemHandle sys = multitestapp_get_system(app);
311 GHOST_WindowHandle win;
312 GHOST_GPUSettings gpuSettings = {0};
313
314 win = GHOST_CreateWindow(sys,
315 NULL,
316 "MultiTest:Main",
317 40,
318 40,
319 400,
320 400,
322 false,
323 GHOST_kDrawingContextTypeOpenGL,
324 gpuSettings);
325
326 if (win) {
327 MainWindow *mw = MEM_callocN(sizeof(*mw), "mainwindow_new");
328
330 GPU_init();
331
332 mw->app = app;
333 mw->win = win;
334
336
337 GHOST_InstallTimer(sys, 1000, 10000, mainwindow_timer_proc, mw);
338
339 return mw;
340 }
341 return NULL;
342}
343
345{
346 GHOST_SystemHandle sys = multitestapp_get_system(mw->app);
347
349 GHOST_DisposeWindow(sys, mw->win);
350 MEM_freeN(mw);
351}
352
353/*
354 * LoggerWindow
355 */
356
359
360 GHOST_WindowHandle win;
362
363 int font;
365
366 int size[2];
367
369 int textarea[2][2];
371
372 char **loglines;
374
375 int lmbut[3];
376 int lmouse[2];
377};
378
379#define SCROLLBAR_PAD 2
380#define SCROLLBAR_WIDTH 14
381#define TEXTAREA_PAD 2
383{
384 int nscroll[2][2];
385
386 nscroll[0][0] = SCROLLBAR_PAD;
387 nscroll[0][1] = SCROLLBAR_PAD;
388 nscroll[1][0] = nscroll[0][0] + SCROLLBAR_WIDTH;
389 nscroll[1][1] = lw->size[1] - SCROLLBAR_PAD - 1;
390
391 lw->textarea[0][0] = nscroll[1][0] + TEXTAREA_PAD;
392 lw->textarea[0][1] = TEXTAREA_PAD;
393 lw->textarea[1][0] = lw->size[0] - TEXTAREA_PAD - 1;
394 lw->textarea[1][1] = lw->size[1] - TEXTAREA_PAD - 1;
395
396 lw->ndisplines = (lw->textarea[1][1] - lw->textarea[0][1]) / lw->fontheight;
397
398 scrollbar_set_thumbpct(lw->scroll, (float)lw->ndisplines / lw->nloglines);
399 scrollbar_set_rect(lw->scroll, nscroll);
400}
401
403{
404 glViewport(0, 0, lw->size[0], lw->size[1]);
405
406 glMatrixMode(GL_PROJECTION);
407 glLoadIdentity();
408 glOrtho(0, lw->size[0], 0, lw->size[1], -1, 1);
409 glTranslatef(0.375, 0.375, 0.0);
410
411 glMatrixMode(GL_MODELVIEW);
412 glLoadIdentity();
413}
414
428
430{
431 int i, ndisplines, startline;
432 int sb_rect[2][2], sb_thumb[2][2];
433
436
437 glClearColor(1, 1, 1, 1);
438 glClear(GL_COLOR_BUFFER_BIT);
439
440 glColor3f(0.8, 0.8, 0.8);
442
443 scrollbar_get_rect(lw->scroll, sb_rect);
444 scrollbar_get_thumb(lw->scroll, sb_thumb);
445
446 glColor3f(0.6, 0.6, 0.6);
447 rect_bevel_smooth(sb_rect, 1);
448
450 glColor3f(0.6, 0.7, 0.5);
451 }
452 else {
453 glColor3f(0.9, 0.9, 0.92);
454 }
455 rect_bevel_smooth(sb_thumb, 1);
456
457 startline = scrollbar_get_thumbpos(lw->scroll) * (lw->nloglines - 1);
458 ndisplines = min_i(lw->ndisplines, lw->nloglines - startline);
459
460 glColor3f(0, 0, 0);
461 for (i = 0; i < ndisplines; i++) {
462 /* stored in reverse order */
463 char *line = lw->loglines[(lw->nloglines - 1) - (i + startline)];
464 int x_pos = lw->textarea[0][0] + 4;
465 int y_pos = lw->textarea[0][1] + 4 + i * lw->fontheight;
466
467 BLF_position(lw->font, x_pos, y_pos, 0.0);
468 BLF_draw(lw->font, line, 256); // XXX
469 }
470
472
474}
475
476static void loggerwindow_do_move(LoggerWindow *lw, int x, int y)
477{
478 lw->lmouse[0] = x, lw->lmouse[1] = y;
479
483 }
484}
485
486static void loggerwindow_do_button(LoggerWindow *lw, int which, int press)
487{
488 if (which == GHOST_kButtonMaskLeft) {
489 lw->lmbut[0] = press;
490
491 if (press) {
492 if (scrollbar_contains_pt(lw->scroll, lw->lmouse)) {
496 }
497 }
498 else {
503 }
504 }
505 }
506 else if (which == GHOST_kButtonMaskMiddle) {
507 lw->lmbut[1] = press;
508 }
509 else if (which == GHOST_kButtonMaskRight) {
510 lw->lmbut[2] = press;
511 }
512}
513
514static void loggerwindow_do_key(LoggerWindow *lw, GHOST_TKey key, int press)
515{
516 switch (key) {
517 case GHOST_kKeyQ:
518 if (press) {
520 }
521 break;
522 }
523}
524
525static void loggerwindow_handle(void *priv, GHOST_EventHandle evt)
526{
527 LoggerWindow *lw = priv;
529
530 switch (type) {
533 int x, y;
534 GHOST_ScreenToClient(lw->win, cd->x, cd->y, &x, &y);
535 loggerwindow_do_move(lw, x, lw->size[1] - y - 1);
536 break;
537 }
542 break;
543 }
545 case GHOST_kEventKeyUp: {
547 loggerwindow_do_key(lw, kd->key, (type == GHOST_kEventKeyDown));
548 break;
549 }
550
553 break;
556 break;
557 }
558}
559
560
561
563{
564 GHOST_GPUSettings gpuSettings = {0};
565 GHOST_SystemHandle sys = multitestapp_get_system(app);
566 uint32_t screensize[2];
567 GHOST_WindowHandle win;
568
569 int posx = 40;
570 int posy = 0;
571 if (GHOST_GetMainDisplayDimensions(sys, &screensize[0], &screensize[1]) == GHOST_kSuccess) {
572 posy = screensize[1] - 432;
573 }
574
575 win = GHOST_CreateWindow(sys,
576 NULL,
577 "MultiTest:Logger",
578 posx,
579 posy,
580 800,
581 300,
583 false,
584 GHOST_kDrawingContextTypeOpenGL,
585 gpuSettings);
586
587 if (win) {
588 LoggerWindow *lw = MEM_callocN(sizeof(*lw), "loggerwindow_new");
589
591 GPU_init();
592
593 int bbox[2][2];
594 lw->app = app;
595 lw->win = win;
596
597 lw->font = BLF_load_default(false);
598 BLF_size(lw->font, 11, 72);
599 lw->fontheight = BLF_height(lw->font, "A_", 2);
600
601 lw->nloglines = lw->logsize = 0;
602 lw->loglines = MEM_mallocN(sizeof(*lw->loglines) * lw->nloglines, "loglines");
603
604 lw->scroll = scrollbar_new(2, 40);
605
607
609
610 return lw;
611 }
612 else {
613 return NULL;
614 }
615}
616
617void loggerwindow_log(LoggerWindow *lw, char *line)
618{
619 if (lw->nloglines == lw->logsize) {
620 lw->loglines = memdbl(lw->loglines, &lw->logsize, sizeof(*lw->loglines));
621 }
622
623 lw->loglines[lw->nloglines++] = string_dup(line);
624 scrollbar_set_thumbpct(lw->scroll, (float)lw->ndisplines / lw->nloglines);
625
627}
628
630{
631 GHOST_SystemHandle sys = multitestapp_get_system(lw->app);
632 int i;
633
634 for (i = 0; i < lw->nloglines; i++) {
635 MEM_freeN(lw->loglines[i]);
636 }
637 MEM_freeN(lw->loglines);
638
640 GHOST_DisposeWindow(sys, lw->win);
641 MEM_freeN(lw);
642}
643
644/*
645 * ExtraWindow
646 */
647
648typedef struct {
650
651 GHOST_WindowHandle win;
653
654 int size[2];
656
658{
661
662 glClearColor(1, 1, 1, 1);
663 glClear(GL_COLOR_BUFFER_BIT);
664
665 glColor3f(0.8, 0.8, 0.8);
666 glRecti(10, 10, ew->size[0] - 10, ew->size[1] - 10);
667
669}
670
672{
673 GHOST_RectangleHandle bounds = GHOST_GetClientBounds(ew->win);
674
677
680
681 glViewport(0, 0, ew->size[0], ew->size[1]);
682
683 glMatrixMode(GL_PROJECTION);
684 glLoadIdentity();
685 glOrtho(0, ew->size[0], 0, ew->size[1], -1, 1);
686 glTranslatef(0.375, 0.375, 0.0);
687
688 glMatrixMode(GL_MODELVIEW);
689 glLoadIdentity();
690}
691
692static void extrawindow_do_key(ExtraWindow *ew, GHOST_TKey key, int press)
693{
694 switch (key) {
695 case GHOST_kKeyE:
696 if (press) {
698 }
699 break;
700 }
701}
702
704{
705 uint8_t bitmap[16][2];
706 uint8_t mask[16][2];
707 double ftime = (double)((int64_t)time) / 1000;
708 float angle = fmod(ftime, 1.0) * 3.1415 * 2;
709 int i;
710
711 memset(&bitmap, 0, sizeof(bitmap));
712 memset(&mask, 0, sizeof(mask));
713
714 bitmap[0][0] |= mask[0][0] |= 0xF;
715 bitmap[1][0] |= mask[1][0] |= 0xF;
716 bitmap[2][0] |= mask[2][0] |= 0xF;
717 bitmap[3][0] |= mask[3][0] |= 0xF;
718
719 for (i = 0; i < 7; i++) {
720 int x = 7 + cos(angle) * i;
721 int y = 7 + sin(angle) * i;
722
723 mask[y][x / 8] |= (1 << (x % 8));
724 }
725 for (i = 0; i < 64; i++) {
726 float v = (i / 63.0) * 3.1415 * 2;
727 int x = 7 + cos(v) * 7;
728 int y = 7 + sin(v) * 7;
729
730 mask[y][x / 8] |= (1 << (x % 8));
731 }
732
733 GHOST_SetCustomCursorShape(ew->win, &bitmap[0][0], &mask[0][0], 16, 16, 0, 0, true);
734}
735
736static void extrawindow_handle(void *priv, GHOST_EventHandle evt)
737{
738 ExtraWindow *ew = priv;
740 char buf[256];
741
742 event_to_buf(evt, buf);
744
745 switch (type) {
747 case GHOST_kEventKeyUp: {
749 extrawindow_do_key(ew, kd->key, (type == GHOST_kEventKeyDown));
750 break;
751 }
752
755 break;
756 }
757
760 break;
763 break;
766 break;
767 }
768}
769
770
771
773{
774 GHOST_GPUSettings gpuSettings = {0};
775 GHOST_SystemHandle sys = multitestapp_get_system(app);
776 GHOST_WindowHandle win;
777
778 win = GHOST_CreateWindow(sys,
779 NULL,
780 "MultiTest:Extra",
781 500,
782 40,
783 400,
784 400,
786 false,
787 GHOST_kDrawingContextTypeOpenGL,
788 gpuSettings);
789
790 if (win) {
791 ExtraWindow *ew = MEM_callocN(sizeof(*ew), "mainwindow_new");
792
794 GPU_init();
795
796 ew->app = app;
797 ew->win = win;
798
800
801 return ew;
802 }
803 else {
804 return NULL;
805 }
806}
807
809{
810 GHOST_SystemHandle sys = multitestapp_get_system(ew->app);
811
813 GHOST_DisposeWindow(sys, ew->win);
814 MEM_freeN(ew);
815}
816
817/*
818 * MultiTestApp
819 */
820
829
830static bool multitest_event_handler(GHOST_EventHandle evt, GHOST_TUserDataPtr data)
831{
832 MultiTestApp *app = data;
833 GHOST_WindowHandle win;
834
835 win = GHOST_GetEventWindow(evt);
836 if (win && !GHOST_ValidWindow(app->sys, win)) {
837 loggerwindow_log(app->logger, "WARNING: bad event, non-valid window\n");
838 return true;
839 }
840
841 if (win) {
843
844 windowdata_handle(wb, evt);
845 }
846 else {
848
849 /* GHOST_kEventQuit are the only 'system' events,
850 * that is, events without a window.
851 */
852 switch (type) {
854 app->exit = 1;
855 break;
856
857 default:
858 fatal("Unhandled system event: %d (%s)\n", type, eventtype_to_string(type));
859 break;
860 }
861 }
862
863 return true;
864}
865
866
867
869{
870 MultiTestApp *app = MEM_mallocN(sizeof(*app), "multitestapp_new");
871 GHOST_EventConsumerHandle consumer = GHOST_CreateEventConsumer(multitest_event_handler, app);
872
873 app->sys = GHOST_CreateSystem();
874 if (!app->sys) {
875 fatal("Unable to create ghost system");
876 }
878
879 if (!GHOST_AddEventConsumer(app->sys, consumer)) {
880 fatal("Unable to add multitest event consumer ");
881 }
882
883 app->main = mainwindow_new(app);
884 if (!app->main) {
885 fatal("Unable to create main window");
886 }
887
888 app->logger = loggerwindow_new(app);
889 if (!app->logger) {
890 fatal("Unable to create logger window");
891 }
892
893 app->extra = NULL;
894 app->exit = 0;
895
896 return app;
897}
898
900{
901 return app->logger;
902}
903
904GHOST_SystemHandle multitestapp_get_system(MultiTestApp *app)
905{
906 return app->sys;
907}
908
910{
912 app->extra = NULL;
913}
914
916{
917 if (app->extra) {
919 }
920 else {
921 app->extra = extrawindow_new(app);
922 }
923}
924
926{
927 app->exit = 1;
928}
929
931{
932 while (!app->exit) {
933 GHOST_ProcessEvents(app->sys, true);
935 }
936}
937
939{
940 BLF_exit();
941 GPU_exit();
942
943 mainwindow_free(app->main);
946 MEM_freeN(app);
947}
948
949/***/
950
951int main(int argc, char **argv)
952{
953 MultiTestApp *app;
954
955 BLF_init();
956
957 app = multitestapp_new();
958
959 multitestapp_run(app);
961
962 return 0;
963}
void BLF_size(int fontid, float size)
Definition blf.cc:426
float BLF_height(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
Definition blf.cc:815
int BLF_load_default(bool unique)
void BLF_draw(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_NONNULL(2)
Definition blf.cc:568
void BLF_exit()
Definition blf.cc:71
int BLF_init()
Definition blf.cc:62
void BLF_position(int fontid, float x, float y, float z)
Definition blf.cc:371
void BLI_kdtree_nd_ free(KDTree *tree)
int min_i(int a, int b)
Definition Basic.c:7
typedef double(DMatrix)[4][4]
void event_to_buf(GHOST_EventHandle evt, char buf[128])
Definition EventToBuf.c:188
char * eventtype_to_string(GHOST_TEventType type)
Definition EventToBuf.c:14
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_EventConsumerHandle GHOST_CreateEventConsumer(GHOST_EventCallbackProcPtr eventCallback, GHOST_TUserDataPtr user_data)
GHOST_SystemHandle GHOST_CreateSystem(void)
GHOST_TSuccess GHOST_AddEventConsumer(GHOST_SystemHandle systemhandle, GHOST_EventConsumerHandle consumerhandle)
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_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)
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_GPUSettings gpuSettings)
bool GHOST_ValidWindow(GHOST_SystemHandle systemhandle, GHOST_WindowHandle windowhandle)
GHOST_TEventType GHOST_GetEventType(GHOST_EventHandle eventhandle)
void GHOST_SetWindowUserData(GHOST_WindowHandle windowhandle, GHOST_TUserDataPtr user_data)
GHOST_WindowHandle GHOST_GetEventWindow(GHOST_EventHandle eventhandle)
void GHOST_DispatchEvents(GHOST_SystemHandle systemhandle)
GHOST_RectangleHandle GHOST_GetClientBounds(GHOST_WindowHandle windowhandle)
GHOST_TimerTaskHandle GHOST_InstallTimer(GHOST_SystemHandle systemhandle, uint64_t delay, uint64_t interval, GHOST_TimerProcPtr timerProc, GHOST_TUserDataPtr user_data)
GHOST_TSuccess GHOST_DisposeSystem(GHOST_SystemHandle systemhandle)
GHOST_TSuccess GHOST_GetMainDisplayDimensions(GHOST_SystemHandle systemhandle, uint32_t *r_width, uint32_t *r_height)
@ GHOST_kWindowStateNormal
void * GHOST_TUserDataPtr
Definition GHOST_Types.h:85
GHOST_TStandardCursor
@ GHOST_kStandardCursorUpDown
@ GHOST_kStandardCursorDefault
#define GHOST_kStandardCursorNumCursors
GHOST_TEventType
@ GHOST_kEventWindowClose
@ GHOST_kEventWindowSize
@ GHOST_kEventCursorMove
@ GHOST_kEventButtonUp
@ GHOST_kEventWindowUpdate
@ GHOST_kEventButtonDown
@ GHOST_kEventKeyDown
@ GHOST_kEventKeyUp
@ GHOST_kEventQuitRequest
GHOST_TKey
@ GHOST_kKeyT
@ GHOST_kKeyC
@ GHOST_kKeyF11
@ GHOST_kKeyR
@ GHOST_kKeyQ
@ GHOST_kKeyLeftBracket
@ GHOST_kKeyRightBracket
@ GHOST_kKeyE
@ GHOST_kWindowOrderBottom
@ GHOST_kSuccess
Definition GHOST_Types.h:87
@ GHOST_kButtonMaskRight
@ GHOST_kButtonMaskLeft
@ GHOST_kButtonMaskMiddle
GPUContext * GPU_context_create(void *ghost_window, void *ghost_context)
void GPU_context_active_set(GPUContext *)
void GPU_backend_ghost_system_set(void *ghost_system_handle)
void GPU_init()
void GPU_exit()
Read Guarded memory(de)allocation.
static void loggerwindow_recalc_regions(LoggerWindow *lw)
Definition MultiTest.c:382
static void loggerwindow_setup_window_gl(LoggerWindow *lw)
Definition MultiTest.c:402
void multitestapp_toggle_extra_window(MultiTestApp *app)
Definition MultiTest.c:915
static void mainwindow_do_button(MainWindow *mw, int which, int press)
Definition MultiTest.c:243
void loggerwindow_free(LoggerWindow *lw)
Definition MultiTest.c:629
static void loggerwindow_do_move(LoggerWindow *lw, int x, int y)
Definition MultiTest.c:476
static void extrawindow_spin_cursor(ExtraWindow *ew, uint64_t time)
Definition MultiTest.c:703
#define TEXTAREA_PAD
Definition MultiTest.c:381
GHOST_SystemHandle multitestapp_get_system(MultiTestApp *app)
Definition MultiTest.c:904
static void mainwindow_do_move(MainWindow *mw, int x, int y)
Definition MultiTest.c:233
static void loggerwindow_handle(void *priv, GHOST_EventHandle evt)
Definition MultiTest.c:525
static void loggerwindow_do_reshape(LoggerWindow *lw)
Definition MultiTest.c:415
int datatoc_bfont_ttf_size
void multitestapp_free(MultiTestApp *app)
Definition MultiTest.c:938
MultiTestApp * multitestapp_new(void)
Definition MultiTest.c:868
static bool multitest_event_handler(GHOST_EventHandle evt, GHOST_TUserDataPtr data)
Definition MultiTest.c:830
void multitestapp_free_extrawindow(MultiTestApp *app)
Definition MultiTest.c:909
void mainwindow_free(MainWindow *mw)
Definition MultiTest.c:344
static void extrawindow_do_draw(ExtraWindow *ew)
Definition MultiTest.c:657
static void mainwindow_do_key(MainWindow *mw, GHOST_TKey key, int press)
Definition MultiTest.c:181
LoggerWindow * loggerwindow_new(MultiTestApp *app)
Definition MultiTest.c:562
static void loggerwindow_do_key(LoggerWindow *lw, GHOST_TKey key, int press)
Definition MultiTest.c:514
char const datatoc_bfont_ttf[]
static void mainwindow_timer_proc(GHOST_TimerTaskHandle task, uint64_t time)
Definition MultiTest.c:299
#define SCROLLBAR_WIDTH
Definition MultiTest.c:380
void extrawindow_free(ExtraWindow *ew)
Definition MultiTest.c:808
void rect_bevel_smooth(int rect[2][2], int width)
Definition MultiTest.c:98
static void loggerwindow_do_button(LoggerWindow *lw, int which, int press)
Definition MultiTest.c:486
void rect_bevel_side(int rect[2][2], int side, float *lt, float *dk, const float col[3], int width)
Definition MultiTest.c:63
void multitestapp_exit(MultiTestApp *app)
Definition MultiTest.c:925
ExtraWindow * extrawindow_new(MultiTestApp *app)
Definition MultiTest.c:772
void multitestapp_run(MultiTestApp *app)
Definition MultiTest.c:930
MainWindow * mainwindow_new(MultiTestApp *app)
Definition MultiTest.c:308
LoggerWindow * multitestapp_get_logger(MultiTestApp *app)
Definition MultiTest.c:899
static void mainwindow_log(MainWindow *mw, char *str)
Definition MultiTest.c:136
static void extrawindow_handle(void *priv, GHOST_EventHandle evt)
Definition MultiTest.c:736
void loggerwindow_log(LoggerWindow *lw, char *line)
Definition MultiTest.c:617
static void extrawindow_do_reshape(ExtraWindow *ew)
Definition MultiTest.c:671
static void mainwindow_handle(void *priv, GHOST_EventHandle evt)
Definition MultiTest.c:258
#define SCROLLBAR_PAD
Definition MultiTest.c:379
static void mainwindow_do_reshape(MainWindow *mw)
Definition MultiTest.c:160
static void loggerwindow_do_draw(LoggerWindow *lw)
Definition MultiTest.c:429
static void mainwindow_do_draw(MainWindow *mw)
Definition MultiTest.c:141
static void extrawindow_do_key(ExtraWindow *ew, GHOST_TKey key, int press)
Definition MultiTest.c:692
void scrollbar_keep_scrolling(ScrollBar *sb, int yco)
Definition ScrollBar.c:95
void scrollbar_start_scrolling(ScrollBar *sb, int yco)
Definition ScrollBar.c:81
int scrollbar_is_scrolling(ScrollBar *sb)
Definition ScrollBar.c:72
float scrollbar_get_thumbpos(ScrollBar *sb)
Definition ScrollBar.c:124
void scrollbar_get_rect(ScrollBar *sb, int rect_r[2][2])
Definition ScrollBar.c:128
void scrollbar_get_thumb(ScrollBar *sb, int thumb_r[2][2])
Definition ScrollBar.c:60
void scrollbar_set_rect(ScrollBar *sb, int rect[2][2])
Definition ScrollBar.c:115
int scrollbar_contains_pt(ScrollBar *sb, int pt[2])
Definition ScrollBar.c:76
void scrollbar_set_thumbpct(ScrollBar *sb, float pct)
Definition ScrollBar.c:107
void scrollbar_stop_scrolling(ScrollBar *sb)
Definition ScrollBar.c:101
ScrollBar * scrollbar_new(int inset, int minthumb)
Definition ScrollBar.c:51
char * string_dup(char *str)
Definition Util.c:28
void fatal(char *fmt,...)
Definition Util.c:38
void * memdbl(void *mem, int *size_pr, int item_size)
Definition Util.c:15
void windowdata_free(WindowData *wb)
Definition WindowData.c:32
WindowData * windowdata_new(void *data, WindowDataHandler handler)
Definition WindowData.c:18
void windowdata_handle(WindowData *wb, GHOST_EventHandle evt)
Definition WindowData.c:27
struct GPUContext GPUContext
ATTR_WARN_UNUSED_RESULT const BMVert * v
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
Definition btDbvt.cpp:299
pow(value.r - subtrahend, 2.0)") .do_static_compilation(true)
double time
#define NULL
draw_view in_light_buf[] float
#define str(s)
uint col
void immDeactivate()
void *(* MEM_mallocN)(size_t len, const char *str)
Definition mallocn.cc:44
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
ccl_device_inline float2 fmod(const float2 a, const float b)
ccl_device_inline float3 cos(float3 v)
int main()
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:649
GHOST_WindowHandle win
Definition MultiTest.c:651
int size[2]
Definition MultiTest.c:654
GPUContext * gpu_context
Definition MultiTest.c:652
GPUContext * gpu_context
Definition MultiTest.c:127
int size[2]
Definition MultiTest.c:129
int tmouse[2]
Definition MultiTest.c:133
int lmbut[3]
Definition MultiTest.c:131
int lmouse[2]
Definition MultiTest.c:131
MultiTestApp * app
Definition MultiTest.c:124
GHOST_WindowHandle win
Definition MultiTest.c:126
int lmouse[2]
Definition MultiTest.c:376
ScrollBar * scroll
Definition MultiTest.c:370
int textarea[2][2]
Definition MultiTest.c:369
GHOST_WindowHandle win
Definition MultiTest.c:360
char ** loglines
Definition MultiTest.c:372
MultiTestApp * app
Definition MultiTest.c:358
GPUContext * gpu_context
Definition MultiTest.c:361
GHOST_SystemHandle sys
Definition MultiTest.c:822
ExtraWindow * extra
Definition MultiTest.c:825
MainWindow * main
Definition MultiTest.c:823
LoggerWindow * logger
Definition MultiTest.c:824