Fixed build and added EventResponse for mouse button events.

This commit is contained in:
Patrick 2024-09-20 00:14:58 +02:00
parent edf8108ea9
commit f34bf88237
6 changed files with 23 additions and 11 deletions

@ -1 +1 @@
Subproject commit a7c736de56b438d2e47b074fc1b06d05cd7a0c35 Subproject commit 0a29b416391359a84cb847f57fc391da71a8e3cb

View File

@ -106,12 +106,14 @@ void Button::handleMouseMotion(const sdlpp::MouseMotionEvent& event)
} }
} }
void Button::handleMouseButton(const sdlpp::MouseButtonEvent&) EventResponse Button::handleMouseButton(const sdlpp::MouseButtonEvent&)
{ {
if (mHovered) if (mHovered)
{ {
clicked.emit(); clicked.emit();
return EventResponse::HANDLED;
} }
return EventResponse::UNHANDLED;
} }
void Button::revalidate() void Button::revalidate()

View File

@ -76,7 +76,7 @@ public:
void handleEnteredTree() override; void handleEnteredTree() override;
void handleMouseMotion(const sdlpp::MouseMotionEvent& event) override; void handleMouseMotion(const sdlpp::MouseMotionEvent& event) override;
void handleMouseButton(const sdlpp::MouseButtonEvent&) override; EventResponse handleMouseButton(const sdlpp::MouseButtonEvent&) override;
void revalidate() override; void revalidate() override;
private: private:
void update(); void update();

View File

@ -39,13 +39,17 @@ void ParentWidget::handleMouseMotion(const sdlpp::MouseMotionEvent& event)
} }
} }
void ParentWidget::handleMouseButton(const sdlpp::MouseButtonEvent& event) EventResponse ParentWidget::handleMouseButton(const sdlpp::MouseButtonEvent& event)
{ {
for (widget_ptr_t& child : mChildren) for (widget_ptr_t& child : mChildren)
{ {
child->handleMouseButton(event); if (const EventResponse response = child->handleMouseButton(event); response == EventResponse::HANDLED)
{
return EventResponse::HANDLED;
} }
} }
return EventResponse::UNHANDLED;
}
Widget* ParentWidget::addChild(widget_ptr_t&& child) Widget* ParentWidget::addChild(widget_ptr_t&& child)
{ {
@ -81,9 +85,9 @@ void WidgetTree::notifyMouseMoved(const sdlpp::MouseMotionEvent& event)
mRootWidget.handleMouseMotion(event); mRootWidget.handleMouseMotion(event);
} }
void WidgetTree::notifyMouseButton(const sdlpp::MouseButtonEvent& event) EventResponse WidgetTree::notifyMouseButton(const sdlpp::MouseButtonEvent& event)
{ {
mRootWidget.handleMouseButton(event); return mRootWidget.handleMouseButton(event);
} }
void WidgetTree::invalidateWidget(Widget* widget) noexcept void WidgetTree::invalidateWidget(Widget* widget) noexcept

View File

@ -13,6 +13,12 @@
namespace sdl_gpu_test namespace sdl_gpu_test
{ {
enum class EventResponse
{
UNHANDLED,
HANDLED
};
class Widget class Widget
{ {
protected: protected:
@ -23,7 +29,7 @@ public:
virtual void handleEnteredTree() {} virtual void handleEnteredTree() {}
virtual void handleMouseMotion(const sdlpp::MouseMotionEvent& /* event */) {} virtual void handleMouseMotion(const sdlpp::MouseMotionEvent& /* event */) {}
virtual void handleMouseButton(const sdlpp::MouseButtonEvent& /* event */) {} virtual EventResponse handleMouseButton(const sdlpp::MouseButtonEvent& /* event */) { return EventResponse::UNHANDLED; }
virtual void revalidate() {} virtual void revalidate() {}
@ -43,7 +49,7 @@ private:
public: public:
void handleEnteredTree() override; void handleEnteredTree() override;
void handleMouseMotion(const sdlpp::MouseMotionEvent& event) override; void handleMouseMotion(const sdlpp::MouseMotionEvent& event) override;
void handleMouseButton(const sdlpp::MouseButtonEvent&) override; EventResponse handleMouseButton(const sdlpp::MouseButtonEvent& event) override;
Widget* addChild(widget_ptr_t&& child); Widget* addChild(widget_ptr_t&& child);
@ -76,7 +82,7 @@ public:
ParentWidget& getRootWidget() noexcept { return mRootWidget; } ParentWidget& getRootWidget() noexcept { return mRootWidget; }
void notifyMouseMoved(const sdlpp::MouseMotionEvent& event); void notifyMouseMoved(const sdlpp::MouseMotionEvent& event);
void notifyMouseButton(const sdlpp::MouseButtonEvent& event); EventResponse notifyMouseButton(const sdlpp::MouseButtonEvent& event);
void invalidateWidget(Widget* widget) noexcept; void invalidateWidget(Widget* widget) noexcept;
}; };

View File

@ -33,7 +33,7 @@ def _pack_textures(env, target: str, source: 'list[str]'):
source = source, source = source,
action = f'{_exe_name()} $TARGET $SOURCES' action = f'{_exe_name()} $TARGET $SOURCES'
) )
# env.Depends(cmd, prog_packer) env.Depends(cmd, prog_packer)
return cmd return cmd
env.AddMethod(_pack_textures, 'PackTextures') env.AddMethod(_pack_textures, 'PackTextures')