HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
margins.hpp
1// Copyright Take Vos 2022.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
9#pragma once
10
11#include "../SIMD/module.hpp"
12#include "../utility/module.hpp"
13#include <concepts>
14
15namespace hi { inline namespace v1 {
16
20class margins {
21public:
22 using array_type = simd<float, 4>;
23 using value_type = array_type::value_type;
24
25 constexpr margins(margins const&) noexcept = default;
26 constexpr margins(margins&&) noexcept = default;
27 constexpr margins& operator=(margins const&) noexcept = default;
28 constexpr margins& operator=(margins&&) noexcept = default;
29
30 [[nodiscard]] constexpr margins() noexcept : _v() {}
31 [[nodiscard]] constexpr margins(float margin) noexcept : _v(margin, margin, margin, margin) {}
32 [[nodiscard]] constexpr margins(float left, float bottom, float right, float top) noexcept :
33 _v(left, bottom, right, top)
34 {
35 }
36 [[nodiscard]] constexpr explicit margins(array_type v) noexcept : _v(v) {}
37
38 [[nodiscard]] constexpr explicit operator array_type() const noexcept
39 {
40 return _v;
41 }
42
43 [[nodiscard]] constexpr float left() const noexcept
44 {
45 return _v.x();
46 }
47
48 [[nodiscard]] constexpr float& left() noexcept
49 {
50 return _v.x();
51 }
52
53 [[nodiscard]] constexpr float bottom() const noexcept
54 {
55 return _v.y();
56 }
57
58 [[nodiscard]] constexpr float& bottom() noexcept
59 {
60 return _v.y();
61 }
62
63 [[nodiscard]] constexpr float right() const noexcept
64 {
65 return _v.z();
66 }
67
68 [[nodiscard]] constexpr float& right() noexcept
69 {
70 return _v.z();
71 }
72
73 [[nodiscard]] constexpr float top() const noexcept
74 {
75 return _v.w();
76 }
77
78 [[nodiscard]] constexpr float& top() noexcept
79 {
80 return _v.w();
81 }
82
83 template<int I>
84 [[nodiscard]] constexpr friend float get(margins const& rhs) noexcept
85 {
86 return get<I>(rhs._v);
87 }
88
89 [[nodiscard]] constexpr float operator[](std::size_t i) const noexcept
90 {
91 return _v[i];
92 }
93
94 constexpr margins& operator+=(margins const& rhs) noexcept
95 {
96 _v += rhs._v;
97 return *this;
98 }
99
100 [[nodiscard]] constexpr friend margins max(margins const& lhs, margins const& rhs) noexcept
101 {
102 return margins{max(lhs._v, rhs._v)};
103 }
104
105 [[nodiscard]] constexpr friend bool operator==(margins const& lhs, margins const& rhs) noexcept
106 {
107 return equal(lhs._v, rhs._v);
108 }
109
110private:
111 array_type _v;
112};
113
114}} // namespace hi::v1
DOXYGEN BUG.
Definition algorithm.hpp:13
geometry/margins.hpp
Definition cache.hpp:11
The left, bottom, right and top margins.
Definition margins.hpp:20