diff --git a/external/scons-plus-plus b/external/scons-plus-plus index a7c736d..0a29b41 160000 --- a/external/scons-plus-plus +++ b/external/scons-plus-plus @@ -1 +1 @@ -Subproject commit a7c736de56b438d2e47b074fc1b06d05cd7a0c35 +Subproject commit 0a29b416391359a84cb847f57fc391da71a8e3cb diff --git a/private/sdl_gpu_test/gui/button.cpp b/private/sdl_gpu_test/gui/button.cpp index 156ee3e..1392eef 100644 --- a/private/sdl_gpu_test/gui/button.cpp +++ b/private/sdl_gpu_test/gui/button.cpp @@ -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) { clicked.emit(); + return EventResponse::HANDLED; } + return EventResponse::UNHANDLED; } void Button::revalidate() diff --git a/private/sdl_gpu_test/gui/button.hpp b/private/sdl_gpu_test/gui/button.hpp index 8f862a5..185b316 100644 --- a/private/sdl_gpu_test/gui/button.hpp +++ b/private/sdl_gpu_test/gui/button.hpp @@ -76,7 +76,7 @@ public: void handleEnteredTree() override; void handleMouseMotion(const sdlpp::MouseMotionEvent& event) override; - void handleMouseButton(const sdlpp::MouseButtonEvent&) override; + EventResponse handleMouseButton(const sdlpp::MouseButtonEvent&) override; void revalidate() override; private: void update(); diff --git a/private/sdl_gpu_test/gui/widget.cpp b/private/sdl_gpu_test/gui/widget.cpp index a929777..70cb287 100644 --- a/private/sdl_gpu_test/gui/widget.cpp +++ b/private/sdl_gpu_test/gui/widget.cpp @@ -39,12 +39,16 @@ 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) { - 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) @@ -81,9 +85,9 @@ void WidgetTree::notifyMouseMoved(const sdlpp::MouseMotionEvent& 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 diff --git a/private/sdl_gpu_test/gui/widget.hpp b/private/sdl_gpu_test/gui/widget.hpp index 36eb989..1816736 100644 --- a/private/sdl_gpu_test/gui/widget.hpp +++ b/private/sdl_gpu_test/gui/widget.hpp @@ -13,6 +13,12 @@ namespace sdl_gpu_test { +enum class EventResponse +{ + UNHANDLED, + HANDLED +}; + class Widget { protected: @@ -23,7 +29,7 @@ public: virtual void handleEnteredTree() {} 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() {} @@ -43,7 +49,7 @@ private: public: void handleEnteredTree() 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); @@ -76,7 +82,7 @@ public: ParentWidget& getRootWidget() noexcept { return mRootWidget; } void notifyMouseMoved(const sdlpp::MouseMotionEvent& event); - void notifyMouseButton(const sdlpp::MouseButtonEvent& event); + EventResponse notifyMouseButton(const sdlpp::MouseButtonEvent& event); void invalidateWidget(Widget* widget) noexcept; }; diff --git a/private/texture_packer/SModule b/private/texture_packer/SModule index a8e1a59..56da7b2 100644 --- a/private/texture_packer/SModule +++ b/private/texture_packer/SModule @@ -33,7 +33,7 @@ def _pack_textures(env, target: str, source: 'list[str]'): source = source, action = f'{_exe_name()} $TARGET $SOURCES' ) - # env.Depends(cmd, prog_packer) + env.Depends(cmd, prog_packer) return cmd env.AddMethod(_pack_textures, 'PackTextures')