Added Event Enablers to Widget class

This commit is contained in:
OmniaX-Dev 2026-04-24 23:48:09 +02:00
parent 812260b969
commit 22ed3c0744
6 changed files with 56 additions and 14 deletions

View file

@ -78,7 +78,7 @@ const $accentColorDark = #6B0A1DFF
(scrollbar) {
(thumb) {
color = rgb(140, 140, 140)
borderRadius = 16.0
borderRadius = 30.0
borderColor = rgb(150, 150, 150)
showBorder = true
}

View file

@ -62,6 +62,14 @@ namespace ogfx
m_anim.update();
}
void Button::onMouseReleased(const Event& event)
{
if (!isMouseInside())
return;
if (event.mouse->button == MouseEventData::eButton::Left && callback_onActionPerformed)
callback_onActionPerformed(event);
}
void Button::setText(const String& text)
{
m_text = text;

View file

@ -38,6 +38,7 @@ namespace ogfx
Button& create(const String& text);
void onDraw(ogfx::BasicRenderer2D& gfx) override;
void onUpdate(void) override;
void onMouseReleased(const Event& event) override;
void setText(const String& text);
void setIcon(const String& filePath);
void applyTheme(const ostd::Stylesheet& theme) override;

View file

@ -235,6 +235,7 @@ namespace ogfx
case eCallback::WindowResized: callback_onWindowResized = std::move(callback); break;
case eCallback::WindowFocused: callback_onWindowFocused = std::move(callback); break;
case eCallback::WindowFocusLost: callback_onWindowFocusLost = std::move(callback); break;
case eCallback::ActionPerformed: callback_onActionPerformed = std::move(callback); break;
default: break;
}
}
@ -272,7 +273,7 @@ namespace ogfx
void Widget::__onMousePressed(const Event& event)
{
if (event.isHandled()) return;
if (event.isHandled() || !isMousePressedEventEnabled()) return;
setThemeQualifier("pressed");
if (hasChildren())
m_widgets.onMousePressed(event);
@ -287,7 +288,7 @@ namespace ogfx
void Widget::__onMouseReleased(const Event& event)
{
if (event.isHandled()) return;
if (event.isHandled() || !isMouseReleasedEventEnabled()) return;
setThemeQualifier("pressed", false);
m_pressedButton = ogfx::MouseEventData::eButton::None;
if (hasChildren())
@ -314,7 +315,7 @@ namespace ogfx
void Widget::__onMouseMoved(const Event& event)
{
if (event.isHandled()) return;
if (event.isHandled() || !isMouseMovedEventEnabled()) return;
if (hasChildren())
m_widgets.onMouseMoved(event);
if (!event.isHandled())
@ -329,7 +330,7 @@ namespace ogfx
void Widget::__onMouseScrolled(const Event& event)
{
if (event.isHandled()) return;
if (event.isHandled() || !isMouseScrolledEventEnabled()) return;
if (hasChildren())
m_widgets.onMouseScrolled(event);
if (!event.isHandled())
@ -342,7 +343,7 @@ namespace ogfx
void Widget::__onMouseEntered(const Event& event)
{
if (event.isHandled()) return;
if (event.isHandled() || !isMouseEnteredEventEnabled()) return;
setThemeQualifier("hover");
if (callback_onMouseEntered)
callback_onMouseEntered(event);
@ -353,7 +354,7 @@ namespace ogfx
void Widget::__onMouseExited(const Event& event)
{
if (event.isHandled()) return;
if (event.isHandled() || !isMouseExitedEventEnabled()) return;
setThemeQualifier("hover", false);
if (callback_onMouseExited)
callback_onMouseExited(event);
@ -364,7 +365,7 @@ namespace ogfx
void Widget::__onMouseDragged(const Event& event)
{
if (event.isHandled()) return;
if (event.isHandled() || !isMouseDraggedEventEnabled()) return;
if (hasChildren())
m_widgets.onMouseDragged(event);
if (!event.isHandled())
@ -379,7 +380,7 @@ namespace ogfx
void Widget::__onKeyPressed(const Event& event)
{
if (event.isHandled()) return;
if (event.isHandled() || !isKeyPressedEventEnabled()) return;
if (hasChildren())
m_widgets.onKeyPressed(event);
if (!event.isHandled())
@ -392,7 +393,7 @@ namespace ogfx
void Widget::__onKeyReleased(const Event& event)
{
if (event.isHandled()) return;
if (event.isHandled() || !isKeyReleasedEventEnabled()) return;
m_pressedButton = ogfx::MouseEventData::eButton::None;
if (hasChildren())
m_widgets.onKeyReleased(event);
@ -406,7 +407,7 @@ namespace ogfx
void Widget::__onTextEntered(const Event& event)
{
if (event.isHandled()) return;
if (event.isHandled() || !isTextEnteredEventEnabled()) return;
if (hasChildren())
m_widgets.onTextEntered(event);
if (!event.isHandled())

View file

@ -56,7 +56,8 @@ namespace ogfx
WindowClosed,
WindowResized,
WindowFocused,
WindowFocusLost
WindowFocusLost,
ActionPerformed
};
public: using EventCallback = std::function<void(const Event&)>;
public:
@ -172,6 +173,21 @@ namespace ogfx
OSTD_BOOL_PARAM_GETSET_E(Tooltip, m_enableTooltip);
// ==========================================================================
// ================================= EVENT ENABLERS =================================
OSTD_BOOL_PARAM_GETSET_E_NEG(MousePressedEvent, m_disableMousePressed);
OSTD_BOOL_PARAM_GETSET_E_NEG(MouseReleasedEvent, m_disableMouseReleased);
OSTD_BOOL_PARAM_GETSET_E_NEG(MouseMovedEvent, m_disableMouseMoved);
OSTD_BOOL_PARAM_GETSET_E_NEG(MouseScrolledEvent, m_disableMouseScrolled);
OSTD_BOOL_PARAM_GETSET_E_NEG(MouseEnteredEvent, m_disableMouseEntered);
OSTD_BOOL_PARAM_GETSET_E_NEG(MouseExitedEvent, m_disableMouseExited);
OSTD_BOOL_PARAM_GETSET_E_NEG(MouseDraggedEvent, m_disableMouseDragged);
OSTD_BOOL_PARAM_GETSET_E_NEG(KeyPressedEvent, m_disableKeyPressed);
OSTD_BOOL_PARAM_GETSET_E_NEG(KeyReleasedEvent, m_disableKeyReleased);
OSTD_BOOL_PARAM_GETSET_E_NEG(TextEnteredEvent, m_disableTextEntered);
// ==================================================================================
protected:
void apply_common_theme_values(const ostd::Stylesheet& theme);
inline void disableChildren(void) { m_allowChildren = false; }
@ -214,6 +230,21 @@ namespace ogfx
// ======= Event Enablers =======
bool m_disableMousePressed { false };
bool m_disableMouseReleased { false };
bool m_disableMouseMoved { false };
bool m_disableMouseScrolled { false };
bool m_disableMouseEntered { false };
bool m_disableMouseExited { false };
bool m_disableMouseDragged { false };
bool m_disableKeyPressed { false };
bool m_disableKeyReleased { false };
bool m_disableTextEntered { false };
// ==============================
// ====== THEMING =====
String m_stylesheetCategoryName { "" };
stdvec<String> m_themeIDList;
@ -271,6 +302,7 @@ namespace ogfx
EventCallback callback_onWindowResized { nullptr };
EventCallback callback_onWindowFocused { nullptr };
EventCallback callback_onWindowFocusLost { nullptr };
EventCallback callback_onActionPerformed { nullptr };
public:
// ====================== DUMMIES ======================

View file

@ -73,7 +73,7 @@ class Window : public ogfx::gui::Window
});
m_btn1.setText("BUTTON");
m_btn1.setCallback(ogfx::gui::Widget::eCallback::MousePressed, [&](const ogfx::gui::Event& event) -> void {
m_btn1.setCallback(ogfx::gui::Widget::eCallback::ActionPerformed, [&](const ogfx::gui::Event& event) -> void {
std::cout << showOpenFileDialog(filters) << "\n";
});
m_btn1.addThemeOverride("@.button.showIcon", true);
@ -119,7 +119,7 @@ class Window : public ogfx::gui::Window
m_list.setSize(200, 300);
for (i32 i = 0; i < 10000; i++)
for (i32 i = 0; i < 500; i++)
{
m_list.addLine(ostd::Random::getString(ostd::Random::getui8(1, 40)));
}