#include "utils.h" #ifndef UI_H #define UI_H #ifndef RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT #define RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT 24 #endif #ifndef RAYGUI_WINDOW_CLOSEBUTTON_SIZE #define RAYGUI_WINDOW_CLOSEBUTTON_SIZE 18 #endif #define UI_WINDOW_TITLE_MAX 32 #define UI_WINDOW_MAX 4 typedef void (*DrawWindowContentCallback)(Vector2 position, Vector2 scroll); typedef enum { NO_FOCUS_ACTION, REQUEST_FOCUS, DEMAND_FOCUS } FocusCommand; typedef struct { char title[UI_WINDOW_TITLE_MAX]; Rectangle rect; bool minimized; bool moving; bool resizing; DrawWindowContentCallback callback; Vector2 contentSize; Vector2 scroll; bool hasFocus; } FloatingWindow; typedef struct { FloatingWindow windows[UI_WINDOW_MAX]; int windowCount; } WindowManager; FloatingWindow createFloatingWindow(const char* title, Rectangle rect); FocusCommand updateFloatingWindow(FloatingWindow* window); void initWindowManager(WindowManager* wm); void updateWindowManager(WindowManager* wm); void addWindowToWindowManager(WindowManager* wm, FloatingWindow window); void focusOnWindow(WindowManager* wm, int windowIndex); #endif