ScummVM API documentation
ThemeParser.h
1/* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#ifndef THEME_PARSER_H
23#define THEME_PARSER_H
24
25#include "common/scummsys.h"
26#include "common/formats/xmlparser.h"
27
28namespace GUI {
29
30class ThemeEngine;
31
33public:
34 ThemeParser(ThemeEngine *parent);
35
36 ~ThemeParser() override;
37
38 void setBaseResolution(int w, int h, float s) {
39 _baseWidth = w;
40 _baseHeight = h;
41 _scaleFactor = s;
42 }
43
44 bool getPaletteColor(const Common::String &name, int &r, int &g, int &b) {
45 if (!_palette.contains(name))
46 return false;
47
48 r = _palette[name].r;
49 g = _palette[name].g;
50 b = _palette[name].b;
51
52 return true;
53 }
54
55protected:
56 ThemeEngine *_theme;
57
58 CUSTOM_XML_PARSER(ThemeParser) {
59 XML_KEY(render_info)
60 XML_PROP(resolution, false)
61 XML_KEY(palette)
62 XML_KEY(color)
63 XML_PROP(name, true)
64 XML_PROP(rgb, true)
65 KEY_END()
66 KEY_END()
67
68 XML_KEY(fonts)
69 XML_KEY(font)
70 XML_PROP(id, true)
71 XML_PROP(file, false)
72 XML_PROP(resolution, false)
73 XML_PROP(scalable_file, false)
74 XML_PROP(point_size, false)
75 XML_KEY(language)
76 XML_PROP(id, true)
77 XML_PROP(file, false)
78 XML_PROP(scalable_file, false)
79 XML_PROP(point_size, false)
80 KEY_END()
81 KEY_END()
82
83 XML_KEY(text_color)
84 XML_PROP(id, true);
85 XML_PROP(color, true);
86 KEY_END()
87 KEY_END()
88
89 XML_KEY(bitmaps)
90 XML_KEY(bitmap)
91 XML_PROP(filename, true)
92 XML_PROP(resolution, false)
93 XML_PROP(scalable_file, false)
94 XML_PROP(width, false)
95 XML_PROP(height, false)
96 KEY_END()
97 KEY_END()
98
99 XML_KEY(cursor)
100 XML_PROP(file, true)
101 XML_PROP(hotspot, true)
102 XML_PROP(resolution, false)
103 XML_PROP(type, false)
104 KEY_END()
105
106 XML_KEY(defaults)
107 XML_PROP(stroke, false)
108 XML_PROP(shadow, false)
109 XML_PROP(bevel, false)
110 XML_PROP(factor, false)
111 XML_PROP(fg_color, false)
112 XML_PROP(bg_color, false)
113 XML_PROP(gradient_start, false)
114 XML_PROP(gradient_end, false)
115 XML_PROP(bevel_color, false)
116 XML_PROP(gradient_factor, false)
117 XML_PROP(fill, false)
118 KEY_END()
119
120 XML_KEY(drawdata)
121 XML_PROP(id, true)
122 XML_PROP(cache, false)
123 XML_PROP(resolution, false)
124
125 XML_KEY(defaults)
126 XML_PROP(stroke, false)
127 XML_PROP(shadow, false)
128 XML_PROP(bevel, false)
129 XML_PROP(factor, false)
130 XML_PROP(fg_color, false)
131 XML_PROP(bg_color, false)
132 XML_PROP(gradient_start, false)
133 XML_PROP(gradient_end, false)
134 XML_PROP(bevel_color, false)
135 XML_PROP(gradient_factor, false)
136 XML_PROP(fill, false)
137 KEY_END()
138
139 XML_KEY(drawstep)
140 XML_PROP(func, true)
141 XML_PROP(stroke, false)
142 XML_PROP(shadow, false)
143 XML_PROP(bevel, false)
144 XML_PROP(factor, false)
145 XML_PROP(fg_color, false)
146 XML_PROP(bg_color, false)
147 XML_PROP(gradient_start, false)
148 XML_PROP(gradient_end, false)
149 XML_PROP(gradient_factor, false)
150 XML_PROP(bevel_color, false)
151 XML_PROP(fill, false)
152 XML_PROP(radius, false)
153 XML_PROP(width, false)
154 XML_PROP(height, false)
155 XML_PROP(xpos, false)
156 XML_PROP(ypos, false)
157 XML_PROP(padding, false)
158 XML_PROP(orientation, false)
159 XML_PROP(file, false)
160 XML_PROP(autoscale, false)
161 XML_PROP(clip, false)
162 KEY_END()
163
164 XML_KEY(text)
165 XML_PROP(font, true)
166 XML_PROP(text_color, true)
167 XML_PROP(vertical_align, true)
168 XML_PROP(horizontal_align, true)
169 KEY_END()
170 KEY_END()
171
172 KEY_END() // render_info end
173
174 XML_KEY(layout_info)
175 XML_PROP(resolution, false)
176 XML_KEY(globals)
177 XML_PROP(resolution, false)
178 XML_KEY(def)
179 XML_PROP(var, true)
180 XML_PROP(value, true)
181 XML_PROP(resolution, false)
182 XML_PROP(scalable, false)
183 KEY_END()
184
185 XML_KEY(widget)
186 XML_PROP(name, true)
187 XML_PROP(size, false)
188 XML_PROP(pos, false)
189 XML_PROP(padding, false)
190 XML_PROP(resolution, false)
191 XML_PROP(textalign, false)
192 XML_PROP(rtl, false)
193 KEY_END()
194 KEY_END()
195
196 XML_KEY(dialog)
197 XML_PROP(name, true)
198 XML_PROP(overlays, true)
199 XML_PROP(size, false)
200 XML_PROP(shading, false)
201 XML_PROP(resolution, false)
202 XML_PROP(inset, false)
203 XML_KEY(layout)
204 XML_PROP(type, true)
205 XML_PROP(align, false)
206 XML_PROP(padding, false)
207 XML_PROP(spacing, false)
208 XML_PROP(resolution, false)
209
210 XML_KEY(import)
211 XML_PROP(layout, true)
212 KEY_END()
213
214 XML_KEY(widget)
215 XML_PROP(name, true)
216 XML_PROP(width, false)
217 XML_PROP(height, false)
218 XML_PROP(type, false)
219 XML_PROP(textalign, false)
220 XML_PROP(rtl, false)
221 XML_PROP(resolution, false)
222 KEY_END()
223
224 XML_KEY(space)
225 XML_PROP(size, false)
226 XML_PROP(resolution, false)
227 KEY_END()
228
229 XML_KEY_RECURSIVE(layout)
230 KEY_END()
231 KEY_END()
232 KEY_END()
233
235
236
237 bool parserCallback_render_info(ParserNode *node);
238 bool parserCallback_defaults(ParserNode *node);
239 bool parserCallback_font(ParserNode *node);
240 bool parserCallback_text_color(ParserNode *node);
241 bool parserCallback_fonts(ParserNode *node);
242 bool parserCallback_language(ParserNode *node);
243 bool parserCallback_text(ParserNode *node);
244 bool parserCallback_palette(ParserNode *node);
245 bool parserCallback_color(ParserNode *node);
246 bool parserCallback_drawstep(ParserNode *node);
247 bool parserCallback_drawdata(ParserNode *node);
248 bool parserCallback_bitmaps(ParserNode *node) { return true; }
249 bool parserCallback_bitmap(ParserNode *node);
250 bool parserCallback_cursor(ParserNode *node);
251
252
255 bool parserCallback_globals(ParserNode *node) { return true; }
256 bool parserCallback_def(ParserNode *node);
257 bool parserCallback_widget(ParserNode *node);
258 bool parserCallback_dialog(ParserNode *node);
259 bool parserCallback_layout(ParserNode *node);
260 bool parserCallback_space(ParserNode *node);
261 bool parserCallback_import(ParserNode *node);
262
263 bool closedKeyCallback(ParserNode *node) override;
264
265 bool resolutionCheck(const Common::String &resolution);
266
267 void cleanup() override;
268
269 Graphics::DrawStep *newDrawStep();
270 Graphics::DrawStep *defaultDrawStep();
271 bool parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawstep, bool functionSpecific);
272 bool parseCommonLayoutProps(ParserNode *node, const Common::String &var);
273
274 bool parseList(const char *key, int count, ...);
275 bool parseList(const Common::String &keyStr, int count, ...);
276 bool vparseList(const char *key, int count, va_list args);
277
278 Graphics::DrawStep *_defaultStepGlobal;
279 Graphics::DrawStep *_defaultStepLocal;
280
281 int16 _baseWidth, _baseHeight;
282 float _scaleFactor;
283
285 uint8 r, g, b;
286 };
287
289};
290
291} // End of namespace GUI
292
293#endif
Definition: hashmap.h:85
Definition: str.h:59
Definition: xmlparser.h:98
Definition: ThemeEngine.h:209
Definition: ThemeParser.h:32
void cleanup() override
bool closedKeyCallback(ParserNode *node) override
bool parserCallback_layout_info(ParserNode *node)
PARSER_END() bool parserCallback_render_info(ParserNode *node)
signed char * fill(signed char *first, signed char *last, Value val)
Definition: algorithm.h:168
Definition: xmlparser.h:145
Definition: ThemeParser.h:284
Definition: VectorRenderer.h:51