1 #if !defined(HIKARI_INDICATOR_H)
2 #define HIKARI_INDICATOR_H
3 
4 #include <hikari/font.h>
5 #include <hikari/indicator_bar.h>
6 #include <hikari/sheet.h>
7 
8 struct hikari_renderer;
9 struct hikari_view;
10 struct hikari_output;
11 
12 struct hikari_indicator {
13   struct hikari_indicator_bar title;
14   struct hikari_indicator_bar sheet;
15   struct hikari_indicator_bar group;
16   struct hikari_indicator_bar mark;
17 };
18 
19 void
20 hikari_indicator_init(
21     struct hikari_indicator *indicator, float color[static 4]);
22 
23 void
24 hikari_indicator_fini(struct hikari_indicator *indicator);
25 
26 void
27 hikari_indicator_update(
28     struct hikari_indicator *indicator, struct hikari_view *view);
29 
30 void
31 hikari_indicator_set_color(
32     struct hikari_indicator *indicator, float color[static 4]);
33 
34 void
35 hikari_indicator_update_sheet(struct hikari_indicator *indicator,
36     struct hikari_output *output,
37     struct hikari_sheet *sheet,
38     unsigned long flags);
39 
40 void
41 hikari_indicator_damage(
42     struct hikari_indicator *indicator, struct hikari_view *view);
43 
44 #define UPDATE(name)                                                           \
45   static inline void hikari_indicator_update_##name(                           \
46       struct hikari_indicator *indicator,                                      \
47       struct hikari_output *output,                                            \
48       const char *text)                                                        \
49   {                                                                            \
50     hikari_indicator_bar_update(&indicator->name, output, text);               \
51   }
52 
53 UPDATE(title)
54 UPDATE(group)
55 UPDATE(mark)
56 #undef UPDATE
57 
58 #define DAMAGE(name)                                                           \
59   static inline void hikari_indicator_damage_##name(                           \
60       struct hikari_indicator *indicator,                                      \
61       struct hikari_output *output,                                            \
62       struct wlr_box *geometry)                                                \
63   {                                                                            \
64     hikari_indicator_bar_damage(&indicator->name, output, geometry);           \
65   }
66 
67 DAMAGE(title)
68 DAMAGE(sheet)
69 DAMAGE(group)
70 DAMAGE(mark)
71 #undef DAMAGE
72 
73 #define COLOR(name)                                                            \
74   static inline void hikari_indicator_set_color_##name(                        \
75       struct hikari_indicator *indicator, float color[static 4])               \
76   {                                                                            \
77     hikari_indicator_bar_set_color(&indicator->name, color);                   \
78   }
79 
80 COLOR(title)
81 COLOR(sheet)
82 COLOR(group)
83 COLOR(mark)
84 #undef COLOR
85 
86 #endif
87