/* * rayui.h * * Collections of functions to aid creating GUIs using raylib * * HEADER FILE * * History: * 20250902 Creation from imgmover prototype. * * Author: Dario Rodriguez dario@darionomono.com * (c) Dario Rodriguez 2025 * This program is licensed under the terms of GNU GPL v2.1+ */ #ifndef RAYUI_H #define RAYUI_H #include "raylib.h" #ifndef FILLXY #define FILLXY(whxy,valx,valy) (whxy).x=(valx),(whxy).y=(valy) #endif #ifndef FILLWH #define FILLWH(whxy,valw,valh) (whxy).w=(valw),(whxy).h=(valh) #endif #ifndef FILLWHXY #define FILLWHXY(whxy,valw,valh,valx,valy) (whxy).w=(valw),(whxy).h=(valh),(whxy).x=(valx),(whxy).y=(valy) #endif #ifndef UNROLLWHXY #define UNROLLWHXY(whxy) (whxy).w,(whxy).h,(whxy).x,(whxy).y #endif #ifndef RD #define RD 0 #endif #ifndef WR #define WR 1 #endif #define MAXSCROLLABLERECT 8 #define SIZESCROLLABLERECTID 16 typedef struct whxy_t { int w; int h; int x; int y; } whxy_t; typedef struct font_t { Font font; int height; } font_t; typedef struct menudata_t { char *title; whxy_t whxy; int sizeoptions; char **options; whxy_t optionswhxy; int flag_open; int flag_stickyopen; int currentoption; } menudata_t; typedef struct menubar_t { int height; int sizemenudata; menudata_t **menudata; font_t *ptrfont; } menubar_t; typedef struct rayui_t { int w; int h; int windowinit; menubar_t *menubar; const unsigned char *defaultfontdata; int sizedefaultfontdata; font_t *font; font_t *fontbig; font_t *fonthuge; struct timeval deadline; int targetfps; } rayui_t; typedef struct scrollrect_t { whxy_t whxy; char id[SIZESCROLLABLERECTID]; int scrollpos; int (*tryselect)(void *, Vector2); void *userptr; int scrollthreshold; } scrollrect_t; typedef struct mousedata_t { Vector2 oldmousepos; Vector2 mousepos; Vector2 wheel; int lmbpressed; int lmbreleased; int oldlmbdown; int lmbdown; int oldrmbdown; int rmbdown; int click_avail; int has_mousechanges; int needs_nextredraw; int is_scrolling; char scrollingid[SIZESCROLLABLERECTID]; int scrollspeed; long long scrollstart; long long scrolllast; Vector2 scrollstartpos; int scrollposstart; int scrollpos; int usedscrollablerect; scrollrect_t scrollablerect[MAXSCROLLABLERECT]; } mousedata_t; rayui_t *rayui_init(int w, int h, char *title, char *menus); void rayui_free(rayui_t *rayui); int rayui_scrollablerectreset(rayui_t *rayui, mousedata_t *mousedata); int rayui_scrollablerectadd(rayui_t *rayui, mousedata_t *mousedata,whxy_t *rect, char *id, int scrollpos, int (*tryselect)(void *userptr, Vector2 mousepos),void *userptr, int scrollthreshold); int rayui_getmousedata(rayui_t *rayui, mousedata_t *mousedata); int is_rayui_scrolling(rayui_t *rayui, mousedata_t *mousedata,char *id, int *newscrollpos); /* newscrollpos is filled if it returns true */ menubar_t *rayuimenubar_init(char *menus, font_t *font); void rayuimenubar_free(menubar_t *menubar); int rayuimenubar_mouse(menubar_t *menubar, Vector2 mousepos, int lmbpressed, int lmbreleased, int lmbdown, int *click_avail, char **sel_menu, char **sel_submenu); int rayuimenubar_draw(menubar_t *menubar, int windowwidth, int windowheight, int *needs_nextredraw); void rayui_settargetfps(rayui_t *rayui, int newfps); int has_rayui_timeleft(rayui_t *rayui); void rayui_timereset(rayui_t *rayui); long long global_currentmilliseconds(void); font_t *rayuifont_init(int size); void rayuifont_free(font_t *font); #ifndef __GNUC__ void global_messagebox(char *format, ...); #else void global_messagebox(char *format, ...) __attribute__ ((format (printf,1,2))); #endif Image global_loadimage(const char *filename); int is_global_insidewhxy(Vector2 pos, whxy_t *whxy, int margin); #endif