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)
{
clicked.emit();
return EventResponse::HANDLED;
}
return EventResponse::UNHANDLED;
}
void Button::revalidate()

View File

@ -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();

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)
{
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

View File

@ -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;
};

View File

@ -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')