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 
28 namespace GUI {
29 
30 class ThemeEngine;
31 
33 public:
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 
55 protected:
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 
234  } PARSER_END()
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 
284  struct PaletteColor {
285  uint8 r, g, b;
286  };
287 
289 };
290 
291 } // End of namespace GUI
292 
293 #endif
void cleanup() override
bool closedKeyCallback(ParserNode *node) override
Definition: str.h:59
Definition: VectorRenderer.h:51
Definition: ThemeParser.h:284
Definition: xmlparser.h:145
Definition: printman.h:30
PARSER_END() bool parserCallback_render_info(ParserNode *node)
Definition: xmlparser.h:98
Definition: hashmap.h:85
Definition: ThemeEngine.h:209
Definition: ThemeParser.h:32
signed char * fill(signed char *first, signed char *last, Value val)
Definition: algorithm.h:168
bool parserCallback_layout_info(ParserNode *node)