src/font.c

changeset 86
943bf9d7c6d6
parent 83
f7ce0db6f72b
child 88
6234b7ea48f3
equal deleted inserted replaced
85:f51eec4e7ccb 86:943bf9d7c6d6
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE. 25 * POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28 #include "ascension/ui/font.h"
29 #include "ascension/context.h" 28 #include "ascension/context.h"
30 #include "ascension/error.h" 29 #include "ascension/error.h"
30 #include "ascension/filesystem.h"
31 #include "ascension/ui/font.h"
31 32
32 #include <assert.h> 33 #include <assert.h>
33 #include <cx/array_list.h> 34 #include <cx/array_list.h>
34 35
35 void asc_font(enum AscFontStyle style, int size) { 36 void asc_font(enum AscFontStyle style, int size) {
38 } 39 }
39 40
40 static char const *asc_font_filename(enum AscFontStyle style) { 41 static char const *asc_font_filename(enum AscFontStyle style) {
41 switch (style) { 42 switch (style) {
42 case ASC_FONT_REGULAR: 43 case ASC_FONT_REGULAR:
43 return "fonts/OpenSans-Regular.ttf"; 44 return "OpenSans-Regular.ttf";
44 case ASC_FONT_BOLD: 45 case ASC_FONT_BOLD:
45 return "fonts/OpenSans-Bold.ttf"; 46 return "OpenSans-Bold.ttf";
46 case ASC_FONT_ITALIC: 47 case ASC_FONT_ITALIC:
47 return "fonts/OpenSans-Italic.ttf"; 48 return "OpenSans-Italic.ttf";
48 case ASC_FONT_BOLD_ITALIC: 49 case ASC_FONT_BOLD_ITALIC:
49 return "fonts/OpenSans-BoldItalic.ttf"; 50 return "OpenSans-BoldItalic.ttf";
50 default: 51 default:
51 assert(false); 52 assert(false);
52 return NULL; 53 return NULL;
53 } 54 }
54 } 55 }
76 void asc_font_cache_destroy(void) { 77 void asc_font_cache_destroy(void) {
77 assert(asc_font_cache != NULL); 78 assert(asc_font_cache != NULL);
78 cxListFree(asc_font_cache); 79 cxListFree(asc_font_cache);
79 } 80 }
80 81
81
82 TTF_Font *asc_font_load(AscFont font) { 82 TTF_Font *asc_font_load(AscFont font) {
83 CxIterator iter = cxListIterator(asc_font_cache); 83 CxIterator iter = cxListIterator(asc_font_cache);
84 cx_foreach(struct asc_font_cache_entry*, cache, iter) { 84 cx_foreach(struct asc_font_cache_entry*, cache, iter) {
85 if (cache->font.style == font.style && cache->font.size == font.size) { 85 if (cache->font.style == font.style && cache->font.size == font.size) {
86 return cache->ttf; 86 return cache->ttf;
87 } 87 }
88 } 88 }
89 89
90 struct asc_font_cache_entry entry; 90 struct asc_font_cache_entry entry;
91 entry.font = font; 91 entry.font = font;
92 entry.ttf = TTF_OpenFont(asc_font_filename(font.style), font.size); 92 cxmutstr fpath = asc_filesystem_combine_paths(cx_strcast(asc_context.font_path), cx_str(asc_font_filename(font.style)));
93 entry.ttf = TTF_OpenFont(fpath.ptr, font.size);
94 cx_strfree(&fpath);
93 if (entry.ttf == NULL) { 95 if (entry.ttf == NULL) {
94 asc_error(TTF_GetError()); 96 asc_error(TTF_GetError());
95 return NULL; 97 return NULL;
96 } else { 98 } else {
97 cxListAdd(asc_font_cache, &entry); 99 cxListAdd(asc_font_cache, &entry);

mercurial