summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLasse Holmstedt <lasse.holmstedt@nokia.com>2011-09-06 16:49:03 +0200
committerLasse Holmstedt <lasse.holmstedt@nokia.com>2011-09-07 14:18:29 +0200
commite47eb9057bf08834885ba6ef5e593d6f1844405c (patch)
tree81daa330393523e1eefe71de07649ba5e2ec1411
parentefc2ae9caf3a722a676ba6d93b5356ebcd682be8 (diff)
Allow changing of the output geometry
If you are building a compositor that does not provide the same composition area as the desktop resolution, you can now change the geometry to match the area that your compositor is going to render. You must set the geometry to desired value before clients connect. Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
-rw-r--r--src/qt-compositor/compositor_api/waylandcompositor.cpp5
-rw-r--r--src/qt-compositor/compositor_api/waylandcompositor.h1
-rw-r--r--src/qt-compositor/wayland_wrapper/wlcompositor.cpp5
-rw-r--r--src/qt-compositor/wayland_wrapper/wlcompositor.h1
-rw-r--r--src/qt-compositor/wayland_wrapper/wloutput.cpp10
-rw-r--r--src/qt-compositor/wayland_wrapper/wloutput.h10
6 files changed, 27 insertions, 5 deletions
diff --git a/src/qt-compositor/compositor_api/waylandcompositor.cpp b/src/qt-compositor/compositor_api/waylandcompositor.cpp
index 746ac57..ee3e949 100644
--- a/src/qt-compositor/compositor_api/waylandcompositor.cpp
+++ b/src/qt-compositor/compositor_api/waylandcompositor.cpp
@@ -146,3 +146,8 @@ void WaylandCompositor::setScreenOrientation(qint32 orientationInDegrees)
{
m_compositor->setScreenOrientation(orientationInDegrees);
}
+
+void WaylandCompositor::setOutputGeometry(const QRect &geometry)
+{
+ m_compositor->setOutputGeometry(geometry);
+}
diff --git a/src/qt-compositor/compositor_api/waylandcompositor.h b/src/qt-compositor/compositor_api/waylandcompositor.h
index 71ef657..1075265 100644
--- a/src/qt-compositor/compositor_api/waylandcompositor.h
+++ b/src/qt-compositor/compositor_api/waylandcompositor.h
@@ -85,6 +85,7 @@ public:
const char *socketName() const;
void setScreenOrientation(qint32 orientationInDegrees);
+ void setOutputGeometry(const QRect &outputGeometry);
private:
static void retainedSelectionChanged(QMimeData *mimeData, void *param);
diff --git a/src/qt-compositor/wayland_wrapper/wlcompositor.cpp b/src/qt-compositor/wayland_wrapper/wlcompositor.cpp
index f76701e..032e14d 100644
--- a/src/qt-compositor/wayland_wrapper/wlcompositor.cpp
+++ b/src/qt-compositor/wayland_wrapper/wlcompositor.cpp
@@ -456,6 +456,11 @@ void Compositor::setScreenOrientation(qint32 orientationInDegrees)
}
}
+void Compositor::setOutputGeometry(const QRect &geometry)
+{
+ m_output.setGeometry(geometry);
+}
+
} // namespace Wayland
wl_input_device * Wayland::Compositor::defaultInputDevice()
diff --git a/src/qt-compositor/wayland_wrapper/wlcompositor.h b/src/qt-compositor/wayland_wrapper/wlcompositor.h
index 39404bc..647bdf6 100644
--- a/src/qt-compositor/wayland_wrapper/wlcompositor.h
+++ b/src/qt-compositor/wayland_wrapper/wlcompositor.h
@@ -108,6 +108,7 @@ public:
QList<struct wl_client *> clients() const;
void setScreenOrientation(qint32 orientationInDegrees);
+ void setOutputGeometry(const QRect &geometry);
signals:
void clientAdded(wl_client *client);
diff --git a/src/qt-compositor/wayland_wrapper/wloutput.cpp b/src/qt-compositor/wayland_wrapper/wloutput.cpp
index 6e7ea2d..39bf7c9 100644
--- a/src/qt-compositor/wayland_wrapper/wloutput.cpp
+++ b/src/qt-compositor/wayland_wrapper/wloutput.cpp
@@ -50,7 +50,7 @@ void output_post_geometry(struct wl_client *client, struct wl_object *global, ui
Q_UNUSED(version);
Output *output = wayland_cast<Output *>(global);
- wl_client_post_event(client, global, WL_OUTPUT_GEOMETRY, 0, 0,
+ wl_client_post_event(client, global, WL_OUTPUT_GEOMETRY, output->x(), output->y(),
output->size().width(), output->size().height(),0,"","");
wl_client_post_event(client,global,WL_OUTPUT_MODE, 0,output->size().width(),output->size().height());
@@ -58,10 +58,16 @@ void output_post_geometry(struct wl_client *client, struct wl_object *global, ui
Output::Output()
- : m_size(QApplication::desktop()->screenGeometry().size())
+ : m_geometry(QPoint(0,0), QApplication::desktop()->screenGeometry().size())
, m_displayId(-1)
, m_numQueued(0)
{
+
}
+void Output::setGeometry(const QRect &geometry)
+{
+ m_geometry = geometry;
}
+
+} // namespace Wayland
diff --git a/src/qt-compositor/wayland_wrapper/wloutput.h b/src/qt-compositor/wayland_wrapper/wloutput.h
index cd899a5..cf64955 100644
--- a/src/qt-compositor/wayland_wrapper/wloutput.h
+++ b/src/qt-compositor/wayland_wrapper/wloutput.h
@@ -43,7 +43,7 @@
#include "waylandobject.h"
-#include <QtCore/QSize>
+#include <QtCore/QRect>
namespace Wayland {
@@ -52,10 +52,14 @@ class Output : public Object<struct wl_object>
public:
Output();
- QSize size() const { return m_size; }
+ void setGeometry(const QRect &geometry);
+
+ int x() const { return m_geometry.x(); }
+ int y() const { return m_geometry.y(); }
+ QSize size() const { return m_geometry.size(); }
private:
- QSize m_size;
+ QRect m_geometry;
int m_displayId;
int m_numQueued;
};