AUI Framework  master
Cross-platform base for C++ UI apps
Loading...
Searching...
No Matches
ALayoutDirection.h
    1/*
    2 * AUI Framework - Declarative UI toolkit for modern C++20
    3 * Copyright (C) 2020-2025 Alex2772 and Contributors
    4 *
    5 * SPDX-License-Identifier: MPL-2.0
    6 *
    7 * This Source Code Form is subject to the terms of the Mozilla Public
    8 * License, v. 2.0. If a copy of the MPL was not distributed with this
    9 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
   10 */
   11
   12#pragma once
   13
   14#include <AUI/Reflect/AEnumerate.h>
   15
   16enum class ALayoutDirection {
   17    NONE,
   18    HORIZONTAL,
   19    VERTICAL,
   20};
   21
   22AUI_ENUM_VALUES(ALayoutDirection,
   23                ALayoutDirection::NONE,
   24                ALayoutDirection::HORIZONTAL,
   25                ALayoutDirection::VERTICAL)
   26
   27namespace aui::layout_direction {
   28template<typename T>
   29[[nodiscard]]
   30inline T& getAxisValue(ALayoutDirection direction, glm::tvec2<T>& v) {
   31    switch (direction) {
   32        case ALayoutDirection::VERTICAL  : return v.y;
   33        case ALayoutDirection::HORIZONTAL: return v.x;
   34        default: throw AException("invalid direction");
   35    }
   36}
   37
   38template<typename T>
   39[[nodiscard]]
   40inline T getAxisValue(ALayoutDirection direction, const glm::tvec2<T>& v) {
   41    switch (direction) {
   42        case ALayoutDirection::VERTICAL  : return v.y;
   43        case ALayoutDirection::HORIZONTAL: return v.x;
   44        default: throw AException("invalid direction");
   45    }
   46}
   47
   48template<typename T>
   49[[nodiscard]]
   50inline T& getPerpendicularAxisValue(ALayoutDirection direction, glm::tvec2<T>& v) {
   51    switch (direction) {
   52        case ALayoutDirection::VERTICAL  : return v.x;
   53        case ALayoutDirection::HORIZONTAL: return v.y;
   54        default: throw AException("invalid direction");
   55    }
   56}
   57
   58template<typename T>
   59[[nodiscard]]
   60inline T getPerpendicularAxisValue(ALayoutDirection direction, const glm::tvec2<T>& v) {
   61    switch (direction) {
   62        case ALayoutDirection::VERTICAL  : return v.x;
   63        case ALayoutDirection::HORIZONTAL: return v.y;
   64        default: throw AException("invalid direction");
   65    }
   66}
   67}
#define AUI_ENUM_VALUES(enum_t,...)
Defines all enum values for AEnumerate.
Definition AEnumerate.h:208