annotate libui/ui/label.h @ 149:a43e79d489ea

ui: allow custom position of labels
author David Demelier <markand@malikania.fr>
date Thu, 15 Oct 2020 10:45:40 +0200
parents c577c15df07f
children 9733d379be89
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 * label.h -- GUI label
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_LABEL_H
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define MOLKO_LABEL_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 label.h
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief GUI label.
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 struct theme;
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 /**
101
0bc32f70d67c label: add more customization
David Demelier <markand@malikania.fr>
parents: 99
diff changeset
30 * \brief Label flags.
0bc32f70d67c label: add more customization
David Demelier <markand@malikania.fr>
parents: 99
diff changeset
31 */
0bc32f70d67c label: add more customization
David Demelier <markand@malikania.fr>
parents: 99
diff changeset
32 enum label_flags {
145
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
33 LABEL_FLAGS_NONE, /*!< No flags. */
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
34 LABEL_FLAGS_SHADOW = (1 << 0), /*!< Enable shadow. */
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
35 };
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
36
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
37 /**
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
38 * \brief Label alignment in bounding box.
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
39 *
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
40 * The alignment is described as following:
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
41 *
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
42 * ```
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
43 * +---------------------+
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
44 * | 1 2 3 |
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
45 * | |
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
46 * | 8 0 4 |
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
47 * | |
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
48 * | 7 6 5 |
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
49 * +---------------------+
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
50 * ```
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
51 */
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
52 enum label_align {
149
a43e79d489ea ui: allow custom position of labels
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
53 LABEL_ALIGN_NONE, /*!< No alignment. */
a43e79d489ea ui: allow custom position of labels
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
54 LABEL_ALIGN_CENTER, /*!< Align to the center. */
145
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
55 LABEL_ALIGN_TOP_LEFT, /*!< Top left. */
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
56 LABEL_ALIGN_TOP, /*!< Top center (aligned horizontally). */
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
57 LABEL_ALIGN_TOP_RIGHT, /*!< Top right. */
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
58 LABEL_ALIGN_RIGHT, /*!< Right (aligned vertically). */
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
59 LABEL_ALIGN_BOTTOM_RIGHT, /*!< Bottom right. */
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
60 LABEL_ALIGN_BOTTOM, /*!< Bottom (aligned horizontally). */
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
61 LABEL_ALIGN_BOTTOM_LEFT, /*!< Bottom left. */
7f1af54bb35a core: rework label alignment, closes #2494 @1h
David Demelier <markand@malikania.fr>
parents: 121
diff changeset
62 LABEL_ALIGN_LEFT /*!< Left (aligned vertically). */
101
0bc32f70d67c label: add more customization
David Demelier <markand@malikania.fr>
parents: 99
diff changeset
63 };
0bc32f70d67c label: add more customization
David Demelier <markand@malikania.fr>
parents: 99
diff changeset
64
0bc32f70d67c label: add more customization
David Demelier <markand@malikania.fr>
parents: 99
diff changeset
65 /**
99
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 * \brief GUI label.
149
a43e79d489ea ui: allow custom position of labels
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
67 *
a43e79d489ea ui: allow custom position of labels
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
68 * A label can be conveniently positioned using a bounding box and an alignment
a43e79d489ea ui: allow custom position of labels
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
69 * in that case the fields `w`, `h` and `align` must be specified, otherwise
a43e79d489ea ui: allow custom position of labels
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
70 * the label is drawn immediately at `x` and `y` field.
99
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 struct label {
147
b386d25832c8 doc: use new nomenclature, closes #2497
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
73 int x; /*!< (+) Position in x. */
b386d25832c8 doc: use new nomenclature, closes #2497
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
74 int y; /*!< (+) Position in y. */
149
a43e79d489ea ui: allow custom position of labels
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
75 unsigned int w; /*!< (+?) Width. */
a43e79d489ea ui: allow custom position of labels
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
76 unsigned int h; /*!< (+?) Height. */
147
b386d25832c8 doc: use new nomenclature, closes #2497
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
77 const char *text; /*!< (+&) Text to show. */
b386d25832c8 doc: use new nomenclature, closes #2497
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
78 enum label_flags flags; /*!< (+) Optional flags. */
b386d25832c8 doc: use new nomenclature, closes #2497
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
79 enum label_align align; /*!< (+) How to positionate label. */
b386d25832c8 doc: use new nomenclature, closes #2497
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
80 struct theme *theme; /*!< (+&?) Theme to use. */
99
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 };
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 the label.
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 * \pre label != NULL
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 * \param label the label to draw
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 */
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 void
4ac71ac10c9f core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 label_draw(const struct label *label);
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 #endif /* !MOLKO_LABEL_H */