R-Type
Distributed multiplayer game engine in C++
Loading...
Searching...
No Matches
IButton.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** r-type
4** File description:
5** IButton - Abstract button interface for UI system
6*/
7
8#pragma once
9
10#include <functional>
11#include <string>
12
13namespace UI {
17 enum class ButtonState {
18 NORMAL,
19 HOVERED,
20 PRESSED
21 };
22
33 enum class Align {
34 NONE,
38 };
39
50 class IButton {
51 public:
55 virtual ~IButton() = default;
56
61 virtual void Update() = 0;
62
67 virtual void Render() = 0;
68
73 virtual void SetCallback(std::function<void()> callback) = 0;
74
80 virtual void SetPosition(float x, float y) = 0;
81
87 virtual void GetPosition(float &x, float &y) const = 0;
88
94 virtual void SetSize(float width, float height) = 0;
95
101 virtual void GetSize(float &width, float &height) const = 0;
102
107 virtual void SetBackgroundColor(unsigned int color) = 0;
108
113 virtual void SetHoverColor(unsigned int color) = 0;
114
119 [[nodiscard]] virtual ButtonState GetState() const = 0;
120
125 [[nodiscard]] virtual bool IsEnabled() const = 0;
126
131 virtual void SetEnabled(bool enabled) = 0;
132
133 // ===== Text / Label (centered) =====
134
139 virtual void SetText(const std::string &text) = 0;
140
145 [[nodiscard]] virtual const std::string &GetText() const = 0;
146
151 virtual void SetTextSize(int size) = 0;
152
157 [[nodiscard]] virtual int GetTextSize() const = 0;
158
163 virtual void SetTextColor(unsigned int color) = 0;
164
169 [[nodiscard]] virtual unsigned int GetTextColor() const = 0;
170
175 virtual void SetFont(int fontHandle) = 0;
176
181 [[nodiscard]] virtual int GetFont() const = 0;
182
188 virtual void SetAlign(Align align) = 0;
189
194 [[nodiscard]] virtual Align GetAlign() const = 0;
195
200 virtual void ApplyAlignment() = 0;
201
202 // ===== Keyboard Navigation =====
203
208 virtual void SetFocused(bool focused) = 0;
209
214 [[nodiscard]] virtual bool IsFocused() const = 0;
215
220 virtual void TriggerClick() = 0;
221 };
222} // namespace UI
Abstract interface for UI buttons.
Definition IButton.hpp:50
virtual void SetPosition(float x, float y)=0
Set the top-left position of the button.
virtual void SetCallback(std::function< void()> callback)=0
Set callback invoked on click.
virtual void Update()=0
Update the button internal state (hover/pressed) and trigger callbacks.
virtual Align GetAlign() const =0
Get current alignment mode.
virtual void SetBackgroundColor(unsigned int color)=0
Set button background color.
virtual bool IsFocused() const =0
Check if this button currently has keyboard focus.
virtual void SetText(const std::string &text)=0
Set button label text.
virtual void GetPosition(float &x, float &y) const =0
Get the current top-left position of the button.
virtual unsigned int GetTextColor() const =0
Get label color.
virtual ~IButton()=default
Virtual destructor.
virtual void SetFocused(bool focused)=0
Set the keyboard focus state of the button.
virtual void TriggerClick()=0
Programmatically trigger the button's click callback.
virtual bool IsEnabled() const =0
Check if button is enabled.
virtual void SetAlign(Align align)=0
Set alignment mode relative to the current window.
virtual int GetTextSize() const =0
Get label font size.
virtual void Render()=0
Render the button.
virtual void SetSize(float width, float height)=0
Set the button size.
virtual int GetFont() const =0
Get current font handle used by this button.
virtual void SetHoverColor(unsigned int color)=0
Set button hover color.
virtual void SetTextSize(int size)=0
Set label font size in pixels.
virtual const std::string & GetText() const =0
Get button label text.
virtual void SetFont(int fontHandle)=0
Set font handle to use for button text.
virtual void GetSize(float &width, float &height) const =0
Get the current size of the button.
virtual ButtonState GetState() const =0
Get current button state.
virtual void SetEnabled(bool enabled)=0
Enable/disable the button.
virtual void ApplyAlignment()=0
Apply alignment (recomputes position based on window size).
virtual void SetTextColor(unsigned int color)=0
Set label color.
Definition IButton.hpp:13
ButtonState
Button state enumeration.
Definition IButton.hpp:17
@ NORMAL
Default state.
@ PRESSED
Mouse button is held down on the button.
@ HOVERED
Mouse is over the button.
Align
Alignment modes relative to the current window.
Definition IButton.hpp:33
@ CENTER_VERTICAL
Center on the Y axis.
@ CENTER_BOTH
Center on both axes.
@ CENTER_HORIZONTAL
Center on the X axis.
@ NONE
No alignment.