summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/compositor/compositor_api/waylandcompositor.cpp5
-rw-r--r--src/compositor/compositor_api/waylandcompositor.h2
-rw-r--r--src/compositor/compositor_api/waylandsurface.cpp22
-rw-r--r--src/compositor/compositor_api/waylandsurface.h7
-rw-r--r--src/compositor/compositor_api/waylandsurfaceitem.cpp6
-rw-r--r--src/compositor/compositor_api/waylandsurfaceitem.h3
-rw-r--r--src/compositor/wayland_wrapper/wlcompositor.cpp5
-rw-r--r--src/compositor/wayland_wrapper/wlcompositor.h1
-rw-r--r--src/compositor/wayland_wrapper/wlextendedsurface.cpp8
-rw-r--r--src/compositor/wayland_wrapper/wloutput.h1
10 files changed, 58 insertions, 2 deletions
diff --git a/src/compositor/compositor_api/waylandcompositor.cpp b/src/compositor/compositor_api/waylandcompositor.cpp
index b1388cbee..9196a5741 100644
--- a/src/compositor/compositor_api/waylandcompositor.cpp
+++ b/src/compositor/compositor_api/waylandcompositor.cpp
@@ -157,6 +157,11 @@ void WaylandCompositor::setOutputGeometry(const QRect &geometry)
m_compositor->setOutputGeometry(geometry);
}
+QRect WaylandCompositor::outputGeometry() const
+{
+ return m_compositor->outputGeometry();
+}
+
WaylandInputDevice *WaylandCompositor::defaultInputDevice() const
{
return m_compositor->defaultInputDevice()->handle();
diff --git a/src/compositor/compositor_api/waylandcompositor.h b/src/compositor/compositor_api/waylandcompositor.h
index 3cc255a8b..220726590 100644
--- a/src/compositor/compositor_api/waylandcompositor.h
+++ b/src/compositor/compositor_api/waylandcompositor.h
@@ -82,7 +82,9 @@ public:
const char *socketName() const;
void setScreenOrientation(Qt::ScreenOrientation orientation);
+
void setOutputGeometry(const QRect &outputGeometry);
+ QRect outputGeometry() const;
WaylandInputDevice *defaultInputDevice() const;
diff --git a/src/compositor/compositor_api/waylandsurface.cpp b/src/compositor/compositor_api/waylandsurface.cpp
index e9be748cd..7effff050 100644
--- a/src/compositor/compositor_api/waylandsurface.cpp
+++ b/src/compositor/compositor_api/waylandsurface.cpp
@@ -47,8 +47,12 @@
#include "wayland_wrapper/wlsubsurface.h"
#include "wayland_wrapper/wlcompositor.h"
+#include "waylandcompositor.h"
#include "waylandwindowmanagerintegration.h"
+#include <QtGui/QGuiApplication>
+#include <QtGui/QScreen>
+
#ifdef QT_COMPOSITOR_QUICK
#include "waylandsurfaceitem.h"
#endif
@@ -80,7 +84,7 @@ public:
WaylandSurface::WaylandSurface(Wayland::Surface *surface)
: QObject(*new WaylandSurfacePrivate(surface))
{
-
+ connect(this, SIGNAL(windowOrientationChanged()), this, SIGNAL(windowRotationChanged()));
}
WaylandSurface *WaylandSurface::parentSurface() const
@@ -159,7 +163,23 @@ Qt::ScreenOrientation WaylandSurface::windowOrientation() const
return d->surface->extendedSurface()->windowOrientation();
}
+/*!
+ \property windowRotation
+
+ Convenience property to get the rotation required to map the surface to the screen
+ based on its windowOrientation.
+ */
+int WaylandSurface::windowRotation() const
+{
+ QRect geometry = compositor()->outputGeometry();
+ Qt::ScreenOrientation compositorOrientation = geometry.width() >= geometry.height() ? Qt::LandscapeOrientation : Qt::PortraitOrientation;
+ Qt::ScreenOrientation wOrientation = windowOrientation();
+ if (wOrientation == Qt::PrimaryOrientation)
+ return 0;
+
+ return QGuiApplication::primaryScreen()->angleBetween(wOrientation, compositorOrientation);
+}
WaylandSurface::WindowFlags WaylandSurface::windowFlags() const
{
diff --git a/src/compositor/compositor_api/waylandsurface.h b/src/compositor/compositor_api/waylandsurface.h
index 834906611..40b87017e 100644
--- a/src/compositor/compositor_api/waylandsurface.h
+++ b/src/compositor/compositor_api/waylandsurface.h
@@ -73,6 +73,9 @@ class Q_COMPOSITOR_EXPORT WaylandSurface : public QObject
Q_PROPERTY(QSize size READ size WRITE setSize NOTIFY sizeChanged)
Q_PROPERTY(QPointF pos READ pos WRITE setPos NOTIFY posChanged)
Q_PROPERTY(WaylandSurface::WindowFlags windowFlags READ windowFlags NOTIFY windowFlagsChanged)
+ Q_PROPERTY(Qt::ScreenOrientation windowOrientation READ windowOrientation NOTIFY windowOrientationChanged)
+ Q_PROPERTY(Qt::ScreenOrientation contentOrientation READ contentOrientation NOTIFY contentOrientationChanged)
+ Q_PROPERTY(int windowRotation READ windowRotation NOTIFY windowRotationChanged)
Q_ENUMS(WindowFlag)
Q_FLAGS(WindowFlag WindowFlags)
@@ -107,6 +110,7 @@ public:
Qt::ScreenOrientation contentOrientation() const;
Qt::ScreenOrientation windowOrientation() const;
+ int windowRotation() const;
WindowFlags windowFlags() const;
@@ -147,6 +151,9 @@ signals:
void posChanged();
void windowPropertyChanged(const QString &name, const QVariant &value);
void windowFlagsChanged(WindowFlags flags);
+ void windowOrientationChanged();
+ void contentOrientationChanged();
+ void windowRotationChanged();
friend class Wayland::Surface;
friend class Wayland::SurfacePrivate;
diff --git a/src/compositor/compositor_api/waylandsurfaceitem.cpp b/src/compositor/compositor_api/waylandsurfaceitem.cpp
index a080f836f..9418b4297 100644
--- a/src/compositor/compositor_api/waylandsurfaceitem.cpp
+++ b/src/compositor/compositor_api/waylandsurfaceitem.cpp
@@ -47,6 +47,8 @@
#include "wlextendedsurface.h"
#include <QtGui/QKeyEvent>
+#include <QtGui/QGuiApplication>
+#include <QtGui/QScreen>
#include <QtQuick/QSGSimpleTextureNode>
#include <QtQuick/QSGSimpleRectNode>
@@ -130,7 +132,11 @@ WaylandSurfaceItem::~WaylandSurfaceItem()
void WaylandSurfaceItem::setSurface(WaylandSurface *surface)
{
+ if (surface == m_surface)
+ return;
+
init(surface);
+ emit surfaceChanged();
}
bool WaylandSurfaceItem::isYInverted() const
diff --git a/src/compositor/compositor_api/waylandsurfaceitem.h b/src/compositor/compositor_api/waylandsurfaceitem.h
index 73697ae22..0114f127c 100644
--- a/src/compositor/compositor_api/waylandsurfaceitem.h
+++ b/src/compositor/compositor_api/waylandsurfaceitem.h
@@ -56,7 +56,7 @@ Q_DECLARE_METATYPE(WaylandSurface*)
class Q_COMPOSITOR_EXPORT WaylandSurfaceItem : public QQuickItem
{
Q_OBJECT
- Q_PROPERTY(WaylandSurface* surface READ surface WRITE setSurface)
+ Q_PROPERTY(WaylandSurface* surface READ surface WRITE setSurface NOTIFY surfaceChanged)
Q_PROPERTY(bool paintEnabled READ paintEnabled WRITE setPaintEnabled)
Q_PROPERTY(bool useTextureAlpha READ useTextureAlpha WRITE setUseTextureAlpha NOTIFY useTextureAlphaChanged)
Q_PROPERTY(bool clientRenderingEnabled READ clientRenderingEnabled WRITE setClientRenderingEnabled NOTIFY clientRenderingEnabledChanged)
@@ -114,6 +114,7 @@ signals:
void clientRenderingEnabledChanged();
void touchEventsEnabledChanged();
void yInvertedChanged();
+ void surfaceChanged();
protected:
QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *);
diff --git a/src/compositor/wayland_wrapper/wlcompositor.cpp b/src/compositor/wayland_wrapper/wlcompositor.cpp
index 545d14e3d..27378f19f 100644
--- a/src/compositor/wayland_wrapper/wlcompositor.cpp
+++ b/src/compositor/wayland_wrapper/wlcompositor.cpp
@@ -360,6 +360,11 @@ void Compositor::setOutputGeometry(const QRect &geometry)
m_output_global.setGeometry(geometry);
}
+QRect Compositor::outputGeometry() const
+{
+ return m_output_global.geometry();
+}
+
InputDevice* Compositor::defaultInputDevice()
{
return m_default_input_device;
diff --git a/src/compositor/wayland_wrapper/wlcompositor.h b/src/compositor/wayland_wrapper/wlcompositor.h
index 03cd1db55..b2d4ef6e7 100644
--- a/src/compositor/wayland_wrapper/wlcompositor.h
+++ b/src/compositor/wayland_wrapper/wlcompositor.h
@@ -117,6 +117,7 @@ public:
void setScreenOrientation(Qt::ScreenOrientation orientation);
Qt::ScreenOrientation screenOrientation() const;
void setOutputGeometry(const QRect &geometry);
+ QRect outputGeometry() const;
void enableTouchExtension();
TouchExtensionGlobal *touchExtension() { return m_touchExtension; }
diff --git a/src/compositor/wayland_wrapper/wlextendedsurface.cpp b/src/compositor/wayland_wrapper/wlextendedsurface.cpp
index c5bde2580..e4dd6bf45 100644
--- a/src/compositor/wayland_wrapper/wlextendedsurface.cpp
+++ b/src/compositor/wayland_wrapper/wlextendedsurface.cpp
@@ -154,7 +154,11 @@ void ExtendedSurface::set_window_orientation(struct wl_client *client,
{
Q_UNUSED(client);
ExtendedSurface *extended_surface = static_cast<ExtendedSurface *>(extended_surface_resource->data);
+
+ Qt::ScreenOrientation oldOrientation = extended_surface->m_windowOrientation;
extended_surface->m_windowOrientation = screenOrientationFromWaylandOrientation(orientation);
+ if (extended_surface->m_windowOrientation != oldOrientation)
+ emit extended_surface->m_surface->waylandSurface()->windowOrientationChanged();
}
void ExtendedSurface::set_content_orientation(struct wl_client *client,
@@ -163,7 +167,11 @@ void ExtendedSurface::set_content_orientation(struct wl_client *client,
{
Q_UNUSED(client);
ExtendedSurface *extended_surface = static_cast<ExtendedSurface *>(extended_surface_resource->data);
+
+ Qt::ScreenOrientation oldOrientation = extended_surface->m_contentOrientation;
extended_surface->m_contentOrientation = screenOrientationFromWaylandOrientation(orientation);
+ if (extended_surface->m_windowOrientation != oldOrientation)
+ emit extended_surface->m_surface->waylandSurface()->contentOrientationChanged();
}
void ExtendedSurface::setWindowFlags(WaylandSurface::WindowFlags flags)
diff --git a/src/compositor/wayland_wrapper/wloutput.h b/src/compositor/wayland_wrapper/wloutput.h
index f678547a2..b637d2d3f 100644
--- a/src/compositor/wayland_wrapper/wloutput.h
+++ b/src/compositor/wayland_wrapper/wloutput.h
@@ -57,6 +57,7 @@ public:
OutputGlobal();
void setGeometry(const QRect &geometry);
+ QRect geometry() const { return m_geometry; }
int x() const { return m_geometry.x(); }
int y() const { return m_geometry.y(); }