1 /*
2    Copyright (C) 2008 - 2018 by Mark de Wever <koraq@xs4all.nl>
3    Part of the Battle for Wesnoth Project https://www.wesnoth.org/
4 
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 2 of the License, or
8    (at your option) any later version.
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY.
11 
12    See the COPYING file for more details.
13 */
14 
15 #pragma once
16 
17 #include "color.hpp"
18 #include "font/text.hpp"
19 
20 #include <pango/pango-layout.h>
21 
22 #include <cstdint>
23 #include <string>
24 
25 struct SDL_Rect;
26 struct point;
27 class t_string;
28 
29 namespace wfl
30 {
31 class map_formula_callable;
32 } // namespace wfl
33 
34 namespace gui2
35 {
36 /**
37  * Creates a rectangle.
38  *
39  * @param origin                  The top left corner.
40  * @param size                    The width (x) and height (y).
41  *
42  * @returns                       SDL_Rect with the proper rectangle.
43  */
44 SDL_Rect create_rect(const point& origin, const point& size);
45 
46 /**
47  * Converts a color string to a color.
48  *
49  * @param color                   A color string see
50  *                                https://www.wesnoth.org/wiki/GUIVariable for
51  *                                more info.
52  *
53  * @returns                       The color.
54  */
55 color_t decode_color(const std::string& color);
56 
57 /**
58  * Converts a text alignment string to a text alignment.
59  *
60  * @param alignment               An alignment string see
61  *                                https://www.wesnoth.org/wiki/GUIVariable for
62  *                                more info.
63  *
64  * @returns                       The text alignment.
65  */
66 PangoAlignment decode_text_alignment(const std::string& alignment);
67 
68 /**
69  * Converts a text alignment to its string representation.
70  *
71  * @param alignment               An alignment.
72  *
73  * @returns                       An alignment string see
74  *                                https://www.wesnoth.org/wiki/GUIVariable for
75  *                                more info.
76  */
77 std::string encode_text_alignment(const PangoAlignment alignment);
78 
79 /**
80  * Converts a font style string to a font style.
81  *
82  * @param style                   A font style string see
83  *                                https://www.wesnoth.org/wiki/GUIVariable for
84  *                                more info.
85  *
86  * @returns                       The font style.
87  */
88 font::pango_text::FONT_STYLE decode_font_style(const std::string& style);
89 
90 /**
91  * Returns a default error message if a mandatory widget is omitted.
92  *
93  * @param id                      The id of the omitted widget.
94  * @returns                       The error message.
95  */
96 t_string missing_widget(const std::string& id);
97 
98 /**
99  * Gets a formula object with the screen size.
100  *
101  * @param variable                A formula object in which the screen_width,
102  *                                screen_height, gamemap_width and
103  *                                gamemap_height variable will set to the
104  *                                current values of these in settings. It
105  *                                modifies the object send.
106  */
107 void get_screen_size_variables(wfl::map_formula_callable& variable);
108 
109 /**
110  * Gets a formula object with the screen size.
111  *
112  * @returns                       Formula object with the screen_width,
113  *                                screen_height, gamemap_width and
114  *                                gamemap_height variable set to the current
115  *                                values of these in settings.
116  */
117 wfl::map_formula_callable get_screen_size_variables();
118 
119 /** Returns the current mouse position. */
120 point get_mouse_position();
121 
122 /**
123  * Returns a truncated version of the text.
124  *
125  * For debugging it's sometimes useful to get a part of the label of the
126  * widget. This function shows the first part.
127  *
128  * @param text                    The text to truncate.
129  *
130  * @returns                       The truncated text.
131  */
132 std::string debug_truncate(const std::string& text);
133 
134 } // namespace gui2
135