67 lines
2.6 KiB
C
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
|