diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/platforms/wasm/qwasmcompositor.cpp | 35 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmcompositor.h | 21 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmeventtranslator.cpp | 24 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmeventtranslator.h | 2 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmwindow.cpp | 55 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmwindow.h | 2 |
6 files changed, 53 insertions, 86 deletions
diff --git a/src/plugins/platforms/wasm/qwasmcompositor.cpp b/src/plugins/platforms/wasm/qwasmcompositor.cpp index 270f8e65e7..9289b0fbc8 100644 --- a/src/plugins/platforms/wasm/qwasmcompositor.cpp +++ b/src/plugins/platforms/wasm/qwasmcompositor.cpp @@ -739,23 +739,27 @@ void QWasmCompositor::WindowManipulation::resizeWindow(const QPoint& amount) { const auto& minShrink = std::get<ResizeState>(m_state->operationSpecific).m_minShrink; const auto& maxGrow = std::get<ResizeState>(m_state->operationSpecific).m_maxGrow; - const auto& resizeMode = std::get<ResizeState>(m_state->operationSpecific).m_resizeMode; + const auto &resizeEdges = std::get<ResizeState>(m_state->operationSpecific).m_resizeEdges; const QPoint cappedGrowVector( - std::min(maxGrow.x(), std::max(minShrink.x(), - (resizeMode & Left) ? -amount.x() : (resizeMode & Right) ? amount.x() : 0)), - std::min(maxGrow.y(), std::max(minShrink.y(), - (resizeMode & Top) ? -amount.y() : (resizeMode & Bottom) ? amount.y() : 0))); + std::min(maxGrow.x(), + std::max(minShrink.x(), + (resizeEdges & Qt::Edge::LeftEdge) ? -amount.x() + : (resizeEdges & Qt::Edge::RightEdge) ? amount.x() + : 0)), + std::min(maxGrow.y(), + std::max(minShrink.y(), + (resizeEdges & Qt::Edge::TopEdge) ? -amount.y() + : (resizeEdges & Qt::Edge::BottomEdge) ? amount.y() + : 0))); const auto& initialBounds = std::get<ResizeState>(m_state->operationSpecific).m_initialWindowBounds; - m_state->window->setGeometry( - initialBounds.adjusted( - (resizeMode & Left) ? -cappedGrowVector.x() : 0, - (resizeMode & Top) ? -cappedGrowVector.y() : 0, - (resizeMode & Right) ? cappedGrowVector.x() : 0, - (resizeMode & Bottom) ? cappedGrowVector.y() : 0 - )); + m_state->window->setGeometry(initialBounds.adjusted( + (resizeEdges & Qt::Edge::LeftEdge) ? -cappedGrowVector.x() : 0, + (resizeEdges & Qt::Edge::TopEdge) ? -cappedGrowVector.y() : 0, + (resizeEdges & Qt::Edge::RightEdge) ? cappedGrowVector.x() : 0, + (resizeEdges & Qt::Edge::BottomEdge) ? cappedGrowVector.y() : 0)); } void QWasmCompositor::onTopWindowChanged() @@ -866,8 +870,8 @@ bool QWasmCompositor::processPointer(const PointerEvent& event) const bool isOnResizeRegion = wasmTargetWindow->isPointOnResizeRegion(targetPointInScreenCoords); if (isTargetWindowResizable && isOnResizeRegion && !isTargetWindowBlocked) { - const QCursor resizingCursor = QWasmEventTranslator::cursorForMode( - wasmTargetWindow->resizeModeAtPoint(targetPointInScreenCoords)); + const QCursor resizingCursor = QWasmEventTranslator::cursorForEdges( + wasmTargetWindow->resizeEdgesAtPoint(targetPointInScreenCoords)); if (resizingCursor != targetWindow->cursor()) { m_isResizeCursorDisplayed = true; @@ -988,7 +992,8 @@ void QWasmCompositor::WindowManipulation::onPointerDown( }); } else if (asWasmWindow(windowAtPoint)->isPointOnResizeRegion(pointInScreenCoords)) { operationSpecific = std::make_unique<std::variant<ResizeState, MoveState>>(ResizeState{ - .m_resizeMode = asWasmWindow(windowAtPoint)->resizeModeAtPoint(pointInScreenCoords), + .m_resizeEdges = + asWasmWindow(windowAtPoint)->resizeEdgesAtPoint(pointInScreenCoords), .m_originInScreenCoords = pointInScreenCoords, .m_initialWindowBounds = windowAtPoint->geometry(), .m_minShrink = diff --git a/src/plugins/platforms/wasm/qwasmcompositor.h b/src/plugins/platforms/wasm/qwasmcompositor.h index 0e7bd0eeec..2af0cbd449 100644 --- a/src/plugins/platforms/wasm/qwasmcompositor.h +++ b/src/plugins/platforms/wasm/qwasmcompositor.h @@ -60,25 +60,6 @@ public: }; Q_DECLARE_FLAGS(StateFlags, QWasmStateFlag) - enum ResizeDimension { - Left = 1, - Right = 1 << 1, - Top = 1 << 2, - Bottom = 1 << 3 - }; - - enum ResizeMode { - ResizeNone, - ResizeTopLeft = Top | Left, - ResizeTop = Top, - ResizeTopRight = Top | Right, - ResizeRight = Right, - ResizeBottomRight = Bottom | Right, - ResizeBottom = Bottom, - ResizeBottomLeft = Bottom | Left, - ResizeLeft = Left - }; - struct QWasmTitleBarOptions { QRect rect; Qt::WindowFlags flags; @@ -153,7 +134,7 @@ private: private: struct ResizeState { - ResizeMode m_resizeMode; + Qt::Edges m_resizeEdges; QPoint m_originInScreenCoords; QRect m_initialWindowBounds; const QPoint m_minShrink; diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp index 01f15e7dff..323a985454 100644 --- a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp +++ b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp @@ -283,23 +283,25 @@ QWasmEventTranslator::QWasmEventTranslator() = default; QWasmEventTranslator::~QWasmEventTranslator() = default; -QCursor QWasmEventTranslator::cursorForMode(QWasmCompositor::ResizeMode m) +QCursor QWasmEventTranslator::cursorForEdges(Qt::Edges edges) { - switch (m) { - case QWasmCompositor::ResizeTopLeft: - case QWasmCompositor::ResizeBottomRight: + switch (edges) { + case Qt::Edge::LeftEdge | Qt::Edge::TopEdge: + case Qt::Edge::RightEdge | Qt::Edge::BottomEdge: return Qt::SizeFDiagCursor; - case QWasmCompositor::ResizeBottomLeft: - case QWasmCompositor::ResizeTopRight: + case Qt::Edge::LeftEdge | Qt::Edge::BottomEdge: + case Qt::Edge::RightEdge | Qt::Edge::TopEdge: return Qt::SizeBDiagCursor; - case QWasmCompositor::ResizeTop: - case QWasmCompositor::ResizeBottom: + case Qt::Edge::TopEdge: + case Qt::Edge::BottomEdge: return Qt::SizeVerCursor; - case QWasmCompositor::ResizeLeft: - case QWasmCompositor::ResizeRight: + case Qt::Edge::LeftEdge: + case Qt::Edge::RightEdge: return Qt::SizeHorCursor; - case QWasmCompositor::ResizeNone: + case Qt::Edge(0): return Qt::ArrowCursor; + default: + Q_ASSERT(false); // Bad edges } return Qt::ArrowCursor; } diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.h b/src/plugins/platforms/wasm/qwasmeventtranslator.h index 8f4e9f6d05..d89b543386 100644 --- a/src/plugins/platforms/wasm/qwasmeventtranslator.h +++ b/src/plugins/platforms/wasm/qwasmeventtranslator.h @@ -33,7 +33,7 @@ public: explicit QWasmEventTranslator(); ~QWasmEventTranslator(); - static QCursor cursorForMode(QWasmCompositor::ResizeMode mode); + static QCursor cursorForEdges(Qt::Edges edges); TranslatedEvent translateKeyEvent(int emEventType, const EmscriptenKeyboardEvent *keyEvent); diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp index 4e429db65f..4fc9af4b5c 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.cpp +++ b/src/plugins/platforms/wasm/qwasmwindow.cpp @@ -245,45 +245,24 @@ bool QWasmWindow::isPointOnResizeRegion(QPoint point) const && resizeRegion().contains(point); } -QWasmCompositor::ResizeMode QWasmWindow::resizeModeAtPoint(QPoint point) const -{ - QPoint p1 = window()->frameGeometry().topLeft() - QPoint(5, 5); - QPoint p2 = window()->frameGeometry().bottomRight() + QPoint(5, 5); - int corner = 20; - - QRect top(p1, QPoint(p2.x(), p1.y() + corner)); - QRect middle(QPoint(p1.x(), p1.y() + corner), QPoint(p2.x(), p2.y() - corner)); - QRect bottom(QPoint(p1.x(), p2.y() - corner), p2); - - QRect left(p1, QPoint(p1.x() + corner, p2.y())); - QRect center(QPoint(p1.x() + corner, p1.y()), QPoint(p2.x() - corner, p2.y())); - QRect right(QPoint(p2.x() - corner, p1.y()), p2); - - if (top.contains(point)) { - // Top - if (left.contains(point)) - return QWasmCompositor::ResizeTopLeft; - if (center.contains(point)) - return QWasmCompositor::ResizeTop; - if (right.contains(point)) - return QWasmCompositor::ResizeTopRight; - } else if (middle.contains(point)) { - // Middle - if (left.contains(point)) - return QWasmCompositor::ResizeLeft; - if (right.contains(point)) - return QWasmCompositor::ResizeRight; - } else if (bottom.contains(point)) { - // Bottom - if (left.contains(point)) - return QWasmCompositor::ResizeBottomLeft; - if (center.contains(point)) - return QWasmCompositor::ResizeBottom; - if (right.contains(point)) - return QWasmCompositor::ResizeBottomRight; - } +Qt::Edges QWasmWindow::resizeEdgesAtPoint(QPoint point) const +{ + const QPoint topLeft = window()->frameGeometry().topLeft() - QPoint(5, 5); + const QPoint bottomRight = window()->frameGeometry().bottomRight() + QPoint(5, 5); + const int gripAreaWidth = std::min(20, (bottomRight.y() - topLeft.y()) / 2); + + const QRect top(topLeft, QPoint(bottomRight.x(), topLeft.y() + gripAreaWidth)); + const QRect bottom(QPoint(topLeft.x(), bottomRight.y() - gripAreaWidth), bottomRight); + const QRect left(topLeft, QPoint(topLeft.x() + gripAreaWidth, bottomRight.y())); + const QRect right(QPoint(bottomRight.x() - gripAreaWidth, topLeft.y()), bottomRight); + + Q_ASSERT(!top.intersects(bottom)); + Q_ASSERT(!left.intersects(right)); - return QWasmCompositor::ResizeNone; + Qt::Edges edges(top.contains(point) ? Qt::Edge::TopEdge : Qt::Edge(0)); + edges |= bottom.contains(point) ? Qt::Edge::BottomEdge : Qt::Edge(0); + edges |= left.contains(point) ? Qt::Edge::LeftEdge : Qt::Edge(0); + return edges | (right.contains(point) ? Qt::Edge::RightEdge : Qt::Edge(0)); } QRect getSubControlRect(const QWasmWindow *window, QWasmCompositor::SubControls subControl) diff --git a/src/plugins/platforms/wasm/qwasmwindow.h b/src/plugins/platforms/wasm/qwasmwindow.h index 6503c4a5c6..650e34ce5c 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.h +++ b/src/plugins/platforms/wasm/qwasmwindow.h @@ -53,7 +53,7 @@ public: QRegion resizeRegion() const; bool isPointOnTitle(QPoint point) const; bool isPointOnResizeRegion(QPoint point) const; - QWasmCompositor::ResizeMode resizeModeAtPoint(QPoint point) const; + Qt::Edges resizeEdgesAtPoint(QPoint point) const; QRect maxButtonRect() const; QRect minButtonRect() const; QRect closeButtonRect() const; |