Add EventFilterInterface::onMouseEvent()

Some event consumers don't want to overload N methods and just
overload one instead
This commit is contained in:
Sergio Martins
2022-07-04 22:06:30 +01:00
parent d75e691795
commit b6460c11f7
5 changed files with 20 additions and 22 deletions

View File

@@ -54,6 +54,14 @@ public:
{ {
return false; return false;
} }
/// @brief Provided for convenience, aggregates all other overloads
/// receives all mouse event types, if you return true here then the specialized counterparts won't be called
/// Example, if true is returned here for a mouse press, then onMouseButtonPress() won't be called
virtual bool onMouseEvent(View *, QMouseEvent *)
{
return false;
}
}; };
} }

View File

@@ -214,21 +214,6 @@ bool WidgetResizeHandler::onMouseEvent(View *widget, QMouseEvent *e)
return false; return false;
} }
bool WidgetResizeHandler::onMouseButtonPress(View *view, QMouseEvent *ev)
{
return onMouseEvent(view, ev);
}
bool WidgetResizeHandler::onMouseButtonRelease(View *view, QMouseEvent *ev)
{
return onMouseEvent(view, ev);
}
bool WidgetResizeHandler::onMouseButtonMove(View *view, QMouseEvent *ev)
{
return onMouseEvent(view, ev);
}
bool WidgetResizeHandler::mouseMoveEvent(QMouseEvent *e) bool WidgetResizeHandler::mouseMoveEvent(QMouseEvent *e)
{ {
const QPoint globalPos = Qt5Qt6Compat::eventGlobalPos(e); const QPoint globalPos = Qt5Qt6Compat::eventGlobalPos(e);

View File

@@ -38,7 +38,8 @@ class DOCKS_EXPORT WidgetResizeHandler : public QObject, public EventFilterInter
{ {
Q_OBJECT Q_OBJECT
public: public:
enum Feature { enum Feature
{
Feature_None = 0, Feature_None = 0,
Feature_NativeShadow = 1, Feature_NativeShadow = 1,
Feature_NativeResize = 2, Feature_NativeResize = 2,
@@ -143,11 +144,7 @@ public:
private: private:
// EventFilterInterface: // EventFilterInterface:
bool onMouseButtonPress(View *, QMouseEvent *) override; bool onMouseEvent(View *, QMouseEvent *) override;
bool onMouseButtonRelease(View *, QMouseEvent *) override;
bool onMouseButtonMove(View *, QMouseEvent *) override;
bool onMouseEvent(View *, QMouseEvent *e);
void setTarget(View *w); void setTarget(View *w);
bool mouseMoveEvent(QMouseEvent *e); bool mouseMoveEvent(QMouseEvent *e);
void updateCursor(CursorPosition m); void updateCursor(CursorPosition m);

View File

@@ -163,9 +163,13 @@ public:
for (EventFilterInterface *filter : filters) { for (EventFilterInterface *filter : filters) {
// Filter might have been deleted meanwhile
if (std::find(q->d->m_globalEventFilters.cbegin(), q->d->m_globalEventFilters.cend(), filter) == q->d->m_globalEventFilters.cend()) if (std::find(q->d->m_globalEventFilters.cbegin(), q->d->m_globalEventFilters.cend(), filter) == q->d->m_globalEventFilters.cend())
continue; continue;
if (filter->onMouseEvent(view.get(), ev))
return true;
switch (ev->type()) { switch (ev->type()) {
case QEvent::MouseButtonPress: case QEvent::MouseButtonPress:
if (filter->onMouseButtonPress(view.get(), ev)) if (filter->onMouseButtonPress(view.get(), ev))
@@ -450,4 +454,4 @@ Platform::DisplayType Platform_qt::displayType() const
bool Platform_qt::isLeftMouseButtonPressed() const bool Platform_qt::isLeftMouseButtonPressed() const
{ {
return qGuiApp->mouseButtons() & Qt::LeftButton; return qGuiApp->mouseButtons() & Qt::LeftButton;
} }

View File

@@ -38,6 +38,10 @@ public:
bool handleMouseEvent(QMouseEvent *ev) bool handleMouseEvent(QMouseEvent *ev)
{ {
for (EventFilterInterface *filter : qAsConst(q->d->m_viewEventFilters)) { for (EventFilterInterface *filter : qAsConst(q->d->m_viewEventFilters)) {
if (filter->onMouseEvent(q, ev))
return true;
switch (ev->type()) { switch (ev->type()) {
case QEvent::MouseButtonPress: case QEvent::MouseButtonPress:
if (filter->onMouseButtonPress(q, ev)) if (filter->onMouseButtonPress(q, ev))