diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/engine.c | 4 | ||||
-rw-r--r-- | src/painter.c | 32 | ||||
-rw-r--r-- | src/text.c | 26 |
3 files changed, 26 insertions, 36 deletions
diff --git a/src/engine.c b/src/engine.c index 9b99164..68e9bce 100644 --- a/src/engine.c +++ b/src/engine.c @@ -104,7 +104,7 @@ static void render_score_value(struct game *game, void *obj) text->text = calloc(BUFSIZ, sizeof(char)); char *a = calloc(BUFSIZ, sizeof(char)); sprintf(a, "%d", game->scoreCurrent); - utf8to32_strcpy(text->text, a); + strncpy(text->text, a, BUFSIZ - 1); free(a); } } @@ -117,7 +117,7 @@ static void render_level_value(struct game *game, void *obj) text->text = calloc(BUFSIZ, sizeof(char)); char *a = calloc(BUFSIZ, sizeof(char)); sprintf(a, "%ld", game->level); - utf8to32_strcpy(text->text, a); + strncpy(text->text, a, BUFSIZ - 1); free(a); } } diff --git a/src/painter.c b/src/painter.c index 5c4a0db..63bd0d9 100644 --- a/src/painter.c +++ b/src/painter.c @@ -1,8 +1,10 @@ +#include <f8.h> #include <SFML/Graphics/RenderWindow.h> #include <SFML/Graphics/RectangleShape.h> #include <SFML/Graphics/Font.h> #include <SFML/Graphics/Text.h> #include <stdlib.h> +#include <stdint.h> #include <stdio.h> #include "tet_conf.h" @@ -180,6 +182,21 @@ static void destroy_field_drawable(struct drawable *d) free(f); } +static void painter_update_text_drawable(struct text_drawable *t, + struct text *txt) +{ + t->attr = txt->attr; + sfText_setCharacterSize(t->text, txt->size); + sfVector2f pos = (sfVector2f){.x = txt->pos.x, .y = txt->pos.y}; + sfText_setPosition(t->text, pos); + if (t->text) { + sfUint32 buf[BUFSIZ]; + buf[sizeof(buf)/sizeof(*buf) - 1] = 0; + utf8to32_strcpy_s((int32_t *)buf, sizeof(buf), txt->text); + sfText_setUnicodeString(t->text, buf); + } +} + size_t painter_register_text(struct text *txt) { struct idlist *last; @@ -192,10 +209,7 @@ size_t painter_register_text(struct text *txt) t->t = TYPE_TEXT; t->text = sfText_create(); sfText_setFont(t->text, font); - sfText_setCharacterSize(t->text, txt->size); - sfVector2f pos = (sfVector2f){.x = txt->pos.x, .y = txt->pos.y}; - sfText_setPosition(t->text, pos); - sfText_setUnicodeString(t->text, (unsigned int *)txt->text); + painter_update_text_drawable(t, txt); last->obj = t; return last->id; @@ -204,14 +218,8 @@ size_t painter_register_text(struct text *txt) void painter_update_text(size_t id, struct text *txt) { struct idlist *node = list_get(drawables, id); - if (!node) - return; - struct text_drawable *t = node->obj; - t->attr = txt->attr; - sfText_setCharacterSize(t->text, txt->size); - sfVector2f pos = (sfVector2f){.x = txt->pos.x, .y = txt->pos.y}; - sfText_setPosition(t->text, pos); - sfText_setUnicodeString(t->text, (unsigned int *)txt->text); + if (node) + painter_update_text_drawable(node->obj, txt); } static void draw_text_drawable(struct drawable *d) @@ -1,4 +1,3 @@ -#include <f8.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> @@ -69,22 +68,6 @@ static char *texts_cjson_get_string(cJSON *object, const char *key) return string; } -static wchar_t *texts_cjson_get_string_utf32(cJSON *object, const char *key) -{ - wchar_t *string = NULL; - cJSON *item = cJSON_GetObjectItem(object, key); - if (cJSON_IsString(item)) { - char *value = cJSON_GetStringValue(item); - if (value != NULL) { - size_t size = utf8_strlen(value) + 1; - string = calloc(size, sizeof(wchar_t)); - if (string != NULL) - utf8to32_strcpy(string, value); - } - } - return string; -} - static int texts_cjson_get_int(cJSON *object, const char *key) { int value = 0; @@ -131,7 +114,7 @@ struct idlist *load_texts_from_json(const char *filename) text->type = texts_cjson_get_string(item, "type"); text->scene = texts_cjson_get_string(item, "scene"); - text->text = texts_cjson_get_string_utf32(item, "text"); + text->text = texts_cjson_get_string(item, "text"); text->font = texts_cjson_get_string(item, "font"); text->size = texts_cjson_get_int(item, "size"); text->pos.x = texts_cjson_get_int(item, "x"); @@ -200,10 +183,9 @@ struct idlist *load_texts(char *filename) * (strlen((char *)ev.data.scalar.value) + 1)); strcpy(text->scene, (char *)ev.data.scalar.value); } else if (!strcmp((char *)event.data.scalar.value, "text")) { - text->text - = calloc((utf8_strlen((char *)ev.data.scalar.value)) + 1, - sizeof(size_t)); - utf8to32_strcpy(text->text, (char *)ev.data.scalar.value); + text->text = malloc(sizeof(char) + * (strlen((char *)ev.data.scalar.value) + 1)); + strcpy(text->text, (char *)ev.data.scalar.value); } else if (!strcmp((char *)event.data.scalar.value, "font")) { text->font = malloc(sizeof(char) * (strlen((char *)ev.data.scalar.value) + 1)); |