annotate src/core/theme.h @ 112:40f22a8188d2

image: set dimensions
author David Demelier <markand@malikania.fr>
date Sun, 12 Apr 2020 16:55:26 +0200
parents 4ac71ac10c9f
children 3bd0d3a39e30
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
99
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * theme.h -- abstract theming
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef MOLKO_THEME_H
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define MOLKO_THEME_H
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file theme.h
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief Abstract theming.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <stdbool.h>
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 struct button;
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 struct font;
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 struct frame;
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 struct label;
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 * \brief Font component.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 enum theme_font {
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 THEME_FONT_INTERFACE, /*!< Font for interface elements. */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 THEME_FONT_LAST /*!< Unused. */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 };
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 * \brief Theme colors.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 enum theme_color {
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 THEME_COLOR_NORMAL, /*!< Normal font color. */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 THEME_COLOR_SELECTED, /*!< Font color for selected elements. */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 THEME_COLOR_SHADOW, /*!< Shadow color. */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 THEME_COLOR_LAST /*!< Unused. */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 };
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 * \brief Abstract theme structure.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 struct theme {
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 * (RW, ref) Fonts catalog.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 struct font *fonts[THEME_FONT_LAST];
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
60
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 * (RW) Miscellaneous colors.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 unsigned long colors[THEME_COLOR_LAST];
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
65
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 * Draw a frame.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 * This function is used to draw a box usually as a container where UI
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 * elements will be put.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 * \see \ref theme_draw_frame
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 void (*draw_frame)(struct theme *, const struct frame *);
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
75
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 * Draw a label.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 * \see \ref theme_draw_label
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 void (*draw_label)(struct theme *, const struct label *);
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 * Draw a button.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 * \see \ref theme_draw_button
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 void (*draw_button)(struct theme *, const struct button *);
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 };
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
90
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 * Initialize the theming system.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 * \return false on errors
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 * \warning This function must be called before any other theme functions.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 bool
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 theme_init(void);
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
99
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 * Get a reference to the default theme.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 * \return A non-owning pointer to a static storage for the default theme
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 struct theme *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 theme_default(void);
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
107
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 * Draw a frame.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 * \pre frame != NULL
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 * \param t the theme to use (may be NULL)
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 * \param frame the frame
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 void
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 theme_draw_frame(struct theme *t, const struct frame *frame);
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
117
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 * Draw a label.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 * \pre label != NULL
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 * \param t the theme to use (may be NULL)
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 * \param label the label
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 void
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 theme_draw_label(struct theme *t, const struct label *label);
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
127
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 * Draw a button.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 *
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 * \pre button != NULL
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 * \param t the theme to use (may be NULL)
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 * \param button the button
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 void
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 theme_draw_button(struct theme *t, const struct button *button);
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
137
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 /**
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 * Close associated resources.
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 void
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 theme_finish(void);
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
143
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 #endif /* !MOLKO_THEME_H */