Files
nate-os/include/renderer.h
2026-02-11 14:04:00 -07:00

67 lines
2.6 KiB
C

#ifndef RENDERER_H
#define RENDERER_H
#include <stddef.h>
#include <stdbool.h>
#include "font_pack.h"
#include <math.h> // For sqrt, round
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);
void (*draw_line)(struct Renderer *renderer, int x0, int y0, int x1, int y1, unsigned int color);
void (*draw_circle)(struct Renderer *renderer, int cx, int cy, int radius, unsigned int color);
void (*fill_circle)(struct Renderer *renderer, int cx, int cy, int radius, unsigned int color);
void (*draw_triangle)(struct Renderer *renderer, int x0, int y0, int x1, int y1, int x2, int y2, unsigned int color);
void (*fill_triangle)(struct Renderer *renderer, int x0, int y0, int x1, int y1, int x2, int y2, unsigned int color);
} 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