mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-27 04:07:05 +00:00
258901bab9
svn-id: r28966
316 lines
13 KiB
C++
316 lines
13 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* $URL$
|
|
* $Id$
|
|
*/
|
|
|
|
#include "graphics/font.h"
|
|
|
|
namespace Graphics {
|
|
|
|
// Built-in font
|
|
static const byte guifont[] = {
|
|
// Header
|
|
0, 0, 99, 1, 226, 8,
|
|
// Character width table
|
|
4, 8, 6, 8, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
8, 2, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
4, 3, 7, 8, 7, 7, 8, 4, 5, 5, 8, 7, 4, 7, 3, 8,
|
|
7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 3, 4, 7, 5, 7, 7,
|
|
8, 7, 7, 7, 7, 7, 7, 7, 7, 5, 7, 7, 7, 8, 7, 7,
|
|
7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 5, 8, 5, 8, 8,
|
|
7, 7, 7, 6, 7, 7, 7, 7, 7, 5, 6, 7, 5, 8, 7, 7,
|
|
7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 5, 3, 5, 7, 8,
|
|
7, 7, 7, 7, 7, 7, 0, 6, 7, 7, 7, 5, 5, 5, 7, 0,
|
|
6, 8, 8, 7, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0,
|
|
7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 7,
|
|
// Character table
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 0
|
|
1, 3, 6, 12, 24, 62, 3, 0, // 1
|
|
128, 192, 96, 48, 24, 124, 192, 0, // 2
|
|
0, 3, 62, 24, 12, 6, 3, 1, // 3
|
|
0, 192, 124, 24, 48, 96, 192, 128, // 4
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 5
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 6
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 7
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 8
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 9
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 10
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 11
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 12
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 13
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 14
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 15
|
|
237, 74, 72, 0, 0, 0, 0, 0, // 16
|
|
128, 128, 128, 0, 0, 0, 0, 0, // 17
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 18
|
|
60, 66, 153, 161, 161, 153, 66, 60, // 19
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 20
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 21
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 22
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 23
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 24
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 25
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 26
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 27
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 28
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 29
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 30
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 31
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 32
|
|
96, 96, 96, 96, 0, 0, 96, 0, // 33
|
|
102, 102, 102, 0, 0, 0, 0, 0, // 34
|
|
102, 102, 255, 102, 255, 102, 102, 0, // 35
|
|
24, 62, 96, 60, 6, 124, 24, 0, // 36
|
|
98, 102, 12, 24, 48, 102, 70, 0, // 37
|
|
60, 102, 60, 56, 103, 102, 63, 0, // 38
|
|
96, 48, 16, 0, 0, 0, 0, 0, // 39
|
|
24, 48, 96, 96, 96, 48, 24, 0, // 40
|
|
96, 48, 24, 24, 24, 48, 96, 0, // 41
|
|
0, 102, 60, 255, 60, 102, 0, 0, // 42
|
|
0, 24, 24, 126, 24, 24, 0, 0, // 43
|
|
0, 0, 0, 0, 0, 48, 48, 96, // 44
|
|
0, 0, 0, 126, 0, 0, 0, 0, // 45
|
|
0, 0, 0, 0, 0, 96, 96, 0, // 46
|
|
0, 3, 6, 12, 24, 48, 96, 0, // 47
|
|
60, 102, 102, 102, 102, 102, 60, 0, // 48
|
|
24, 24, 56, 24, 24, 24, 126, 0, // 49
|
|
60, 102, 6, 12, 48, 96, 126, 0, // 50
|
|
60, 102, 6, 28, 6, 102, 60, 0, // 51
|
|
6, 14, 30, 102, 127, 6, 6, 0, // 52
|
|
126, 96, 124, 6, 6, 102, 60, 0, // 53
|
|
60, 102, 96, 124, 102, 102, 60, 0, // 54
|
|
126, 102, 12, 24, 24, 24, 24, 0, // 55
|
|
60, 102, 102, 60, 102, 102, 60, 0, // 56
|
|
60, 102, 102, 62, 6, 102, 60, 0, // 57
|
|
0, 0, 96, 0, 0, 96, 0, 0, // 58
|
|
0, 0, 48, 0, 0, 48, 48, 96, // 59
|
|
14, 24, 48, 96, 48, 24, 14, 0, // 60
|
|
0, 0, 120, 0, 120, 0, 0, 0, // 61
|
|
112, 24, 12, 6, 12, 24, 112, 0, // 62
|
|
60, 102, 6, 12, 24, 0, 24, 0, // 63
|
|
0, 0, 0, 255, 255, 0, 0, 0, // 64
|
|
24, 60, 102, 126, 102, 102, 102, 0, // 65
|
|
124, 102, 102, 124, 102, 102, 124, 0, // 66
|
|
60, 102, 96, 96, 96, 102, 60, 0, // 67
|
|
120, 108, 102, 102, 102, 108, 120, 0, // 68
|
|
126, 96, 96, 120, 96, 96, 126, 0, // 69
|
|
126, 96, 96, 120, 96, 96, 96, 0, // 70
|
|
60, 102, 96, 110, 102, 102, 60, 0, // 71
|
|
102, 102, 102, 126, 102, 102, 102, 0, // 72
|
|
120, 48, 48, 48, 48, 48, 120, 0, // 73
|
|
30, 12, 12, 12, 12, 108, 56, 0, // 74
|
|
102, 108, 120, 112, 120, 108, 102, 0, // 75
|
|
96, 96, 96, 96, 96, 96, 126, 0, // 76
|
|
99, 119, 127, 107, 99, 99, 99, 0, // 77
|
|
102, 118, 126, 126, 110, 102, 102, 0, // 78
|
|
60, 102, 102, 102, 102, 102, 60, 0, // 79
|
|
124, 102, 102, 124, 96, 96, 96, 0, // 80
|
|
60, 102, 102, 102, 102, 60, 14, 0, // 81
|
|
124, 102, 102, 124, 120, 108, 102, 0, // 82
|
|
60, 102, 96, 60, 6, 102, 60, 0, // 83
|
|
126, 24, 24, 24, 24, 24, 24, 0, // 84
|
|
102, 102, 102, 102, 102, 102, 60, 0, // 85
|
|
102, 102, 102, 102, 102, 60, 24, 0, // 86
|
|
99, 99, 99, 107, 127, 119, 99, 0, // 87
|
|
102, 102, 60, 24, 60, 102, 102, 0, // 88
|
|
102, 102, 102, 60, 24, 24, 24, 0, // 89
|
|
126, 6, 12, 24, 48, 96, 126, 0, // 90
|
|
120, 96, 96, 96, 96, 96, 120, 0, // 91
|
|
3, 6, 12, 24, 48, 96, 192, 0, // 92
|
|
120, 24, 24, 24, 24, 24, 120, 0, // 93
|
|
0, 0, 0, 0, 0, 219, 219, 0, // 94
|
|
0, 0, 0, 0, 0, 0, 0, 255, // 95
|
|
102, 102, 102, 0, 0, 0, 0, 0, // 96
|
|
0, 0, 60, 6, 62, 102, 62, 0, // 97
|
|
0, 96, 96, 124, 102, 102, 124, 0, // 98
|
|
0, 0, 60, 96, 96, 96, 60, 0, // 99
|
|
0, 6, 6, 62, 102, 102, 62, 0, // 100
|
|
0, 0, 60, 102, 126, 96, 60, 0, // 101
|
|
0, 14, 24, 62, 24, 24, 24, 0, // 102
|
|
0, 0, 62, 102, 102, 62, 6, 124, // 103
|
|
0, 96, 96, 124, 102, 102, 102, 0, // 104
|
|
0, 48, 0, 112, 48, 48, 120, 0, // 105
|
|
0, 12, 0, 12, 12, 12, 12, 120, // 106
|
|
0, 96, 96, 108, 120, 108, 102, 0, // 107
|
|
0, 112, 48, 48, 48, 48, 120, 0, // 108
|
|
0, 0, 102, 127, 127, 107, 99, 0, // 109
|
|
0, 0, 124, 102, 102, 102, 102, 0, // 110
|
|
0, 0, 60, 102, 102, 102, 60, 0, // 111
|
|
0, 0, 124, 102, 102, 124, 96, 96, // 112
|
|
0, 0, 62, 102, 102, 62, 6, 6, // 113
|
|
0, 0, 124, 102, 96, 96, 96, 0, // 114
|
|
0, 0, 62, 96, 60, 6, 124, 0, // 115
|
|
0, 24, 126, 24, 24, 24, 14, 0, // 116
|
|
0, 0, 102, 102, 102, 102, 62, 0, // 117
|
|
0, 0, 102, 102, 102, 60, 24, 0, // 118
|
|
0, 0, 99, 107, 127, 62, 54, 0, // 119
|
|
0, 0, 102, 60, 24, 60, 102, 0, // 120
|
|
0, 0, 102, 102, 102, 62, 12, 120, // 121
|
|
0, 0, 126, 12, 24, 48, 126, 0, // 122
|
|
24, 48, 48, 96, 48, 48, 24, 0, // 123
|
|
96, 96, 96, 0, 96, 96, 96, 0, // 124
|
|
96, 48, 48, 24, 48, 48, 96, 0, // 125
|
|
0, 0, 97, 153, 134, 0, 0, 0, // 126
|
|
8, 12, 14, 255, 255, 14, 12, 8, // 127
|
|
60, 102, 96, 96, 102, 60, 24, 56, // 128
|
|
102, 0, 102, 102, 102, 102, 62, 0, // 129
|
|
12, 24, 60, 102, 126, 96, 60, 0, // 130
|
|
24, 36, 60, 6, 62, 102, 62, 0, // 131
|
|
102, 0, 60, 6, 62, 102, 62, 0, // 132
|
|
48, 24, 60, 6, 62, 102, 62, 0, // 133
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 134
|
|
0, 60, 96, 96, 96, 60, 24, 56, // 135
|
|
24, 36, 60, 102, 126, 96, 60, 0, // 136
|
|
102, 0, 60, 102, 126, 96, 60, 0, // 137
|
|
48, 24, 60, 102, 126, 96, 60, 0, // 138
|
|
0, 216, 0, 112, 48, 48, 120, 0, // 139
|
|
48, 72, 0, 112, 48, 48, 120, 0, // 140
|
|
96, 48, 0, 112, 48, 48, 120, 0, // 141
|
|
102, 24, 60, 102, 126, 102, 102, 0, // 142
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 143
|
|
24, 48, 124, 96, 120, 96, 124, 0, // 144
|
|
0, 0, 108, 26, 126, 216, 110, 0, // 145
|
|
30, 40, 40, 126, 72, 136, 142, 0, // 146
|
|
24, 36, 60, 102, 102, 102, 60, 0, // 147
|
|
102, 0, 60, 102, 102, 102, 60, 0, // 148
|
|
48, 24, 60, 102, 102, 102, 60, 0, // 149
|
|
24, 36, 0, 102, 102, 102, 62, 0, // 150
|
|
48, 24, 102, 102, 102, 102, 62, 0, // 151
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 152
|
|
102, 60, 102, 102, 102, 102, 60, 0, // 153
|
|
102, 0, 102, 102, 102, 102, 60, 0, // 154
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 155
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 156
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 157
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 158
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 159
|
|
12, 24, 60, 6, 62, 102, 62, 0, // 160
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 161
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 162
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 163
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 164
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 165
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 166
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 167
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 168
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 169
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 170
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 171
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 172
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 173
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 174
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 175
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 176
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 177
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 178
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 179
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 180
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 181
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 182
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 183
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 184
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 185
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 186
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 187
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 188
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 189
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 190
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 191
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 192
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 193
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 194
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 195
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 196
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 197
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 198
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 199
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 200
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 201
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 202
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 203
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 204
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 205
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 206
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 207
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 208
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 209
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 210
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 211
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 212
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 213
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 214
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 215
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 216
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 217
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 218
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 219
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 220
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 221
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 222
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 223
|
|
0, 0, 0, 0, 0, 0, 0, 0, // 224
|
|
28, 54, 54, 124, 102, 102, 124, 64, // 225
|
|
0, 0, 0 // ???
|
|
};
|
|
|
|
int ScummFont::getCharWidth(byte chr) const {
|
|
return guifont[chr+6];
|
|
}
|
|
|
|
void ScummFont::drawChar(Surface *dst, byte chr, int tx, int ty, uint32 color) const {
|
|
assert(dst != 0);
|
|
byte *ptr = (byte *)dst->getBasePtr(tx, ty);
|
|
|
|
const byte *tmp = guifont + 6 + guifont[4] + chr * 8;
|
|
uint buffer = 0;
|
|
uint mask = 0;
|
|
|
|
for (int y = 0; y < 8; y++) {
|
|
if (ty + y < 0 || ty + y >= dst->h)
|
|
continue;
|
|
for (int x = 0; x < 8; x++) {
|
|
if (tx + x < 0 || tx + x >= dst->w)
|
|
continue;
|
|
unsigned char c;
|
|
mask >>= 1;
|
|
if (mask == 0) {
|
|
buffer = *tmp++;
|
|
mask = 0x80;
|
|
}
|
|
c = ((buffer & mask) != 0);
|
|
if (c) {
|
|
if (dst->bytesPerPixel == 1)
|
|
ptr[x] = color;
|
|
else if (dst->bytesPerPixel == 2)
|
|
((uint16 *)ptr)[x] = color;
|
|
}
|
|
}
|
|
ptr += dst->pitch;
|
|
}
|
|
}
|
|
|
|
} // End of namespace Graphics
|