summaryrefslogtreecommitdiff
path: root/graphics.c
diff options
context:
space:
mode:
Diffstat (limited to 'graphics.c')
-rwxr-xr-xgraphics.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/graphics.c b/graphics.c
index c1c879c..ced6963 100755
--- a/graphics.c
+++ b/graphics.c
@@ -141,6 +141,7 @@ typedef struct graphics_request_ {
f64 width;
} line;
struct {
+ i32 font;
vec4_f32 color;
Box area;
vec2 max_size;
@@ -148,6 +149,7 @@ typedef struct graphics_request_ {
c32 * text;
} text_area;
struct {
+ i32 font;
vec4_f32 color;
Box area;
vec2 max_size;
@@ -218,8 +220,8 @@ void fill_triangles_to_buffer (Pixel_Buffer dst, vec4_f32 color, vec2 position,
void fill_quad_to_buffer (Pixel_Buffer dst, vec4_f32 color, vec2 vertices[4]);
void fill_ellipse_to_buffer (Pixel_Buffer dst, vec4_f32 color, Box area);
void fill_line_to_buffer (Pixel_Buffer dst, vec4_f32 color, vec2 vertices[2], f64 width);
-void draw_text_area_to_buffer (Pixel_Buffer dst, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text);
-void draw_text_cursor_to_buffer(Pixel_Buffer dst, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection);
+void draw_text_area_to_buffer (Pixel_Buffer dst, i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text);
+void draw_text_cursor_to_buffer(Pixel_Buffer dst, i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection);
void draw_pixels_cached (Box area, Pixel_Buffer src);
void fill_rectangle_cached (vec4_f32 color, Box area);
@@ -228,8 +230,8 @@ void fill_triangles_cached (vec4_f32 color, vec2 position, vec2 scale, i64 num_
void fill_quad_cached (vec4_f32 color, vec2 vertices[4]);
void fill_ellipse_cached (vec4_f32 color, Box area);
void fill_line_cached (vec4_f32 color, vec2 vertices[2], f64 width);
-void draw_text_area_cached (vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text);
-void draw_text_cursor_cached(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection);
+void draw_text_area_cached (i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text);
+void draw_text_cursor_cached(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection);
void draw_pixels (Box area, Pixel_Buffer src);
void fill_rectangle (vec4_f32 color, Box area);
@@ -238,8 +240,8 @@ void fill_triangles (vec4_f32 color, vec2 position, vec2 scale, i64 num_triangl
void fill_quad (vec4_f32 color, vec2 vertices[4]);
void fill_ellipse (vec4_f32 color, Box area);
void fill_line (vec4_f32 color, vec2 vertices[2], f64 width);
-void draw_text_area (vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text);
-void draw_text_cursor(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection);
+void draw_text_area (i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text);
+void draw_text_cursor(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection);
void perform_graphics_request(Graphics_Context context, Graphics_Request req);
@@ -809,7 +811,7 @@ void external_font_render_to_buffer(Pixel_Buffer dst, i32 font, vec4_f32 color,
}
#endif // !defined(GRAPHICS_ENABLE_EXTERNAL_FONT)
-void draw_text_area_to_buffer(Pixel_Buffer dst, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) {
+void draw_text_area_to_buffer(Pixel_Buffer dst, i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) {
if (text == NULL || num_chars <= 0 || max_size.x < EPSILON || max_size.y < EPSILON)
return;
@@ -830,7 +832,7 @@ void draw_text_area_to_buffer(Pixel_Buffer dst, vec4_f32 color, Box area, vec2 m
draw_text_(dst, color, area.x, area.y, kx, ky, num_chars, text);
}
-void draw_text_cursor_to_buffer(Pixel_Buffer dst, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) {
+void draw_text_cursor_to_buffer(Pixel_Buffer dst, i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) {
if (max_size.x < EPSILON || max_size.y < EPSILON)
return;
@@ -1361,12 +1363,13 @@ void fill_line_cached(vec4_f32 color, vec2 vertices[2], f64 width) {
);
}
-void draw_text_area_cached(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) {
+void draw_text_area_cached(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) {
perform_graphics_request(
(Graphics_Context) {0},
(Graphics_Request) {
.op = GRAPHICS_DRAW_TEXT_AREA,
.text_area = {
+ .font = font,
.color = color,
.area = area,
.max_size = max_size,
@@ -1377,12 +1380,13 @@ void draw_text_area_cached(vec4_f32 color, Box area, vec2 max_size, i64 num_char
);
}
-void draw_text_cursor_cached(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) {
+void draw_text_cursor_cached(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) {
perform_graphics_request(
(Graphics_Context) {0},
(Graphics_Request) {
.op = GRAPHICS_DRAW_TEXT_CURSOR,
.text_cursor = {
+ .font = font,
.color = color,
.area = area,
.max_size = max_size,
@@ -1499,12 +1503,13 @@ void fill_line(vec4_f32 color, vec2 vertices[2], f64 width) {
);
}
-void draw_text_area(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) {
+void draw_text_area(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text) {
perform_graphics_request(
(Graphics_Context) { .disable_cache = 1, },
(Graphics_Request) {
.op = GRAPHICS_DRAW_TEXT_AREA,
.text_area = {
+ .font = font,
.color = color,
.area = area,
.max_size = max_size,
@@ -1515,12 +1520,13 @@ void draw_text_area(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32
);
}
-void draw_text_cursor(vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) {
+void draw_text_cursor(i32 font, vec4_f32 color, Box area, vec2 max_size, i64 num_chars, c32 *text, i64 cursor, i64 selection) {
perform_graphics_request(
(Graphics_Context) { .disable_cache = 1, },
(Graphics_Request) {
.op = GRAPHICS_DRAW_TEXT_CURSOR,
.text_cursor = {
+ .font = font,
.color = color,
.area = area,
.max_size = max_size,
@@ -1586,6 +1592,7 @@ static void graphics_request_hash_(Blake2b_State *S, Graphics_Request req) {
break;
case GRAPHICS_DRAW_TEXT_AREA:
+ blake2b_update(S, (u8 *) &req.text_area.font, sizeof req.text_area.font);
blake2b_update(S, (u8 *) &req.text_area.color, sizeof req.text_area.color);
blake2b_update(S, (u8 *) &req.text_area.area, sizeof req.text_area.area);
blake2b_update(S, (u8 *) &req.text_area.max_size, sizeof req.text_area.max_size);
@@ -1598,6 +1605,7 @@ static void graphics_request_hash_(Blake2b_State *S, Graphics_Request req) {
break;
case GRAPHICS_DRAW_TEXT_CURSOR:
+ blake2b_update(S, (u8 *) &req.text_cursor.font, sizeof req.text_cursor.font);
blake2b_update(S, (u8 *) &req.text_cursor.color, sizeof req.text_cursor.color);
blake2b_update(S, (u8 *) &req.text_cursor.area, sizeof req.text_cursor.area);
blake2b_update(S, (u8 *) &req.text_cursor.max_size, sizeof req.text_cursor.max_size);
@@ -1927,6 +1935,7 @@ static void perform_graphics_request_to_buffer_(Pixel_Buffer dst, Graphics_Reque
case GRAPHICS_DRAW_TEXT_AREA:
draw_text_area_to_buffer(
dst,
+ req.text_area.font,
req.text_area.color,
req.text_area.area,
req.text_area.max_size,
@@ -1938,6 +1947,7 @@ static void perform_graphics_request_to_buffer_(Pixel_Buffer dst, Graphics_Reque
case GRAPHICS_DRAW_TEXT_CURSOR:
draw_text_cursor_to_buffer(
dst,
+ req.text_cursor.font,
req.text_cursor.color,
req.text_cursor.area,
req.text_cursor.max_size,
@@ -2244,7 +2254,7 @@ BENCHMARK("draw text area") {
BENCHMARK_BEGIN;
{
c32 text[] = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'S', 'a', 'i', 'l', 'o', 'r', '!', };
- draw_text_area_to_buffer(_test_pixels, _test_color, (Box) { .x = 100, .y = 100, .width = 300, .height = 200, }, (vec2) { 100, 200 }, sizeof text / sizeof *text, text);
+ draw_text_area_to_buffer(_test_pixels, 0, _test_color, (Box) { .x = 100, .y = 100, .width = 300, .height = 200, }, (vec2) { 100, 200 }, sizeof text / sizeof *text, text);
}
BENCHMARK_END;
}