#ifndef RENDERER_H #define RENDERER_H #include #include #include "font_pack.h" typedef struct RenderObject { unsigned int x, y; unsigned int width, height; unsigned int color; } RenderObject; typedef struct RenderText { RenderObject base; // Position, size, color const char *text; // String to render const FontPack *font; // Font used for rendering } RenderText; typedef struct Renderer { volatile unsigned int *fb; unsigned int width; unsigned int height; unsigned int pitch; void (*clear_screen)(struct Renderer *renderer, unsigned int color); void (*draw_rect)(struct Renderer *renderer, RenderObject *obj); void (*draw_text)(struct Renderer *renderer, RenderText *text); void (*draw_objects)(struct Renderer *renderer, RenderObject *objs[], unsigned int count); } Renderer; // ===== Window definition ===== typedef struct Window { RenderObject frame; // Outer frame of the window RenderObject content_area; // Area inside window (excluding titlebar) RenderText title_bar; // Title bar text unsigned int background_color; // Background fill color for content bool visible; // Visibility flag } Window; // Function to initialize a Window void window_init(Window *win, unsigned int x, unsigned int y, unsigned int width, unsigned int height, const char *title, const FontPack *font, unsigned int title_color, unsigned int bg_color, unsigned int text_color); // Function to render the Window void window_draw(Renderer *renderer, Window *win); // ===== Renderer functions ===== bool renderer_init(Renderer *renderer); void clear_screen_impl(Renderer *renderer, unsigned int color); void draw_rect_impl(Renderer *renderer, RenderObject *obj); void draw_text_impl(Renderer *renderer, RenderText *text); void draw_objects_impl(Renderer *renderer, RenderObject *objs[], unsigned int count); #endif // RENDERER_H