]> git.localhorst.tv Git - blank.git/blob - src/graphics/align.hpp
dedicated shader for outlines
[blank.git] / src / graphics / align.hpp
1 #ifndef BLANK_GRAPHICS_ALIGN_HPP_
2 #define BLANK_GRAPHICS_ALIGN_HPP_
3
4 #include <glm/glm.hpp>
5
6
7 namespace blank {
8
9 enum class Align {
10         BEGIN,
11         MIDDLE,
12         END,
13 };
14
15 enum class Gravity {
16         NORTH_WEST,
17         NORTH,
18         NORTH_EAST,
19         WEST,
20         CENTER,
21         EAST,
22         SOUTH_WEST,
23         SOUTH,
24         SOUTH_EAST,
25 };
26
27 inline Align get_x(Gravity g) noexcept {
28         return Align(int(g) % 3);
29 }
30
31 inline Align get_y(Gravity g) noexcept {
32         return Align(int(g) / 3);
33 }
34
35 inline Gravity get_gravity(Align x, Align y) noexcept {
36         return Gravity(int(y) * 3 + int(x));
37 }
38
39 inline glm::vec2 align(
40         Gravity g,
41         const glm::vec2 &size,
42         const glm::vec2 &offset = glm::vec2(0.0f, 0.0f)
43 ) {
44         return glm::vec2(
45                 size.x * 0.5 * int(get_x(g)) + offset.x,
46                 size.y * 0.5 * int(get_y(g)) + offset.y
47         );
48 }
49
50 }
51
52 #endif