Skip to content
Snippets Groups Projects
Commit de7e097b authored by Samuel Rødal's avatar Samuel Rødal Committed by Jørgen Lind
Browse files

Added reporting of window and content orientation to surface extension.


Change-Id: I6e182c048282f5edd30f49be19dcc0f020679b85
Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: default avatarLaszlo Agocs <laszlo.p.agocs@nokia.com>
Reviewed-by: default avatarJørgen Lind <jorgen.lind@nokia.com>
parent af901000
No related branches found
No related tags found
No related merge requests found
Showing with 147 additions and 1 deletion
......@@ -59,5 +59,21 @@
<arg name="name" type="string"/>
<arg name="value" type="array"/>
</request>
<enum name="orientation">
<entry name="PrimaryOrientation" value="0"/>
<entry name="PortraitOrientation" value="1"/>
<entry name="LandscapeOrientation" value="2"/>
<entry name="InvertedPortraitOrientation" value="4"/>
<entry name="InvertedLandscapeOrientation" value="8"/>
</enum>
<request name="set_window_orientation">
<arg name="orientation" type="int"/>
</request>
<request name="set_content_orientation">
<arg name="orientation" type="int"/>
</request>
</interface>
</protocol>
......@@ -141,6 +141,18 @@ void WaylandSurface::setSize(const QSize &size)
d->surface->setSize(size);
}
Qt::ScreenOrientation WaylandSurface::contentOrientation() const
{
Q_D(const WaylandSurface);
return d->surface->contentOrientation();
}
Qt::ScreenOrientation WaylandSurface::windowOrientation() const
{
Q_D(const WaylandSurface);
return d->surface->windowOrientation();
}
QImage WaylandSurface::image() const
{
Q_D(const WaylandSurface);
......
......@@ -94,6 +94,9 @@ public:
QSize size() const;
void setSize(const QSize &size);
Qt::ScreenOrientation contentOrientation() const;
Qt::ScreenOrientation windowOrientation() const;
QImage image() const;
#ifdef QT_COMPOSITOR_WAYLAND_GL
GLuint texture(QOpenGLContext *context) const;
......
......@@ -77,6 +77,8 @@ void SurfaceExtensionGlobal::get_extended_surface(struct wl_client *client,
ExtendedSurface::ExtendedSurface(struct wl_client *client, uint32_t id, Surface *surface)
: m_surface(surface)
, m_windowOrientation(Qt::PrimaryOrientation)
, m_contentOrientation(Qt::PrimaryOrientation)
{
Q_ASSERT(surface->extendedSurface() == 0);
surface->setExtendedSurface(this);
......@@ -124,8 +126,49 @@ void ExtendedSurface::update_generic_property(wl_client *client, wl_resource *ex
}
static Qt::ScreenOrientation screenOrientationFromWaylandOrientation(int32_t orientation)
{
switch (orientation) {
case WL_EXTENDED_SURFACE_ORIENTATION_PORTRAITORIENTATION: return Qt::PortraitOrientation;
case WL_EXTENDED_SURFACE_ORIENTATION_INVERTEDPORTRAITORIENTATION: return Qt::InvertedPortraitOrientation;
case WL_EXTENDED_SURFACE_ORIENTATION_LANDSCAPEORIENTATION: return Qt::LandscapeOrientation;
case WL_EXTENDED_SURFACE_ORIENTATION_INVERTEDLANDSCAPEORIENTATION: return Qt::InvertedLandscapeOrientation;
default: return Qt::PrimaryOrientation;
}
}
Qt::ScreenOrientation ExtendedSurface::windowOrientation() const
{
return m_windowOrientation;
}
Qt::ScreenOrientation ExtendedSurface::contentOrientation() const
{
return m_contentOrientation;
}
void ExtendedSurface::set_window_orientation(struct wl_client *client,
struct wl_resource *extended_surface_resource,
int32_t orientation)
{
Q_UNUSED(client);
ExtendedSurface *extended_surface = static_cast<ExtendedSurface *>(extended_surface_resource->data);
extended_surface->m_windowOrientation = screenOrientationFromWaylandOrientation(orientation);
}
void ExtendedSurface::set_content_orientation(struct wl_client *client,
struct wl_resource *extended_surface_resource,
int32_t orientation)
{
Q_UNUSED(client);
ExtendedSurface *extended_surface = static_cast<ExtendedSurface *>(extended_surface_resource->data);
extended_surface->m_contentOrientation = screenOrientationFromWaylandOrientation(orientation);
}
const struct wl_extended_surface_interface ExtendedSurface::extended_surface_interface = {
ExtendedSurface::update_generic_property
ExtendedSurface::update_generic_property,
ExtendedSurface::set_window_orientation,
ExtendedSurface::set_content_orientation
};
}
......@@ -87,15 +87,29 @@ public:
void setParent(ExtendedSurface *parent);
QLinkedList<WaylandSurface *> subSurfaces() const;
Qt::ScreenOrientation windowOrientation() const;
Qt::ScreenOrientation contentOrientation() const;
private:
struct wl_resource *m_extended_surface_resource;
Surface *m_surface;
Qt::ScreenOrientation m_windowOrientation;
Qt::ScreenOrientation m_contentOrientation;
static void update_generic_property(struct wl_client *client,
struct wl_resource *resource,
const char *name,
struct wl_array *value);
static void set_window_orientation(struct wl_client *client,
struct wl_resource *resource,
int32_t orientation);
static void set_content_orientation(struct wl_client *client,
struct wl_resource *resource,
int32_t orientation);
static const struct wl_extended_surface_interface extended_surface_interface;
};
......
......@@ -612,6 +612,18 @@ void Surface::setWindowProperty(const QString &name, const QVariant &value, bool
}
}
Qt::ScreenOrientation Surface::windowOrientation() const
{
Q_D(const Surface);
return d->extendedSurface ? d->extendedSurface->windowOrientation() : Qt::PrimaryOrientation;
}
Qt::ScreenOrientation Surface::contentOrientation() const
{
Q_D(const Surface);
return d->extendedSurface ? d->extendedSurface->contentOrientation() : Qt::PrimaryOrientation;
}
QPoint Surface::lastMousePos() const
{
Q_D(const Surface);
......
......@@ -114,6 +114,9 @@ public:
QVariant windowProperty(const QString &propertyName) const;
void setWindowProperty(const QString &name, const QVariant &value, bool writeUpdateToClient = true);
Qt::ScreenOrientation contentOrientation() const;
Qt::ScreenOrientation windowOrientation() const;
QPoint lastMousePos() const;
void setExtendedSurface(ExtendedSurface *extendedSurface);
......
......@@ -97,6 +97,27 @@ void QWaylandExtendedSurface::updateGenericProperty(const QString &name, const Q
nativeInterface->emitWindowPropertyChanged(m_window,name);
}
static int32_t waylandRotationFromScreenOrientation(Qt::ScreenOrientation orientation)
{
switch (orientation) {
case Qt::PortraitOrientation: return WL_EXTENDED_SURFACE_ORIENTATION_PORTRAITORIENTATION;
case Qt::InvertedPortraitOrientation: return WL_EXTENDED_SURFACE_ORIENTATION_INVERTEDPORTRAITORIENTATION;
case Qt::LandscapeOrientation: return WL_EXTENDED_SURFACE_ORIENTATION_LANDSCAPEORIENTATION;
case Qt::InvertedLandscapeOrientation: return WL_EXTENDED_SURFACE_ORIENTATION_INVERTEDLANDSCAPEORIENTATION;
default: return WL_EXTENDED_SURFACE_ORIENTATION_PRIMARYORIENTATION;
}
}
void QWaylandExtendedSurface::setWindowOrientation(Qt::ScreenOrientation orientation)
{
wl_extended_surface_set_window_orientation(m_extended_surface, waylandRotationFromScreenOrientation(orientation));
}
void QWaylandExtendedSurface::setContentOrientation(Qt::ScreenOrientation orientation)
{
wl_extended_surface_set_content_orientation(m_extended_surface, waylandRotationFromScreenOrientation(orientation));
}
QVariantMap QWaylandExtendedSurface::properties() const
{
return m_properties;
......
......@@ -66,6 +66,9 @@ class QWaylandExtendedSurface
public:
QWaylandExtendedSurface(QWaylandWindow *window, struct wl_extended_surface *extended_surface);
void setWindowOrientation(Qt::ScreenOrientation orientation);
void setContentOrientation(Qt::ScreenOrientation orientation);
void updateGenericProperty(const QString &name, const QVariant &value);
QVariantMap properties() const;
QVariant property(const QString &name);
......
......@@ -205,3 +205,19 @@ QWaylandSubSurface *QWaylandWindow::subSurfaceWindow() const
{
return mSubSurfaceWindow;
}
void QWaylandWindow::handleContentOrientationChange(Qt::ScreenOrientation orientation)
{
if (mExtendedWindow)
mExtendedWindow->setContentOrientation(orientation);
}
Qt::ScreenOrientation QWaylandWindow::requestWindowOrientation(Qt::ScreenOrientation orientation)
{
if (mExtendedWindow) {
mExtendedWindow->setWindowOrientation(orientation);
return orientation;
}
return Qt::PrimaryOrientation;
}
......@@ -85,6 +85,9 @@ public:
QWaylandExtendedSurface *extendedWindow() const;
QWaylandSubSurface *subSurfaceWindow() const;
void handleContentOrientationChange(Qt::ScreenOrientation orientation);
Qt::ScreenOrientation requestWindowOrientation(Qt::ScreenOrientation orientation);
protected:
QWaylandDisplay *mDisplay;
struct wl_surface *mSurface;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment