Mercurial > vba-clojure
comparison src/common/Text.cpp @ 19:5e8e5083da94
brought in common and gba, fixed problems with outdated Makefile.am files in both of these packages
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sun, 04 Mar 2012 14:33:52 -0600 |
parents | f9f4f1b99eed |
children |
comparison
equal
deleted
inserted
replaced
18:ac56489c2ca6 | 19:5e8e5083da94 |
---|---|
1 /* FCE Ultra - NES/Famicom Emulator | |
2 * | |
3 * Copyright notice for this file: | |
4 * Copyright (C) 2002 Ben Parnell | |
5 * | |
6 * This program is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * This program is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
19 */ | |
20 | |
21 /* Code originally from fceu/drawing.h file, adapted by Forgotten | |
22 */ | |
23 #include "System.h" | |
24 | |
25 bool outlinedText = true, transparentText = false; | |
26 int textColor = 0, textMethod = 1; | |
27 | |
28 extern u32 RGB_LOW_BITS_MASK; | |
29 | |
30 static const u8 fontdata2[2048] = { | |
31 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e, 0x7e, 0xff, 0xdb, 0xff, | |
32 0xc3, 0xe7, 0xff, 0x7e, 0x36, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c, 0x08, 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08, 0x00, | |
33 0x1c, | |
34 0x3e, 0x1c, 0x7f, 0x7f, 0x3e, 0x1c, 0x3e, 0x08, 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x3e, 0x00, 0x00, 0x18, 0x3c, 0x3c, | |
35 0x18, | |
36 0x00, 0x00, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0xff, 0xc3, | |
37 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xf0, 0xe0, 0xf0, 0xbe, 0x33, 0x33, 0x33, 0x1e, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, | |
38 0x7e, | |
39 0x18, 0xfc, 0xcc, 0xfc, 0x0c, 0x0c, 0x0e, 0x0f, 0x07, 0xfe, 0xc6, 0xfe, 0xc6, 0xc6, 0xe6, 0x67, 0x03, 0x99, 0x5a, 0x3c, | |
40 0xe7, | |
41 0xe7, 0x3c, 0x5a, 0x99, 0x01, 0x07, 0x1f, 0x7f, 0x1f, 0x07, 0x01, 0x00, 0x40, 0x70, 0x7c, 0x7f, 0x7c, 0x70, 0x40, 0x00, | |
42 0x18, | |
43 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00, 0xfe, 0xdb, 0xdb, 0xde, 0xd8, | |
44 0xd8, | |
45 0xd8, 0x00, 0x7c, 0xc6, 0x1c, 0x36, 0x36, 0x1c, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00, 0x18, 0x3c, | |
46 0x7e, | |
47 0x18, 0x7e, 0x3c, 0x18, 0xff, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, | |
48 0x00, | |
49 0x00, 0x18, 0x30, 0x7f, 0x30, 0x18, 0x00, 0x00, 0x00, 0x0c, 0x06, 0x7f, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, | |
50 0x03, | |
51 0x7f, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00, 0x00, | |
52 0xff, | |
53 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00, | |
54 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1e, 0x1e, 0x0c, 0x0c, 0x00, 0x0c, 0x00, 0x36, 0x36, 0x36, 0x00, | |
55 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x7f, 0x36, 0x7f, 0x36, 0x36, 0x00, 0x0c, 0x3e, 0x03, 0x1e, 0x30, 0x1f, 0x0c, 0x00, | |
56 0x00, | |
57 0x63, 0x33, 0x18, 0x0c, 0x66, 0x63, 0x00, 0x1c, 0x36, 0x1c, 0x6e, 0x3b, 0x33, 0x6e, 0x00, 0x06, 0x06, 0x03, 0x00, 0x00, | |
58 0x00, | |
59 0x00, 0x00, 0x18, 0x0c, 0x06, 0x06, 0x06, 0x0c, 0x18, 0x00, 0x06, 0x0c, 0x18, 0x18, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x66, | |
60 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x3f, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, | |
61 0x0c, | |
62 0x06, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x60, 0x30, 0x18, | |
63 0x0c, | |
64 0x06, 0x03, 0x01, 0x00, 0x3e, 0x63, 0x73, 0x7b, 0x6f, 0x67, 0x3e, 0x00, 0x0c, 0x0e, 0x0c, 0x0c, 0x0c, 0x0c, 0x3f, 0x00, | |
65 0x1e, | |
66 0x33, 0x30, 0x1c, 0x06, 0x33, 0x3f, 0x00, 0x1e, 0x33, 0x30, 0x1c, 0x30, 0x33, 0x1e, 0x00, 0x38, 0x3c, 0x36, 0x33, 0x7f, | |
67 0x30, | |
68 0x78, 0x00, 0x3f, 0x03, 0x1f, 0x30, 0x30, 0x33, 0x1e, 0x00, 0x1c, 0x06, 0x03, 0x1f, 0x33, 0x33, 0x1e, 0x00, 0x3f, 0x33, | |
69 0x30, | |
70 0x18, 0x0c, 0x0c, 0x0c, 0x00, 0x1e, 0x33, 0x33, 0x1e, 0x33, 0x33, 0x1e, 0x00, 0x1e, 0x33, 0x33, 0x3e, 0x30, 0x18, 0x0e, | |
71 0x00, | |
72 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x06, 0x18, 0x0c, 0x06, 0x03, | |
73 0x06, | |
74 0x0c, 0x18, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x1e, | |
75 0x33, | |
76 0x30, 0x18, 0x0c, 0x00, 0x0c, 0x00, | |
77 0x3e, 0x63, 0x7b, 0x7b, 0x7b, 0x03, 0x1e, 0x00, 0x0c, 0x1e, 0x33, 0x33, 0x3f, 0x33, 0x33, 0x00, 0x3f, 0x66, 0x66, 0x3e, | |
78 0x66, 0x66, 0x3f, 0x00, 0x3c, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3c, 0x00, 0x1f, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1f, 0x00, | |
79 0x7f, | |
80 0x46, 0x16, 0x1e, 0x16, 0x46, 0x7f, 0x00, 0x7f, 0x46, 0x16, 0x1e, 0x16, 0x06, 0x0f, 0x00, 0x3c, 0x66, 0x03, 0x03, 0x73, | |
81 0x66, | |
82 0x7c, 0x00, 0x33, 0x33, 0x33, 0x3f, 0x33, 0x33, 0x33, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x78, 0x30, | |
83 0x30, 0x30, 0x33, 0x33, 0x1e, 0x00, 0x67, 0x66, 0x36, 0x1e, 0x36, 0x66, 0x67, 0x00, 0x0f, 0x06, 0x06, 0x06, 0x46, 0x66, | |
84 0x7f, | |
85 0x00, 0x63, 0x77, 0x7f, 0x7f, 0x6b, 0x63, 0x63, 0x00, 0x63, 0x67, 0x6f, 0x7b, 0x73, 0x63, 0x63, 0x00, 0x1c, 0x36, 0x63, | |
86 0x63, | |
87 0x63, 0x36, 0x1c, 0x00, 0x3f, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x0f, 0x00, 0x1e, 0x33, 0x33, 0x33, 0x3b, 0x1e, 0x38, 0x00, | |
88 0x3f, | |
89 0x66, 0x66, 0x3e, 0x36, 0x66, 0x67, 0x00, 0x1e, 0x33, 0x07, 0x0e, 0x38, 0x33, 0x1e, 0x00, 0x3f, 0x2d, 0x0c, 0x0c, 0x0c, | |
90 0x0c, | |
91 0x1e, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3f, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x1e, 0x0c, 0x00, 0x63, 0x63, | |
92 0x63, | |
93 0x6b, 0x7f, 0x77, 0x63, 0x00, 0x63, 0x63, 0x36, 0x1c, 0x1c, 0x36, 0x63, 0x00, 0x33, 0x33, 0x33, 0x1e, 0x0c, 0x0c, 0x1e, | |
94 0x00, | |
95 0x7f, 0x63, 0x31, 0x18, 0x4c, 0x66, 0x7f, 0x00, 0x1e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1e, 0x00, 0x03, 0x06, 0x0c, 0x18, | |
96 0x30, | |
97 0x60, 0x40, 0x00, 0x1e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1e, 0x00, 0x08, 0x1c, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, | |
98 0x00, | |
99 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, | |
100 0x0c, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x6e, 0x00, 0x07, 0x06, 0x06, 0x3e, | |
101 0x66, 0x66, 0x3b, 0x00, 0x00, 0x00, 0x1e, 0x33, 0x03, 0x33, 0x1e, 0x00, 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6e, 0x00, | |
102 0x00, | |
103 0x00, 0x1e, 0x33, 0x3f, 0x03, 0x1e, 0x00, 0x1c, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x6e, 0x33, 0x33, | |
104 0x3e, | |
105 0x30, 0x1f, 0x07, 0x06, 0x36, 0x6e, 0x66, 0x66, 0x67, 0x00, 0x0c, 0x00, 0x0e, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x30, 0x00, | |
106 0x30, 0x30, 0x30, 0x33, 0x33, 0x1e, 0x07, 0x06, 0x66, 0x36, 0x1e, 0x36, 0x67, 0x00, 0x0e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, | |
107 0x1e, | |
108 0x00, 0x00, 0x00, 0x33, 0x7f, 0x7f, 0x6b, 0x63, 0x00, 0x00, 0x00, 0x1f, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x1e, | |
109 0x33, | |
110 0x33, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x3b, 0x66, 0x66, 0x3e, 0x06, 0x0f, 0x00, 0x00, 0x6e, 0x33, 0x33, 0x3e, 0x30, 0x78, | |
111 0x00, | |
112 0x00, 0x3b, 0x6e, 0x66, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x3e, 0x03, 0x1e, 0x30, 0x1f, 0x00, 0x08, 0x0c, 0x3e, 0x0c, 0x0c, | |
113 0x2c, | |
114 0x18, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6e, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x1e, 0x0c, 0x00, 0x00, 0x00, | |
115 0x63, | |
116 0x6b, 0x7f, 0x7f, 0x36, 0x00, 0x00, 0x00, 0x63, 0x36, 0x1c, 0x36, 0x63, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x3e, 0x30, | |
117 0x1f, | |
118 0x00, 0x00, 0x3f, 0x19, 0x0c, 0x26, 0x3f, 0x00, 0x38, 0x0c, 0x0c, 0x07, 0x0c, 0x0c, 0x38, 0x00, 0x18, 0x18, 0x18, 0x00, | |
119 0x18, | |
120 0x18, 0x18, 0x00, 0x07, 0x0c, 0x0c, 0x38, 0x0c, 0x0c, 0x07, 0x00, 0x6e, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
121 0x08, | |
122 0x1c, 0x36, 0x63, 0x63, 0x7f, 0x00, | |
123 0x1e, 0x33, 0x03, 0x33, 0x1e, 0x18, 0x30, 0x1e, 0x00, 0x33, 0x00, 0x33, 0x33, 0x33, 0x7e, 0x00, 0x38, 0x00, 0x1e, 0x33, | |
124 0x3f, 0x03, 0x1e, 0x00, 0x7e, 0xc3, 0x3c, 0x60, 0x7c, 0x66, 0xfc, 0x00, 0x33, 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x7e, 0x00, | |
125 0x07, | |
126 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x7e, 0x00, 0x0c, 0x0c, 0x1e, 0x30, 0x3e, 0x33, 0x7e, 0x00, 0x00, 0x00, 0x1e, 0x03, 0x03, | |
127 0x1e, | |
128 0x30, 0x1c, 0x7e, 0xc3, 0x3c, 0x66, 0x7e, 0x06, 0x3c, 0x00, 0x33, 0x00, 0x1e, 0x33, 0x3f, 0x03, 0x1e, 0x00, 0x07, 0x00, | |
129 0x1e, 0x33, 0x3f, 0x03, 0x1e, 0x00, 0x33, 0x00, 0x0e, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x3e, 0x63, 0x1c, 0x18, 0x18, 0x18, | |
130 0x3c, | |
131 0x00, 0x07, 0x00, 0x0e, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x63, 0x1c, 0x36, 0x63, 0x7f, 0x63, 0x63, 0x00, 0x0c, 0x0c, 0x00, | |
132 0x1e, | |
133 0x33, 0x3f, 0x33, 0x00, 0x38, 0x00, 0x3f, 0x06, 0x1e, 0x06, 0x3f, 0x00, 0x00, 0x00, 0xfe, 0x30, 0xfe, 0x33, 0xfe, 0x00, | |
134 0x7c, | |
135 0x36, 0x33, 0x7f, 0x33, 0x33, 0x73, 0x00, 0x1e, 0x33, 0x00, 0x1e, 0x33, 0x33, 0x1e, 0x00, 0x00, 0x33, 0x00, 0x1e, 0x33, | |
136 0x33, | |
137 0x1e, 0x00, 0x00, 0x07, 0x00, 0x1e, 0x33, 0x33, 0x1e, 0x00, 0x1e, 0x33, 0x00, 0x33, 0x33, 0x33, 0x7e, 0x00, 0x00, 0x07, | |
138 0x00, | |
139 0x33, 0x33, 0x33, 0x7e, 0x00, 0x00, 0x33, 0x00, 0x33, 0x33, 0x3e, 0x30, 0x1f, 0xc3, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, | |
140 0x00, | |
141 0x33, 0x00, 0x33, 0x33, 0x33, 0x33, 0x1e, 0x00, 0x18, 0x18, 0x7e, 0x03, 0x03, 0x7e, 0x18, 0x18, 0x1c, 0x36, 0x26, 0x0f, | |
142 0x06, | |
143 0x67, 0x3f, 0x00, 0x33, 0x33, 0x1e, 0x3f, 0x0c, 0x3f, 0x0c, 0x0c, 0x1f, 0x33, 0x33, 0x5f, 0x63, 0xf3, 0x63, 0xe3, 0x70, | |
144 0xd8, | |
145 0x18, 0x3c, 0x18, 0x18, 0x1b, 0x0e, | |
146 0x38, 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x7e, 0x00, 0x1c, 0x00, 0x0e, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x38, 0x00, 0x1e, | |
147 0x33, 0x33, 0x1e, 0x00, 0x00, 0x38, 0x00, 0x33, 0x33, 0x33, 0x7e, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x33, 0x33, 0x33, 0x00, | |
148 0x3f, | |
149 0x00, 0x33, 0x37, 0x3f, 0x3b, 0x33, 0x00, 0x3c, 0x36, 0x36, 0x7c, 0x00, 0x7e, 0x00, 0x00, 0x1c, 0x36, 0x36, 0x1c, 0x00, | |
150 0x3e, | |
151 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x06, 0x03, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, | |
152 0x00, 0x3f, 0x30, 0x30, 0x00, 0x00, 0xc3, 0x63, 0x33, 0x7b, 0xcc, 0x66, 0x33, 0xf0, 0xc3, 0x63, 0x33, 0xdb, 0xec, 0xf6, | |
153 0xf3, | |
154 0xc0, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00, 0x00, 0x33, 0x66, | |
155 0xcc, | |
156 0x66, 0x33, 0x00, 0x00, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, | |
157 0xdb, | |
158 0xee, 0xdb, 0x77, 0xdb, 0xee, 0xdb, 0x77, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, | |
159 0x18, | |
160 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x6c, 0x6c, 0x6c, 0x6c, 0x6f, 0x6c, 0x6c, 0x6c, 0x00, 0x00, | |
161 0x00, | |
162 0x00, 0x7f, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x6c, 0x6c, 0x6f, 0x60, 0x6f, 0x6c, 0x6c, | |
163 0x6c, | |
164 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x7f, 0x60, 0x6f, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6f, 0x60, | |
165 0x7f, | |
166 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x7f, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, | |
167 0x00, | |
168 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, | |
169 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
170 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, | |
171 0x18, | |
172 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x6c, 0x6c, 0x6c, 0x6c, 0xec, | |
173 0x6c, | |
174 0x6c, 0x6c, 0x6c, 0x6c, 0xec, 0x0c, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0c, 0xec, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, | |
175 0xef, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xef, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xec, 0x0c, 0xec, 0x6c, | |
176 0x6c, | |
177 0x6c, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xef, 0x00, 0xef, 0x6c, 0x6c, 0x6c, 0x18, 0x18, 0xff, | |
178 0x00, | |
179 0xff, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, | |
180 0x00, | |
181 0x00, 0x00, 0x00, 0xff, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xfc, 0x00, 0x00, 0x00, 0x18, 0x18, 0xf8, 0x18, 0xf8, | |
182 0x00, | |
183 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, | |
184 0x6c, | |
185 0x6c, 0xff, 0x6c, 0x6c, 0x6c, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, | |
186 0x00, | |
187 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, | |
188 0xff, | |
189 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, | |
190 0xff, | |
191 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, | |
192 0x00, 0x00, 0x6e, 0x3b, 0x13, 0x3b, 0x6e, 0x00, 0x00, 0x1e, 0x33, 0x1f, 0x33, 0x1f, 0x03, 0x03, 0x00, 0x3f, 0x33, 0x03, | |
193 0x03, 0x03, 0x03, 0x00, 0x00, 0x7f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x3f, 0x33, 0x06, 0x0c, 0x06, 0x33, 0x3f, 0x00, | |
194 0x00, | |
195 0x00, 0x7e, 0x1b, 0x1b, 0x1b, 0x0e, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x03, 0x00, 0x6e, 0x3b, 0x18, 0x18, | |
196 0x18, | |
197 0x18, 0x00, 0x3f, 0x0c, 0x1e, 0x33, 0x33, 0x1e, 0x0c, 0x3f, 0x1c, 0x36, 0x63, 0x7f, 0x63, 0x36, 0x1c, 0x00, 0x1c, 0x36, | |
198 0x63, 0x63, 0x36, 0x36, 0x77, 0x00, 0x38, 0x0c, 0x18, 0x3e, 0x33, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, | |
199 0x00, | |
200 0x00, 0x60, 0x30, 0x7e, 0xdb, 0xdb, 0x7e, 0x06, 0x03, 0x1c, 0x06, 0x03, 0x1f, 0x03, 0x06, 0x1c, 0x00, 0x1e, 0x33, 0x33, | |
201 0x33, | |
202 0x33, 0x33, 0x33, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x0c, 0x0c, 0x3f, 0x0c, 0x0c, 0x00, 0x3f, 0x00, | |
203 0x06, | |
204 0x0c, 0x18, 0x0c, 0x06, 0x00, 0x3f, 0x00, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x00, 0x3f, 0x00, 0x70, 0xd8, 0xd8, 0x18, 0x18, | |
205 0x18, | |
206 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1b, 0x1b, 0x0e, 0x0c, 0x0c, 0x00, 0x3f, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x6e, | |
207 0x3b, | |
208 0x00, 0x6e, 0x3b, 0x00, 0x00, 0x1c, 0x36, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, | |
209 0x00, | |
210 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xf0, 0x30, 0x30, 0x30, 0x37, 0x36, 0x3c, 0x38, 0x1e, 0x36, 0x36, 0x36, | |
211 0x36, | |
212 0x00, 0x00, 0x00, 0x0e, 0x18, 0x0c, 0x06, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00, 0x00, | |
213 0x00, | |
214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | |
215 }; | |
216 | |
217 static void calcColors(const int colorNum, int & lo, int & hi, int & out) | |
218 { | |
219 int redLo, redHi, greenLo, greenHi, blueLo, blueHi; | |
220 | |
221 if (colorNum == 0 || colorNum == 1 || colorNum == 2 || colorNum == 6) // white, red, yellow, or magenta | |
222 redLo = (0xf) << systemRedShift, redHi = (0x1f) << systemRedShift; | |
223 else | |
224 redLo = redHi = 0; | |
225 | |
226 if (colorNum == 0 || colorNum == 2 || colorNum == 3 || colorNum == 4) // white, yellow, green, or cyan | |
227 greenLo = (0xf) << systemGreenShift, greenHi = (0x1f) << systemGreenShift; | |
228 else | |
229 greenLo = greenHi = 0; | |
230 | |
231 if (colorNum == 0 || colorNum == 4 || colorNum == 5 || colorNum == 6) // white, cyan, blue, or magenta | |
232 blueLo = (0xf) << systemBlueShift, blueHi = (0x1f) << systemBlueShift; | |
233 else | |
234 blueLo = blueHi = 0; | |
235 | |
236 lo = redLo + greenLo + blueLo; | |
237 hi = redHi + greenHi + blueHi; | |
238 | |
239 if (colorNum == 7) // black | |
240 out = 0xffffffff; // white border | |
241 else | |
242 out = 0; // black border | |
243 } | |
244 | |
245 int lastColID = 0; | |
246 static void progressColorList(const char *& colorList, int & lo, int & hi, int & out) | |
247 { | |
248 if (*colorList) | |
249 { | |
250 if (*colorList != lastColID) | |
251 { | |
252 calcColors((int)(*colorList)-1, lo, hi, out); | |
253 lastColID = *colorList; | |
254 } | |
255 colorList++; | |
256 } | |
257 else | |
258 { | |
259 colorList = NULL; | |
260 } | |
261 } | |
262 | |
263 static void drawTextInternal(u8 *screen, int pitch, int x, int y, | |
264 const char *string, bool trans, const char *colorList = NULL) | |
265 { | |
266 if (colorList && !*colorList) | |
267 colorList = NULL; | |
268 | |
269 int loCol, hiCol, outCol; | |
270 calcColors(textColor, loCol, hiCol, outCol); | |
271 | |
272 lastColID = 0; | |
273 | |
274 const static int xd [8] = {-1, 0, 1, 1, 1, 0, -1, -1}; | |
275 const static int yd [8] = {-1, -1, -1, 0, 1, 1, 1, 0}; | |
276 | |
277 screen += y*pitch; | |
278 int inc = 2; | |
279 switch (systemColorDepth) | |
280 { | |
281 case 24: | |
282 inc = 3; | |
283 break; | |
284 case 32: | |
285 inc = 4; | |
286 break; | |
287 } | |
288 screen += x*inc; | |
289 | |
290 int xpos = x; | |
291 switch (systemColorDepth) | |
292 { | |
293 case 16: | |
294 { | |
295 while (*string) | |
296 { | |
297 char c = *string++; | |
298 u8 * scr = screen; | |
299 | |
300 if (colorList) | |
301 progressColorList(colorList, loCol, hiCol, outCol); | |
302 | |
303 u16 mask = u16(~RGB_LOW_BITS_MASK); | |
304 u16 *s = (u16 *)scr; | |
305 for (int h = 0-1; h < 8+1; h++) | |
306 { | |
307 for (int w = 0-1; w < 8+1; w++, s++) | |
308 { | |
309 int on = (h < 0 || w < 0 || h >= 8 || w >= 8) ? 0 : (fontdata2[(c<<3)+h]>>w)&1; | |
310 | |
311 int border = 0; | |
312 if (outlinedText) | |
313 for (int i = 0; i < 8; i++) | |
314 { | |
315 int h2 = h+yd[i], w2 = w+xd[i]; | |
316 border = (h2 < 0 || w2 < 0 || h2 >= 8 || w2 >= 8) ? 0 : (fontdata2[(c<<3)+h2]>>w2)&1; | |
317 if (border) | |
318 break; | |
319 } | |
320 | |
321 if (trans) | |
322 { | |
323 if (on) | |
324 *s = loCol + | |
325 ((*s & mask) >>1); | |
326 else if (border) | |
327 { | |
328 *s = outCol + | |
329 ((*s & mask) >>1); | |
330 } | |
331 } | |
332 else | |
333 { | |
334 if (on) | |
335 *s = hiCol; | |
336 else if (border) | |
337 *s = outCol; | |
338 } | |
339 } | |
340 scr += pitch; | |
341 s = (u16 *)scr; | |
342 } | |
343 screen += inc*8; | |
344 | |
345 xpos += 8; | |
346 if (xpos+8 > pitch>>1) // cut off text at right boundary | |
347 break; | |
348 } | |
349 break; | |
350 } | |
351 case 24: // TODO: verify this code's correctness | |
352 { | |
353 while (*string) | |
354 { | |
355 char c = *string++; | |
356 u8 * scr = screen; | |
357 | |
358 if (colorList) | |
359 progressColorList(colorList, loCol, hiCol, outCol); | |
360 | |
361 int h, w; | |
362 u8 *s = (u8 *)scr; | |
363 for (h = 0-1; h < 8+1; h++) | |
364 { | |
365 for (w = 0-1; w < 8+1; w++, s++) | |
366 { | |
367 int on = (h < 0 || w < 0 || h >= 8 || w >= 8) ? 0 : (fontdata2[(c<<3)+h]>>w)&1; | |
368 | |
369 int border = 0; | |
370 if (outlinedText) | |
371 for (int i = 0; i < 8; i++) | |
372 { | |
373 int h2 = h+yd[i], w2 = w+xd[i]; | |
374 border = (h2 < 0 || w2 < 0 || h2 >= 8 || w2 >= 8) ? 0 : (fontdata2[(c<<3)+h2]>>w2)&1; | |
375 if (border) | |
376 break; | |
377 } | |
378 | |
379 if (trans) | |
380 { | |
381 if (on) | |
382 { | |
383 u32 color = hiCol; | |
384 *s = ((color & 255)>>1)+(*s>>1); | |
385 *(s+1) = (((color >> 8) & 255)>>1)+(*(s+1)>>1); | |
386 *(s+2) = (((color >> 16) & 255)>>1)+(*(s+2)>>1); | |
387 } | |
388 else if (border) | |
389 { | |
390 u32 color = outCol; | |
391 *s = ((color & 255)>>1)+(*s>>1); | |
392 *(s+1) = (((color >> 8) & 255)>>1)+(*(s+1)>>1); | |
393 *(s+2) = (((color >> 16) & 255)>>1)+(*(s+2)>>1); | |
394 } | |
395 } | |
396 else | |
397 { | |
398 if (on) | |
399 { | |
400 u32 color = hiCol; | |
401 *s = (color & 255); | |
402 *(s+1) = (color >> 8) & 255; | |
403 *(s+2) = (color >> 16) & 255; | |
404 } | |
405 else if (border) | |
406 { | |
407 u32 color = outCol; | |
408 *s = (color & 255); | |
409 *(s+1) = (color >> 8) & 255; | |
410 *(s+2) = (color >> 16) & 255; | |
411 } | |
412 } | |
413 } | |
414 scr += pitch; | |
415 s = (u8 *)scr; | |
416 } | |
417 screen += inc*8; | |
418 | |
419 xpos += 8; | |
420 if (xpos+8 > pitch/3) // cut off text at right boundary | |
421 break; | |
422 } | |
423 break; | |
424 } | |
425 case 32: | |
426 { | |
427 while (*string) | |
428 { | |
429 char c = *string++; | |
430 u8 * scr = screen; | |
431 | |
432 if (colorList) | |
433 progressColorList(colorList, loCol, hiCol, outCol); | |
434 | |
435 int h, w; | |
436 u32 mask = 0xfefefe; | |
437 u32 *s = (u32 *)scr; | |
438 for (h = 0-1; h < 8+1; h++) | |
439 { | |
440 for (w = 0-1; w < 8+1; w++, s++) | |
441 { | |
442 int on = (h < 0 || w < 0 || h >= 8 || w >= 8) ? 0 : (fontdata2[(c<<3)+h]>>w)&1; | |
443 | |
444 int border = 0; | |
445 if (outlinedText) | |
446 for (int i = 0; i < 8; i++) | |
447 { | |
448 int h2 = h+yd[i], w2 = w+xd[i]; | |
449 border = (h2 < 0 || w2 < 0 || h2 >= 8 || w2 >= 8) ? 0 : (fontdata2[(c<<3)+h2]>>w2)&1; | |
450 if (border) | |
451 break; | |
452 } | |
453 | |
454 if (trans) | |
455 { | |
456 if (on) | |
457 *s = loCol + | |
458 ((*s & mask)>>1); | |
459 else if (border) | |
460 { | |
461 *s = outCol + | |
462 ((*s & mask)>>1); | |
463 } | |
464 } | |
465 else | |
466 { | |
467 if (on) | |
468 *s = hiCol; | |
469 else if (border) | |
470 *s = outCol; | |
471 } | |
472 } | |
473 scr += pitch; | |
474 s = (u32 *)scr; | |
475 } | |
476 screen += inc*8; | |
477 | |
478 xpos += 8; | |
479 if (xpos+8 > pitch>>2) // cut off text at right boundary | |
480 break; | |
481 } | |
482 break; | |
483 } | |
484 } | |
485 } | |
486 | |
487 void drawText(u8 *screen, int pitch, int x, int y, const char *string, const char *colorList) | |
488 { | |
489 drawTextInternal(screen, pitch, x, y, string, transparentText, colorList); | |
490 } | |
491 | |
492 void drawTextTransp(u8 *screen, int pitch, int x, int y, const char *string, const char *colorList) | |
493 { | |
494 drawTextInternal(screen, pitch, x, y, string, true, colorList); | |
495 } | |
496 |