aboutsummaryrefslogtreecommitdiff
path: root/src/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphics')
-rw-r--r--src/graphics/text.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/graphics/text.c b/src/graphics/text.c
index 2f410d4..28840ce 100644
--- a/src/graphics/text.c
+++ b/src/graphics/text.c
@@ -20,8 +20,13 @@ static mgl_vec2f mgl_text_calculate_bounds(mgl_text *self) {
float width = 0.0f;
for(size_t i = 0; i < self->text_size;) {
unsigned char *cp = (unsigned char*)&self->text[i];
- uint32_t codepoint = 0;
- const size_t clen = mgl_utf8_decode(cp, &codepoint);
+ uint32_t codepoint;
+ size_t clen;
+ if(!mgl_utf8_decode(cp, self->text_size - i, &codepoint, &clen)) {
+ codepoint = *cp;
+ clen = 1;
+ }
+
if(codepoint == '\t') {
if(mgl_font_get_glyph(self->font, ' ', &glyph) == 0) {
width += (glyph.advance * TAB_WIDTH);
@@ -60,20 +65,12 @@ void mgl_text_deinit(mgl_text *self) {
}
int mgl_text_set_string(mgl_text *self, const char *str, size_t str_size) {
- if(str) {
- if(!mgl_utf8_is_valid((const unsigned char*)str, str_size)) {
- fprintf(stderr, "Error: mgl_text_set_string received an invalid utf8 string\n");
- return -1;
- }
- }
-
self->text = str;
self->text_size = str_size;
if(self->text && self->text_size > 0 && self->font)
self->bounds = mgl_text_calculate_bounds(self);
else
self->bounds = (mgl_vec2f){ 0.0f, 0.0f };
-
return 0;
}
@@ -128,8 +125,13 @@ void mgl_text_draw(mgl_context *context, mgl_text *text) {
context->gl.glBegin(GL_QUADS);
for(size_t i = 0; i < text->text_size;) {
unsigned char *cp = (unsigned char*)&text->text[i];
- uint32_t codepoint = 0;
- const size_t clen = mgl_utf8_decode(cp, &codepoint);
+ uint32_t codepoint;
+ size_t clen;
+ if(!mgl_utf8_decode(cp, text->text_size - i, &codepoint, &clen)) {
+ codepoint = *cp;
+ clen = 1;
+ }
+
if(codepoint == '\t') {
if(mgl_font_get_glyph(text->font, ' ', &glyph) == 0) {
position.x += (glyph.advance * TAB_WIDTH);