Added Event Enablers to Widget class
This commit is contained in:
parent
812260b969
commit
22ed3c0744
6 changed files with 56 additions and 14 deletions
|
|
@ -78,7 +78,7 @@ const $accentColorDark = #6B0A1DFF
|
||||||
(scrollbar) {
|
(scrollbar) {
|
||||||
(thumb) {
|
(thumb) {
|
||||||
color = rgb(140, 140, 140)
|
color = rgb(140, 140, 140)
|
||||||
borderRadius = 16.0
|
borderRadius = 30.0
|
||||||
borderColor = rgb(150, 150, 150)
|
borderColor = rgb(150, 150, 150)
|
||||||
showBorder = true
|
showBorder = true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,14 @@ namespace ogfx
|
||||||
m_anim.update();
|
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)
|
void Button::setText(const String& text)
|
||||||
{
|
{
|
||||||
m_text = text;
|
m_text = text;
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ namespace ogfx
|
||||||
Button& create(const String& text);
|
Button& create(const String& text);
|
||||||
void onDraw(ogfx::BasicRenderer2D& gfx) override;
|
void onDraw(ogfx::BasicRenderer2D& gfx) override;
|
||||||
void onUpdate(void) override;
|
void onUpdate(void) override;
|
||||||
|
void onMouseReleased(const Event& event) override;
|
||||||
void setText(const String& text);
|
void setText(const String& text);
|
||||||
void setIcon(const String& filePath);
|
void setIcon(const String& filePath);
|
||||||
void applyTheme(const ostd::Stylesheet& theme) override;
|
void applyTheme(const ostd::Stylesheet& theme) override;
|
||||||
|
|
|
||||||
|
|
@ -235,6 +235,7 @@ namespace ogfx
|
||||||
case eCallback::WindowResized: callback_onWindowResized = std::move(callback); break;
|
case eCallback::WindowResized: callback_onWindowResized = std::move(callback); break;
|
||||||
case eCallback::WindowFocused: callback_onWindowFocused = std::move(callback); break;
|
case eCallback::WindowFocused: callback_onWindowFocused = std::move(callback); break;
|
||||||
case eCallback::WindowFocusLost: callback_onWindowFocusLost = std::move(callback); break;
|
case eCallback::WindowFocusLost: callback_onWindowFocusLost = std::move(callback); break;
|
||||||
|
case eCallback::ActionPerformed: callback_onActionPerformed = std::move(callback); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -272,7 +273,7 @@ namespace ogfx
|
||||||
|
|
||||||
void Widget::__onMousePressed(const Event& event)
|
void Widget::__onMousePressed(const Event& event)
|
||||||
{
|
{
|
||||||
if (event.isHandled()) return;
|
if (event.isHandled() || !isMousePressedEventEnabled()) return;
|
||||||
setThemeQualifier("pressed");
|
setThemeQualifier("pressed");
|
||||||
if (hasChildren())
|
if (hasChildren())
|
||||||
m_widgets.onMousePressed(event);
|
m_widgets.onMousePressed(event);
|
||||||
|
|
@ -287,7 +288,7 @@ namespace ogfx
|
||||||
|
|
||||||
void Widget::__onMouseReleased(const Event& event)
|
void Widget::__onMouseReleased(const Event& event)
|
||||||
{
|
{
|
||||||
if (event.isHandled()) return;
|
if (event.isHandled() || !isMouseReleasedEventEnabled()) return;
|
||||||
setThemeQualifier("pressed", false);
|
setThemeQualifier("pressed", false);
|
||||||
m_pressedButton = ogfx::MouseEventData::eButton::None;
|
m_pressedButton = ogfx::MouseEventData::eButton::None;
|
||||||
if (hasChildren())
|
if (hasChildren())
|
||||||
|
|
@ -314,7 +315,7 @@ namespace ogfx
|
||||||
|
|
||||||
void Widget::__onMouseMoved(const Event& event)
|
void Widget::__onMouseMoved(const Event& event)
|
||||||
{
|
{
|
||||||
if (event.isHandled()) return;
|
if (event.isHandled() || !isMouseMovedEventEnabled()) return;
|
||||||
if (hasChildren())
|
if (hasChildren())
|
||||||
m_widgets.onMouseMoved(event);
|
m_widgets.onMouseMoved(event);
|
||||||
if (!event.isHandled())
|
if (!event.isHandled())
|
||||||
|
|
@ -329,7 +330,7 @@ namespace ogfx
|
||||||
|
|
||||||
void Widget::__onMouseScrolled(const Event& event)
|
void Widget::__onMouseScrolled(const Event& event)
|
||||||
{
|
{
|
||||||
if (event.isHandled()) return;
|
if (event.isHandled() || !isMouseScrolledEventEnabled()) return;
|
||||||
if (hasChildren())
|
if (hasChildren())
|
||||||
m_widgets.onMouseScrolled(event);
|
m_widgets.onMouseScrolled(event);
|
||||||
if (!event.isHandled())
|
if (!event.isHandled())
|
||||||
|
|
@ -342,7 +343,7 @@ namespace ogfx
|
||||||
|
|
||||||
void Widget::__onMouseEntered(const Event& event)
|
void Widget::__onMouseEntered(const Event& event)
|
||||||
{
|
{
|
||||||
if (event.isHandled()) return;
|
if (event.isHandled() || !isMouseEnteredEventEnabled()) return;
|
||||||
setThemeQualifier("hover");
|
setThemeQualifier("hover");
|
||||||
if (callback_onMouseEntered)
|
if (callback_onMouseEntered)
|
||||||
callback_onMouseEntered(event);
|
callback_onMouseEntered(event);
|
||||||
|
|
@ -353,7 +354,7 @@ namespace ogfx
|
||||||
|
|
||||||
void Widget::__onMouseExited(const Event& event)
|
void Widget::__onMouseExited(const Event& event)
|
||||||
{
|
{
|
||||||
if (event.isHandled()) return;
|
if (event.isHandled() || !isMouseExitedEventEnabled()) return;
|
||||||
setThemeQualifier("hover", false);
|
setThemeQualifier("hover", false);
|
||||||
if (callback_onMouseExited)
|
if (callback_onMouseExited)
|
||||||
callback_onMouseExited(event);
|
callback_onMouseExited(event);
|
||||||
|
|
@ -364,7 +365,7 @@ namespace ogfx
|
||||||
|
|
||||||
void Widget::__onMouseDragged(const Event& event)
|
void Widget::__onMouseDragged(const Event& event)
|
||||||
{
|
{
|
||||||
if (event.isHandled()) return;
|
if (event.isHandled() || !isMouseDraggedEventEnabled()) return;
|
||||||
if (hasChildren())
|
if (hasChildren())
|
||||||
m_widgets.onMouseDragged(event);
|
m_widgets.onMouseDragged(event);
|
||||||
if (!event.isHandled())
|
if (!event.isHandled())
|
||||||
|
|
@ -379,7 +380,7 @@ namespace ogfx
|
||||||
|
|
||||||
void Widget::__onKeyPressed(const Event& event)
|
void Widget::__onKeyPressed(const Event& event)
|
||||||
{
|
{
|
||||||
if (event.isHandled()) return;
|
if (event.isHandled() || !isKeyPressedEventEnabled()) return;
|
||||||
if (hasChildren())
|
if (hasChildren())
|
||||||
m_widgets.onKeyPressed(event);
|
m_widgets.onKeyPressed(event);
|
||||||
if (!event.isHandled())
|
if (!event.isHandled())
|
||||||
|
|
@ -392,7 +393,7 @@ namespace ogfx
|
||||||
|
|
||||||
void Widget::__onKeyReleased(const Event& event)
|
void Widget::__onKeyReleased(const Event& event)
|
||||||
{
|
{
|
||||||
if (event.isHandled()) return;
|
if (event.isHandled() || !isKeyReleasedEventEnabled()) return;
|
||||||
m_pressedButton = ogfx::MouseEventData::eButton::None;
|
m_pressedButton = ogfx::MouseEventData::eButton::None;
|
||||||
if (hasChildren())
|
if (hasChildren())
|
||||||
m_widgets.onKeyReleased(event);
|
m_widgets.onKeyReleased(event);
|
||||||
|
|
@ -406,7 +407,7 @@ namespace ogfx
|
||||||
|
|
||||||
void Widget::__onTextEntered(const Event& event)
|
void Widget::__onTextEntered(const Event& event)
|
||||||
{
|
{
|
||||||
if (event.isHandled()) return;
|
if (event.isHandled() || !isTextEnteredEventEnabled()) return;
|
||||||
if (hasChildren())
|
if (hasChildren())
|
||||||
m_widgets.onTextEntered(event);
|
m_widgets.onTextEntered(event);
|
||||||
if (!event.isHandled())
|
if (!event.isHandled())
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,8 @@ namespace ogfx
|
||||||
WindowClosed,
|
WindowClosed,
|
||||||
WindowResized,
|
WindowResized,
|
||||||
WindowFocused,
|
WindowFocused,
|
||||||
WindowFocusLost
|
WindowFocusLost,
|
||||||
|
ActionPerformed
|
||||||
};
|
};
|
||||||
public: using EventCallback = std::function<void(const Event&)>;
|
public: using EventCallback = std::function<void(const Event&)>;
|
||||||
public:
|
public:
|
||||||
|
|
@ -172,6 +173,21 @@ namespace ogfx
|
||||||
OSTD_BOOL_PARAM_GETSET_E(Tooltip, m_enableTooltip);
|
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:
|
protected:
|
||||||
void apply_common_theme_values(const ostd::Stylesheet& theme);
|
void apply_common_theme_values(const ostd::Stylesheet& theme);
|
||||||
inline void disableChildren(void) { m_allowChildren = false; }
|
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 =====
|
// ====== THEMING =====
|
||||||
String m_stylesheetCategoryName { "" };
|
String m_stylesheetCategoryName { "" };
|
||||||
stdvec<String> m_themeIDList;
|
stdvec<String> m_themeIDList;
|
||||||
|
|
@ -271,6 +302,7 @@ namespace ogfx
|
||||||
EventCallback callback_onWindowResized { nullptr };
|
EventCallback callback_onWindowResized { nullptr };
|
||||||
EventCallback callback_onWindowFocused { nullptr };
|
EventCallback callback_onWindowFocused { nullptr };
|
||||||
EventCallback callback_onWindowFocusLost { nullptr };
|
EventCallback callback_onWindowFocusLost { nullptr };
|
||||||
|
EventCallback callback_onActionPerformed { nullptr };
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// ====================== DUMMIES ======================
|
// ====================== DUMMIES ======================
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ class Window : public ogfx::gui::Window
|
||||||
});
|
});
|
||||||
|
|
||||||
m_btn1.setText("BUTTON");
|
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";
|
std::cout << showOpenFileDialog(filters) << "\n";
|
||||||
});
|
});
|
||||||
m_btn1.addThemeOverride("@.button.showIcon", true);
|
m_btn1.addThemeOverride("@.button.showIcon", true);
|
||||||
|
|
@ -119,7 +119,7 @@ class Window : public ogfx::gui::Window
|
||||||
|
|
||||||
m_list.setSize(200, 300);
|
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)));
|
m_list.addLine(ostd::Random::getString(ostd::Random::getui8(1, 40)));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue