From 6578337d2d7e407cf8cc5af20849401d14e93e4e Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 11 Sep 2024 01:46:26 +0200 Subject: Fix incorrect position for mgl_text_find_character_pos --- src/graphics/text.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src/graphics/text.c') diff --git a/src/graphics/text.c b/src/graphics/text.c index e17dd5a..e84e4b1 100644 --- a/src/graphics/text.c +++ b/src/graphics/text.c @@ -178,25 +178,30 @@ mgl_vec2f mgl_text_get_bounds(mgl_text *self) { } typedef struct { - mgl_vec2f position; + mgl_vec2f glyph_offset; const mgl_text *text; size_t index; } FindCharacterPosUserdata; static bool find_character_pos_callback(codepoint_loop_callback_data callback_data, void *userdata) { FindCharacterPosUserdata *find_character_pos_userdata = userdata; - find_character_pos_userdata->position.x = find_character_pos_userdata->position.x + callback_data.glyph_offset.x; - find_character_pos_userdata->position.y = find_character_pos_userdata->position.y + callback_data.glyph_offset.y; - return callback_data.codepoint_index < find_character_pos_userdata->index; + find_character_pos_userdata->glyph_offset = callback_data.glyph_offset; + if(callback_data.codepoint_index >= find_character_pos_userdata->index) + return false; + + find_character_pos_userdata->glyph_offset.x += callback_data.glyph_width; + if(callback_data.codepoint == '\n') + find_character_pos_userdata->glyph_offset.y += find_character_pos_userdata->text->font->character_size; + return true; } mgl_vec2f mgl_text_find_character_pos(mgl_text *self, size_t index) { FindCharacterPosUserdata find_character_pos_userdata; - find_character_pos_userdata.position = self->position; + find_character_pos_userdata.glyph_offset = (mgl_vec2f){0.0f, 0.0f}; find_character_pos_userdata.text = self; find_character_pos_userdata.index = index; mgl_text_for_each_codepoint(self, find_character_pos_callback, &find_character_pos_userdata); - return (mgl_vec2f){ find_character_pos_userdata.position.x, find_character_pos_userdata.position.y }; + return (mgl_vec2f){ self->position.x + find_character_pos_userdata.glyph_offset.x, self->position.y + find_character_pos_userdata.glyph_offset.y }; } static void mgl_text_draw_glyph(mgl_context *context, const mgl_font_glyph *glyph, mgl_vec2i position) { -- cgit v1.2.3