rewrite time
This commit is contained in:
parent
d6b9b87da4
commit
4428cfe12c
24 changed files with 1208 additions and 893 deletions
|
|
@ -1,12 +1,11 @@
|
|||
/*
|
||||
Crafter®.Graphics
|
||||
Copyright (C) 2025 Catcrafts®
|
||||
Catcrafts.net
|
||||
catcrafts.net
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3.0 of the License, or (at your option) any later version.
|
||||
License version 3.0 as published by the Free Software Foundation;
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
|
@ -19,50 +18,38 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|||
*/
|
||||
|
||||
export module Crafter.Graphics:UiElement;
|
||||
import :UiElementBuffer;
|
||||
import :UiElementMouse;
|
||||
import std;
|
||||
import Crafter.Event;
|
||||
import :Types;
|
||||
|
||||
namespace Crafter {
|
||||
export class Font;
|
||||
export class UiElement {
|
||||
export namespace Crafter {
|
||||
class Font;
|
||||
class UiElementBase {
|
||||
public:
|
||||
Event<MouseMoveEvent> onMouseMove;
|
||||
Event<MouseMoveEvent> onMouseEnter;
|
||||
Event<MouseMoveEvent> onMouseLeave;
|
||||
Event<MousePoint> onMouseRightClick;
|
||||
Event<MousePoint> onMouseLeftClick;
|
||||
Event<MousePoint> onMouseRightHold;
|
||||
Event<MousePoint> onMouseLeftHold;
|
||||
Event<MousePoint> onMouseRightRelease;
|
||||
Event<MousePoint> onMouseLeftRelease;
|
||||
float z;
|
||||
float anchorX;
|
||||
float anchorY;
|
||||
bool useRelativeSize;
|
||||
bool ignoreScaling;
|
||||
std::uint32_t bufferWidth;
|
||||
std::uint32_t bufferHeight;
|
||||
std::uint32_t absoluteWidth;
|
||||
std::uint32_t absoluteHeight;
|
||||
float relativeWidth;
|
||||
float relativeHeight;
|
||||
float anchorOffsetX;
|
||||
float anchorOffsetY;
|
||||
std::vector<Pixel_BU8_GU8_RU8_AU8> buffer;
|
||||
std::vector<std::unique_ptr<UiElement>> children;
|
||||
std::vector<std::unique_ptr<UiElementBase>> children;
|
||||
|
||||
UiElement(float anchorX, float anchorY, float relativeWidth, float relativeHeight, float anchorOffsetX = 0.5, float anchorOffsetY = 0.5, float z = 0, bool ignoreScaling = false);
|
||||
UiElement(float anchorX, float anchorY, std::uint32_t bufferWidth, std::uint32_t bufferHeight, std::uint32_t absoluteWidth, std::uint32_t absoluteHeight, float anchorOffsetX = 0.5, float anchorOffsetY = 0.5, float z = 0, bool ignoreScaling = false);
|
||||
UiElement(float anchorX, float anchorY, std::uint32_t bufferWidth, std::uint32_t bufferHeight, float relativeWidth, float relativeHeight, float anchorOffsetX = 0.5, float anchorOffsetY = 0.5, float z = 0, bool ignoreScaling = false);
|
||||
UiElement(const std::filesystem::path& image, float anchorX, float anchorY, float relativeWidth, float relativeHeight, float anchorOffsetX = 0.5, float anchorOffsetY = 0.5, float z = 0, bool ignoreScaling = false);
|
||||
UiElement(UiElement&&) noexcept = default;
|
||||
UiElement& operator=(UiElement&&) noexcept = default;
|
||||
UiElementBase(float anchorX, float anchorY, float relativeWidth, float relativeHeight, float anchorOffsetX = 0.5, float anchorOffsetY = 0.5, float z = 0, bool ignoreScaling = false);
|
||||
UiElementBase(UiElementBase&&) noexcept = default;
|
||||
UiElementBase& operator=(UiElementBase&&) noexcept = default;
|
||||
};
|
||||
|
||||
export class TextElement : public UiElement {
|
||||
template<bool Buffer, bool Mouse>
|
||||
class UiElement : public UiElementBase{
|
||||
public:
|
||||
TextElement(const std::string_view text, float size, Pixel_BU8_GU8_RU8_AU8 color, const Font& font, float anchorX, float anchorY, float relativeWidth, float relativeHeight, float anchorOffsetX = 0.5, float anchorOffsetY = 0.5, float z = 0, bool ignoreScaling = false);
|
||||
void RenderText(const std::string_view text, float size, Pixel_BU8_GU8_RU8_AU8 color, const Font& font);
|
||||
std::conditional_t<Buffer, UiElementBuffer, std::monostate> buffer;
|
||||
std::conditional_t<Buffer, UiElementMouse, std::monostate> mouse;
|
||||
UiElement(float anchorX, float anchorY, float relativeWidth, float relativeHeight, float anchorOffsetX = 0.5, float anchorOffsetY = 0.5, float z = 0, bool ignoreScaling = false) : UiElementBase(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling = false) {}
|
||||
UiElement(float anchorX, float anchorY, float relativeWidth, float relativeHeight, float anchorOffsetX = 0.5, float anchorOffsetY = 0.5, float z = 0, bool ignoreScaling = false) requires (Buffer) : UiElementBase(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling), buffer(*this) {}
|
||||
UiElement(std::uint_fast32_t width, std::uint_fast32_t height, float anchorX, float anchorY, float relativeWidth, float relativeHeight, float anchorOffsetX = 0.5, float anchorOffsetY = 0.5, float z = 0, bool ignoreScaling = false) requires (Buffer) : UiElementBase(anchorX, anchorY, relativeWidth, relativeHeight, anchorOffsetX, anchorOffsetY, z, ignoreScaling), buffer(*this, width, height) {}
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue