65 hilet guideline_top =
top - padding_top - guideline_width;
69 case vertical_alignment::none:
71 case vertical_alignment::top:
72 if (guideline_bottom <=
top) {
77 case vertical_alignment::bottom:
78 if (guideline_top >=
bottom) {
83 case vertical_alignment::middle:
84 if (guideline_bottom <= guideline_top) {
85 return std::clamp(guideline_middle, guideline_bottom, guideline_top);
161 hilet guideline_left =
left + padding_left;
162 hilet guideline_right =
right - padding_right - guideline_width;
166 case horizontal_alignment::none:
168 case horizontal_alignment::left:
169 if (guideline_left <= right) {
170 return guideline_left;
174 case horizontal_alignment::right:
175 if (guideline_right >= left) {
176 return guideline_right;
180 case horizontal_alignment::center:
181 if (guideline_left <= guideline_right) {
182 return std::clamp(guideline_center, guideline_left, guideline_right);
233 constexpr alignment() noexcept : _value(0) {}
239 constexpr explicit alignment(uint8_t value) noexcept : _value(value) {}
242 _value((to_underlying(v) << 4) | to_underlying(t))
249 _value((to_underlying(v) << 4) | to_underlying(h))
255 [[nodiscard]]
static constexpr alignment top_flush()
noexcept
257 return {horizontal_alignment::flush, vertical_alignment::top};
260 [[nodiscard]]
static constexpr alignment top_left()
noexcept
262 return {horizontal_alignment::left, vertical_alignment::top};
265 [[nodiscard]]
static constexpr alignment top_center()
noexcept
267 return {horizontal_alignment::center, vertical_alignment::top};
270 [[nodiscard]]
static constexpr alignment top_justified()
noexcept
272 return {horizontal_alignment::justified, vertical_alignment::top};
275 [[nodiscard]]
static constexpr alignment top_right()
noexcept
277 return {horizontal_alignment::right, vertical_alignment::top};
280 [[nodiscard]]
static constexpr alignment middle_flush()
noexcept
282 return {horizontal_alignment::flush, vertical_alignment::middle};
285 [[nodiscard]]
static constexpr alignment middle_left()
noexcept
287 return {horizontal_alignment::left, vertical_alignment::middle};
290 [[nodiscard]]
static constexpr alignment middle_center()
noexcept
292 return {horizontal_alignment::center, vertical_alignment::middle};
295 [[nodiscard]]
static constexpr alignment middle_justified()
noexcept
297 return {horizontal_alignment::justified, vertical_alignment::middle};
300 [[nodiscard]]
static constexpr alignment middle_right()
noexcept
302 return {horizontal_alignment::right, vertical_alignment::middle};
305 [[nodiscard]]
static constexpr alignment bottom_left()
noexcept
307 return {horizontal_alignment::left, vertical_alignment::bottom};
310 [[nodiscard]]
static constexpr alignment bottom_center()
noexcept
312 return {horizontal_alignment::center, vertical_alignment::bottom};
315 [[nodiscard]]
static constexpr alignment bottom_right()
noexcept
317 return {horizontal_alignment::right, vertical_alignment::bottom};
330 [[nodiscard]]
constexpr friend bool operator==(
alignment const& lhs,
alignment const& rhs)
noexcept =
default;
334 return lhs.horizontal() == rhs;
339 return lhs == rhs.horizontal();
344 return lhs.vertical() == rhs;
349 return lhs == rhs.vertical();
359 return alignment{
mirror(rhs.horizontal(), left_to_right), rhs.vertical()};
362 [[nodiscard]]
constexpr friend alignment resolve(
alignment const& rhs,
bool left_to_right)
noexcept
364 return alignment{resolve(rhs.horizontal(), left_to_right), rhs.vertical()};
367 [[nodiscard]]
constexpr friend alignment resolve_mirror(
alignment const& rhs,
bool left_to_right)
noexcept
369 return alignment{resolve_mirror(rhs.horizontal(), left_to_right), rhs.vertical()};
#define hi_no_default(...)
This part of the code should not be reachable, unless a programming bug.
Definition assert.hpp:279
#define hi_axiom(expression,...)
Specify an axiom; an expression that is true.
Definition assert.hpp:253
constexpr std::optional< T > make_guideline(vertical_alignment alignment, T bottom, T top, T padding_bottom, T padding_top, T guideline_width)
Create a guideline between two points.
Definition alignment.hpp:59
constexpr horizontal_alignment mirror(horizontal_alignment const &rhs) noexcept
Mirror the horizontal alignment.
Definition alignment.hpp:192