annotate src/font.c @ 53:2e3a1945728e

make: build in debug for now
author David Demelier <markand@malikania.fr>
date Sat, 18 Jan 2020 08:44:53 +0100
parents b815621df3e3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * font.c -- basic font management
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdbool.h>
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <stdio.h>
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <SDL_ttf.h>
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
11
d1cdb90d9558 core: implement color manipulation, closes #2446
David Demelier <markand@malikania.fr>
parents: 10
diff changeset
25 #include "color.h"
39
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
26 #include "error.h"
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
27 #include "error_p.h"
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include "font.h"
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include "texture_p.h"
39
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
30 #include "util.h"
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 struct font {
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 TTF_Font *handle;
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 };
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 struct font *
46
b815621df3e3 core: remove all fixed width integers, closes #2460
David Demelier <markand@malikania.fr>
parents: 39
diff changeset
37 font_openf(const char *path, unsigned int size)
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 {
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 assert(path);
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 struct font *f;
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
42
39
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
43 f = ecalloc(1, sizeof (struct font));
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
44
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 if (!(f->handle = TTF_OpenFont(path, size))) {
39
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
46 error_sdl();
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 free(f);
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 return NULL;
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 }
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
50
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 return f;
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 }
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
53
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 struct font *
46
b815621df3e3 core: remove all fixed width integers, closes #2460
David Demelier <markand@malikania.fr>
parents: 39
diff changeset
55 font_openb(const void *buffer, size_t buflen, unsigned int size)
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 {
39
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
57 assert(buffer);
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
58
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 struct font *f;
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 SDL_RWops *ops;
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
39
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
62 f = ecalloc(1, sizeof (struct font));
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
39
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
64 if (!(ops = SDL_RWFromConstMem(buffer, buflen)) ||
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
65 (!(f->handle = TTF_OpenFontRW(ops, true, size)))) {
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
66 error_sdl();
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 free(f);
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 return NULL;
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 }
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
39
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
71 return f;
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 }
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 struct texture *
46
b815621df3e3 core: remove all fixed width integers, closes #2460
David Demelier <markand@malikania.fr>
parents: 39
diff changeset
75 font_render(struct font *font, const char *text, unsigned long color)
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 {
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 assert(font);
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 assert(text);
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
79
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 SDL_Color fg = {
11
d1cdb90d9558 core: implement color manipulation, closes #2446
David Demelier <markand@malikania.fr>
parents: 10
diff changeset
81 .r = COLOR_R(color),
d1cdb90d9558 core: implement color manipulation, closes #2446
David Demelier <markand@malikania.fr>
parents: 10
diff changeset
82 .g = COLOR_G(color),
d1cdb90d9558 core: implement color manipulation, closes #2446
David Demelier <markand@malikania.fr>
parents: 10
diff changeset
83 .b = COLOR_B(color),
d1cdb90d9558 core: implement color manipulation, closes #2446
David Demelier <markand@malikania.fr>
parents: 10
diff changeset
84 .a = COLOR_A(color)
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 };
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
86
39
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
87 SDL_Surface *surface;
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
88
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
89 if (!(surface = TTF_RenderUTF8_Blended(font->handle, text, fg))) {
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
90 error_sdl();
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
91 return NULL;
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
92 }
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
93
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
94 return texture_from_surface(surface);
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 }
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
96
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 void
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 font_close(struct font *font)
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 {
39
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
100 assert(font);
9d1421c09dfb core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents: 11
diff changeset
101
10
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 TTF_CloseFont(font->handle);
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 free(font);
c91c3272101b core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 }