HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
corner_radii.hpp
1// Copyright Take Vos 2021.
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
5#pragma once
6
7namespace hi::inline v1 {
8
10public:
11 constexpr corner_radii(corner_radii const &) noexcept = default;
12 constexpr corner_radii(corner_radii &&) noexcept = default;
13 constexpr corner_radii &operator=(corner_radii const &) noexcept = default;
14 constexpr corner_radii &operator=(corner_radii &&) noexcept = default;
15
16 [[nodiscard]] constexpr corner_radii() noexcept : corner_radii(-std::numeric_limits<float>::infinity()) {}
17 [[nodiscard]] constexpr corner_radii(float radius) noexcept : _v(radius, radius, radius, radius) {}
18 [[nodiscard]] constexpr corner_radii(float lb, float rb, float lt, float rt) noexcept : _v(lb, rb, lt, rt) {}
19 [[nodiscard]] constexpr explicit corner_radii(f32x4 v) noexcept : _v(v) {}
20
21 [[nodiscard]] constexpr explicit operator f32x4() const noexcept
22 {
23 return _v;
24 }
25
26 [[nodiscard]] constexpr float left_bottom() const noexcept
27 {
28 return _v.x();
29 }
30
31 [[nodiscard]] constexpr float right_bottom() const noexcept
32 {
33 return _v.y();
34 }
35
36 [[nodiscard]] constexpr float left_top() const noexcept
37 {
38 return _v.z();
39 }
40
41 [[nodiscard]] constexpr float right_top() const noexcept
42 {
43 return _v.w();
44 }
45
46 template<int I>
47 [[nodiscard]] constexpr friend float get(corner_radii const &rhs) noexcept
48 {
49 return get<I>(rhs._v);
50 }
51
52 [[nodiscard]] constexpr float operator[](std::size_t i) const noexcept
53 {
54 return _v[i];
55 }
56
57 [[nodiscard]] constexpr friend corner_radii operator+(corner_radii const &lhs, float rhs) noexcept
58 {
59 return corner_radii{f32x4{lhs} + rhs};
60 //auto r = corner_radii{};
61 //
62 //for (std::size_t i = 0; i != lhs._v.size(); ++i) {
63 // if (lhs._v[i] >= 0) {
64 // r._v[i] = std::max(0.0f, lhs._v[i] + rhs);
65 // } else {
66 // r._v[i] = std::min(0.0f, lhs._v[i] - rhs);
67 // }
68 //}
69 //
70 //return r;
71 }
72
73 [[nodiscard]] constexpr friend corner_radii operator-(corner_radii const &lhs, float rhs) noexcept
74 {
75 return corner_radii{f32x4{lhs} - rhs};
76 //return lhs + -rhs;
77 }
78
79private:
80 f32x4 _v;
81};
82
83} // namespace hi::inline v1
Definition corner_radii.hpp:9