summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2019-08-06 00:21:34 +0300
committerOxore <oxore@protonmail.com>2019-08-06 00:21:34 +0300
commit080497af66793c9e00ad886e083a368d26561a5b (patch)
tree5cd263acfa60e078c1d6b4bfb23974b69243731d
parent9144dbb427f8f71b1ef146c7fdb42b2570f94cb6 (diff)
Bring dependency on libf8 to painter module only
m---------deps/libf80
-rw-r--r--include/text.h2
-rw-r--r--src/engine.c4
-rw-r--r--src/painter.c32
-rw-r--r--src/text.c26
5 files changed, 27 insertions, 37 deletions
diff --git a/deps/libf8 b/deps/libf8
-Subproject d6a2b741bec1c0632a7d68384c3e6c818584988
+Subproject 8b31b59b1670b91b23ba7e9cafea35245a313d8
diff --git a/include/text.h b/include/text.h
index 53e3f77..a862071 100644
--- a/include/text.h
+++ b/include/text.h
@@ -4,7 +4,7 @@ typedef struct text {
char *type;
char *scene;
char *font;
- wchar_t *text;
+ char *text;
size_t size;
struct vector2ui pos;
size_t attr;
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)
diff --git a/src/text.c b/src/text.c
index 4674a7e..2ce74fd 100644
--- a/src/text.c
+++ b/src/text.c
@@ -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));