annotate nuklear_ui/font_android.c @ 1843:13abdc98379e mame_interp

Get Android build target working on mame_interp branch
author Michael Pavone <pavone@retrodev.com>
date Thu, 18 Apr 2019 22:06:47 -0700
parents 78abbabfd58d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1839
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <stdio.h>
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #include <stdlib.h>
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3 #include <stdint.h>
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 #include <limits.h>
1843
13abdc98379e Get Android build target working on mame_interp branch
Michael Pavone <pavone@retrodev.com>
parents: 1839
diff changeset
5 #include <string.h>
1839
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6 #include "../util.h"
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 #include "../paths.h"
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8 #include "sfnt.h"
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10 typedef enum {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 STATE_DEFAULT,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12 STATE_DECL,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 STATE_COMMENT,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 STATE_TAG,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15 STATE_PRE_ATTRIB,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16 STATE_ATTRIB,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17 STATE_PRE_VALUE,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 STATE_VALUE
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 } parse_state;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 #define DEFAULT_WEIGHT 400
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
22
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
23 char *default_font_path(void)
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
24 {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
25 //Would probably be better to call into Java for this, but this should do for now
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
26 FILE *f = fopen("/system/etc/fonts.xml", "rb");
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
27 if (!f) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
28 return NULL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 long size = file_size(f);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31 char *font_xml = malloc(size+1);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32 if (size != fread(font_xml, 1, size, f)) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33 free(font_xml);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34 fclose(f);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
35 return NULL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
36 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
37 fclose(f);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
38 font_xml[size] = 0;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
39
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
40 char *last_tag = NULL, *last_attrib = NULL, *last_value = NULL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
41 uint8_t last_style_was_normal = 0;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 char *capture_best = NULL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43 char *best = NULL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
44 int best_weight_diff = INT_MAX;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
45 int last_weight = INT_MAX;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
46 parse_state state = STATE_DEFAULT;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
47 for(char *cur = font_xml; *cur; ++cur) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
48 switch (state)
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
49 {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
50 case STATE_DEFAULT:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
51 if (*cur == '<' && cur[1]) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
52 cur++;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
53 switch(*cur)
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
54 {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 case '?':
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 state = STATE_DECL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
58 case '!':
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
59 if (cur[1] == '-' && cur[2] == '-') {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
60 state = STATE_COMMENT;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
61 cur++;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
62 } else {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
63 debug_message("Invalid comment\n");
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
64 cur = font_xml + size - 1;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
65 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
66 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
67 default:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
68 if (capture_best) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
69 cur[-1] = 0;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
70 best = strip_ws(capture_best);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
71 capture_best = NULL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
72 best_weight_diff = abs(last_weight - DEFAULT_WEIGHT);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
73 debug_message("Found candidate %s with weight %d\n", best, last_weight);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
74 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
75 state = STATE_TAG;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
76 last_tag = cur;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
77 last_attrib = NULL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
78 last_value = NULL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
79 last_weight = INT_MAX;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
80 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
81 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
82 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
83 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
84 case STATE_DECL:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
85 if (*cur == '?' && cur[1] == '>') {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
86 cur++;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
87 state = STATE_DEFAULT;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
88 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
89 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
90 case STATE_COMMENT:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
91 if (*cur == '-' && cur[1] == '-' && cur[2] == '>') {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
92 cur += 2;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
93 state = STATE_DEFAULT;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
94 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
95 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
96 case STATE_TAG:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
97 if (*cur == ' ' || *cur == '\t' || *cur == '\n' || *cur == '\r') {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
98 *cur = 0;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
99 state = STATE_PRE_ATTRIB;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
100 } else if (*cur == '>') {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
101 *cur = 0;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
102 state = STATE_DEFAULT;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
103 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
104 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
105 case STATE_PRE_ATTRIB:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
106 if (!(*cur == ' ' || *cur == '\t' || *cur == '\n' || *cur == '\r')) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
107 if (*cur == '>') {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
108 state = STATE_DEFAULT;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
109 if (last_style_was_normal && abs(last_weight - DEFAULT_WEIGHT) < best_weight_diff) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
110 capture_best = cur + 1;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
111 } else if (best && !strcmp("/family", last_tag)) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
112 debug_message("found family close tag, stopping search\n");
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
113 cur = font_xml + size - 1;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
114 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
115 } else {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
116 last_attrib = cur;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
117 state = STATE_ATTRIB;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
118 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
119 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
120 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
121 case STATE_ATTRIB:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
122 if (*cur == '=') {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
123 *cur = 0;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
124 state = STATE_PRE_VALUE;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
125 } else if (*cur == ' ' || *cur == '\t' || *cur == '\n' || *cur == '\r') {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
126 *cur = 0;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
127 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
128 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
129 case STATE_PRE_VALUE:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
130 if (*cur == '"') {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
131 state = STATE_VALUE;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
132 last_value = cur + 1;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
133 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
134 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
135 case STATE_VALUE:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
136 if (*cur == '"') {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
137 *cur = 0;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
138 state = STATE_PRE_ATTRIB;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
139 if (!strcmp("weight", last_attrib)) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
140 last_weight = atoi(last_value);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
141 } else if (!strcmp("style", last_attrib)) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
142 last_style_was_normal = !strcmp("normal", last_value);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
143 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
144 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
145 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
146 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
147 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
148 if (best) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
149 best = path_append("/system/fonts", best);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
150 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
151 free(font_xml);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
152 return best;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
153 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
154
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
155 static uint8_t *try_load_font(char *path, uint32_t *size_out)
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
156 {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
157 debug_message("Trying to load font %s\n", path);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
158 FILE *f = fopen(path, "rb");
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
159 free(path);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
160 if (!f) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
161 return NULL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
162 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
163 long size = file_size(f);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
164 uint8_t *buffer = malloc(size);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
165 if (size != fread(buffer, 1, size, f)) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
166 fclose(f);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
167 return NULL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
168 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
169 fclose(f);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
170 sfnt_container *sfnt = load_sfnt(buffer, size);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
171 if (!sfnt) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
172 free(buffer);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
173 return NULL;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
174 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
175 return sfnt_flatten(sfnt->tables, size_out);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
176 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
177
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
178 uint8_t *default_font(uint32_t *size_out)
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
179 {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
180 char *path = default_font_path();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
181 if (!path) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
182 goto error;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
183 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
184 uint8_t *ret = try_load_font(path, size_out);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
185 if (ret) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
186 return ret;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
187 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
188 error:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
189 //try some likely suspects if we failed to parse fonts.xml or failed to find the indicated font
1843
13abdc98379e Get Android build target working on mame_interp branch
Michael Pavone <pavone@retrodev.com>
parents: 1839
diff changeset
190 ret = try_load_font(strdup("/system/fonts/Roboto-Regular.ttf"), size_out);
1839
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
191 if (!ret) {
1843
13abdc98379e Get Android build target working on mame_interp branch
Michael Pavone <pavone@retrodev.com>
parents: 1839
diff changeset
192 ret = try_load_font(strdup("/system/fonts/DroidSans.ttf"), size_out);
1839
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
193 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
194 return ret;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
195 }