mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-02 02:48:51 -05:00
- Forward arguments - Remove unused code - Remove auto return type when it's not needed - Add const to member functions - Use startsWith and endsWith from utils - Allow instantiation of operators only for specific types - Caluclate key mask in compile time
170 lines
3.9 KiB
C++
170 lines
3.9 KiB
C++
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#pragma once
|
|
|
|
#include "Axes.hpp"
|
|
#include <cstdint>
|
|
#include <utility>
|
|
|
|
namespace gui
|
|
{
|
|
using Length = std::uint32_t;
|
|
using Position = std::int32_t;
|
|
|
|
struct Size
|
|
{
|
|
Length width = 0, height = 0;
|
|
Size(Length w = 0, Length h = 0) : width(w), height(h)
|
|
{}
|
|
[[nodiscard]] auto get(Axis axis) const -> Length
|
|
{
|
|
return Axis::X == axis ? width : height;
|
|
}
|
|
[[nodiscard]] auto isZero() const -> bool
|
|
{
|
|
return 0 == width && 0 == height;
|
|
}
|
|
};
|
|
|
|
struct Point
|
|
{
|
|
Position x = 0, y = 0;
|
|
|
|
constexpr Point(Position x = 0, Position y = 0) : x(x), y(y)
|
|
{}
|
|
|
|
[[nodiscard]] constexpr auto get(Axis axis) -> Length
|
|
{
|
|
return Axis::X == axis ? x : y;
|
|
}
|
|
|
|
[[nodiscard]] constexpr auto isZero() -> bool
|
|
{
|
|
return 0 == x && 0 == y;
|
|
}
|
|
};
|
|
|
|
enum class NavigationDirection
|
|
{
|
|
LEFT = 0x01,
|
|
UP,
|
|
RIGHT,
|
|
DOWN,
|
|
NONE,
|
|
};
|
|
|
|
enum class Status
|
|
{
|
|
GUI_SUCCESS = 0x01,
|
|
GUI_FAILURE,
|
|
};
|
|
|
|
enum class RefreshModes
|
|
{
|
|
GUI_REFRESH_NONE,
|
|
GUI_REFRESH_FAST = 1,
|
|
GUI_REFRESH_DEEP
|
|
};
|
|
|
|
enum class ShowMode
|
|
{
|
|
GUI_SHOW_INIT = 0x01,
|
|
GUI_SHOW_RETURN
|
|
};
|
|
|
|
enum class Orientation
|
|
{
|
|
Vertical,
|
|
Horizontal
|
|
};
|
|
|
|
// This namespace exists to prevent instantiation of operators for other classes from namespace gui
|
|
namespace rectangle_enums
|
|
{
|
|
enum class RectangleEdge
|
|
{
|
|
None = 0x00,
|
|
Top = 0x01,
|
|
Bottom = 0x02,
|
|
Left = 0x04,
|
|
Right = 0x08,
|
|
All = 0x0F
|
|
};
|
|
|
|
enum class RectangleFlatEdge
|
|
{
|
|
None = 0x00,
|
|
TopLeft = 0x01,
|
|
TopRight = 0x02,
|
|
BottomLeft = 0x04,
|
|
BottomRight = 0x08
|
|
};
|
|
|
|
enum class RectangleRoundedCorner
|
|
{
|
|
None = 0x00,
|
|
TopLeft = 0x10,
|
|
TopRight = 0x20,
|
|
BottomLeft = 0x40,
|
|
BottomRight = 0x80,
|
|
All = 0xF0,
|
|
};
|
|
|
|
enum class RectangleYap
|
|
{
|
|
None = 0x00,
|
|
TopLeft = 0x10,
|
|
TopRight = 0x20,
|
|
BottomLeft = 0x40,
|
|
BottomRight = 0x80,
|
|
};
|
|
|
|
template <class T>
|
|
inline bool operator&(const T &lhs, const T &rhs)
|
|
{
|
|
return static_cast<uint32_t>(lhs) & static_cast<uint32_t>(rhs);
|
|
}
|
|
template <class T>
|
|
inline T operator|(const T &lhs, const T &rhs)
|
|
{
|
|
return static_cast<T>(static_cast<uint32_t>(lhs) | static_cast<uint32_t>(rhs));
|
|
}
|
|
} // namespace rectangle_enums
|
|
|
|
using rectangle_enums::RectangleEdge;
|
|
using rectangle_enums::RectangleFlatEdge;
|
|
using rectangle_enums::RectangleRoundedCorner;
|
|
using rectangle_enums::RectangleYap;
|
|
|
|
enum class Boundaries
|
|
{
|
|
Fixed, ///< Fixed - will stop scrolling on first or last elements on appropriate top or bottom
|
|
///< directions.
|
|
Continuous ///< Continuous - will continue to beginning or end on first or last elements on
|
|
///< appropriate top or bottom directions.
|
|
};
|
|
|
|
enum class ImageTypeSpecifier
|
|
{
|
|
None,
|
|
W_G,
|
|
B_G,
|
|
W_M,
|
|
B_M
|
|
};
|
|
} // namespace gui
|
|
|
|
inline const char *c_str(gui::RefreshModes refresh)
|
|
{
|
|
switch (refresh) {
|
|
case gui::RefreshModes::GUI_REFRESH_NONE:
|
|
return "GUI_REFRESH_NONE";
|
|
case gui::RefreshModes::GUI_REFRESH_FAST:
|
|
return "GUI_REFRESH_FAST";
|
|
case gui::RefreshModes::GUI_REFRESH_DEEP:
|
|
return "GUI_REFRESH_DEEP";
|
|
}
|
|
return "";
|
|
}
|