diff options
author | Alex Auvolat <alex@adnab.me> | 2017-04-21 18:53:18 +0200 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2017-04-21 18:53:18 +0200 |
commit | 575b140a57e2bb86f05b8d18f01a9f2cea1f5034 (patch) | |
tree | bfa9e13cb68d0d9510453cfdd4cd75eece826aa1 /src/lib/libkogata | |
parent | ed153e6a5b9f001bbe49128e6bc53053f55dd37b (diff) | |
download | kogata-575b140a57e2bb86f05b8d18f01a9f2cea1f5034.tar.gz kogata-575b140a57e2bb86f05b8d18f01a9f2cea1f5034.zip |
more glitch art :)
Diffstat (limited to 'src/lib/libkogata')
-rw-r--r-- | src/lib/libkogata/draw.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/lib/libkogata/draw.c b/src/lib/libkogata/draw.c index d9a4268..29cae31 100644 --- a/src/lib/libkogata/draw.c +++ b/src/lib/libkogata/draw.c @@ -244,6 +244,7 @@ typedef struct font { uint32_t nchars; } ascii_bitmap; }; + int nrefs; } font_t; font_t *g_load_ascii_bitmap_font(fd_t f) { @@ -272,6 +273,8 @@ font_t *g_load_ascii_bitmap_font(fd_t f) { size_t rd = sc_read(f, sizeof(h), h.ch * h.nchars, (char*)font->ascii_bitmap.data); if (rd != h.ch * h.nchars) goto error; + font->nrefs = 1; + return font; error: @@ -291,12 +294,19 @@ font_t *g_load_font(const char* fontname) { return 0; } -void g_free_font(font_t *f) { - if (f->type == FONT_ASCII_BITMAP) { - free(f->ascii_bitmap.data); - } +void g_incref_font(font_t *f) { + f->nrefs++; +} - free(f); +void g_decref_font(font_t *f) { + f->nrefs--; + + if (f->nrefs == 0) { + if (f->type == FONT_ASCII_BITMAP) { + free(f->ascii_bitmap.data); + } + free(f); + } } int g_text_width(font_t *font, const char* text) { |