summaryrefslogtreecommitdiffstats
path: root/examples/wayland/qwindow-compositor
diff options
context:
space:
mode:
authorErik Larsson <erik@ortogonal.com>2016-04-17 20:34:21 +0200
committerErik Larsson <erik@ortogonal.com>2016-04-21 11:12:43 +0000
commitfb417c301cace4825d13e818e4e7e4e1b966c630 (patch)
tree77a4f0e62cb581b3997c19684ea465ce30a8aa98 /examples/wayland/qwindow-compositor
parenta1b8e326e45edbf7d373d4d44bdecad13562efa4 (diff)
Move drag icon relative the cursor hotspot position
Instead of placing the drag icons top-left corner at the cursors hotspot the drag icon is moved so it will be placed correct relative the cursor hotspot. This will makes the drag feeling more realistic. Change-Id: I8d60ae1b7788accb9034575983417abae4c58c1a Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com> Reviewed-by: Johan Helsing <johan.helsing@qt.io>
Diffstat (limited to 'examples/wayland/qwindow-compositor')
-rw-r--r--examples/wayland/qwindow-compositor/compositorwindow.cpp9
-rw-r--r--examples/wayland/qwindow-compositor/compositorwindow.h1
-rw-r--r--examples/wayland/qwindow-compositor/windowcompositor.cpp9
-rw-r--r--examples/wayland/qwindow-compositor/windowcompositor.h3
4 files changed, 12 insertions, 10 deletions
diff --git a/examples/wayland/qwindow-compositor/compositorwindow.cpp b/examples/wayland/qwindow-compositor/compositorwindow.cpp
index 002831283..7e10a1739 100644
--- a/examples/wayland/qwindow-compositor/compositorwindow.cpp
+++ b/examples/wayland/qwindow-compositor/compositorwindow.cpp
@@ -62,7 +62,6 @@ void CompositorWindow::setCompositor(WindowCompositor *comp) {
connect(m_compositor, &WindowCompositor::startMove, this, &CompositorWindow::startMove);
connect(m_compositor, &WindowCompositor::startResize, this, &CompositorWindow::startResize);
connect(m_compositor, &WindowCompositor::dragStarted, this, &CompositorWindow::startDrag);
- connect(m_compositor, &WindowCompositor::frameOffset, this, &CompositorWindow::setFrameOffset);
}
void CompositorWindow::initializeGL()
@@ -180,12 +179,6 @@ void CompositorWindow::startDrag(WindowCompositorView *dragIcon)
m_compositor->raise(dragIcon);
}
-void CompositorWindow::setFrameOffset(const QPoint &offset)
-{
- if (m_mouseView)
- m_mouseView->setPosition(m_mouseView->position() + offset);
-}
-
void CompositorWindow::mousePressEvent(QMouseEvent *e)
{
if (mouseGrab())
@@ -247,7 +240,7 @@ void CompositorWindow::mouseMoveEvent(QMouseEvent *e)
WindowCompositorView *view = viewAt(e->localPos());
m_compositor->handleDrag(view, e);
if (m_dragIconView) {
- m_dragIconView->setPosition(e->localPos());
+ m_dragIconView->setPosition(e->localPos() + m_dragIconView->offset());
update();
}
}
diff --git a/examples/wayland/qwindow-compositor/compositorwindow.h b/examples/wayland/qwindow-compositor/compositorwindow.h
index c7c637e53..8b5180a00 100644
--- a/examples/wayland/qwindow-compositor/compositorwindow.h
+++ b/examples/wayland/qwindow-compositor/compositorwindow.h
@@ -73,7 +73,6 @@ private slots:
void startMove();
void startResize(int edge, bool anchored);
void startDrag(WindowCompositorView *dragIcon);
- void setFrameOffset(const QPoint &offset);
private:
enum GrabState { NoGrab, MoveGrab, ResizeGrab, DragGrab };
diff --git a/examples/wayland/qwindow-compositor/windowcompositor.cpp b/examples/wayland/qwindow-compositor/windowcompositor.cpp
index e91778725..bd39908e5 100644
--- a/examples/wayland/qwindow-compositor/windowcompositor.cpp
+++ b/examples/wayland/qwindow-compositor/windowcompositor.cpp
@@ -108,6 +108,12 @@ void WindowCompositorView::onXdgSetFullscreen(QWaylandOutput* clientPreferredOut
setPosition(outputToFullscreen->position());
}
+void WindowCompositorView::onOffsetForNextFrame(const QPoint &offset)
+{
+ m_offset = offset;
+ setPosition(position() + offset);
+}
+
void WindowCompositorView::onXdgUnsetFullscreen()
{
onXdgUnsetMaximized();
@@ -145,7 +151,6 @@ void WindowCompositor::onSurfaceCreated(QWaylandSurface *surface)
connect(surface, &QWaylandSurface::surfaceDestroyed, this, &WindowCompositor::surfaceDestroyed);
connect(surface, &QWaylandSurface::mappedChanged, this, &WindowCompositor::surfaceMappedChanged);
connect(surface, &QWaylandSurface::redraw, this, &WindowCompositor::triggerRender);
- connect(surface, &QWaylandSurface::offsetForNextFrame, this, &WindowCompositor::frameOffset);
connect(surface, &QWaylandSurface::subsurfacePositionChanged, this, &WindowCompositor::onSubsurfacePositionChanged);
@@ -154,6 +159,7 @@ void WindowCompositor::onSurfaceCreated(QWaylandSurface *surface)
view->setOutput(outputFor(m_window));
m_views << view;
connect(view, &QWaylandView::surfaceDestroyed, this, &WindowCompositor::viewSurfaceDestroyed);
+ connect(surface, &QWaylandSurface::offsetForNextFrame, view, &WindowCompositorView::onOffsetForNextFrame);
}
void WindowCompositor::surfaceMappedChanged()
@@ -412,6 +418,7 @@ void WindowCompositor::startDrag()
QWaylandDrag *currentDrag = defaultInputDevice()->drag();
Q_ASSERT(currentDrag);
WindowCompositorView *iconView = findView(currentDrag->icon());
+ iconView->setPosition(m_window->mapFromGlobal(QCursor::pos()));
emit dragStarted(iconView);
}
diff --git a/examples/wayland/qwindow-compositor/windowcompositor.h b/examples/wayland/qwindow-compositor/windowcompositor.h
index 96af01f82..5290d7c85 100644
--- a/examples/wayland/qwindow-compositor/windowcompositor.h
+++ b/examples/wayland/qwindow-compositor/windowcompositor.h
@@ -68,6 +68,7 @@ public:
WindowCompositorView *parentView() const { return m_parentView; }
QPointF parentPosition() const { return m_parentView ? (m_parentView->position() + m_parentView->parentPosition()) : QPointF(); }
QSize windowSize() { return m_xdgSurface ? m_xdgSurface->windowGeometry().size() : surface()->size(); }
+ QPoint offset() const { return m_offset; }
private:
friend class WindowCompositor;
@@ -77,12 +78,14 @@ private:
QWaylandXdgSurface *m_xdgSurface;
QWaylandXdgPopup *m_xdgPopup;
WindowCompositorView *m_parentView;
+ QPoint m_offset;
public slots:
void onXdgSetMaximized();
void onXdgUnsetMaximized();
void onXdgSetFullscreen(QWaylandOutput *output);
void onXdgUnsetFullscreen();
+ void onOffsetForNextFrame(const QPoint &offset);
};
class WindowCompositor : public QWaylandCompositor