diff options
author | Alan Griffiths <alan@octopull.co.uk> | 2015-03-11 14:53:34 +0000 |
---|---|---|
committer | Alan Griffiths <alan@octopull.co.uk> | 2015-03-11 14:53:34 +0000 |
commit | 1c93d2307744b7db5b03b47d4d32a0eddd22ee61 (patch) | |
tree | 3c12a601d524665fc0cb6070abb996c47b10f350 /src | |
parent | 2c5f25a0cb1cf43236e8cc77910473cd4c5a3b00 (diff) | |
parent | 80c3c0d37c18f83a70a2df5afd50b8419cda0ecb (diff) |
merge lp:~kdub/qtmir/display-groups
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/Unity/Application/application_manager.cpp | 3 | ||||
-rw-r--r-- | src/platforms/mirserver/displaywindow.cpp | 8 | ||||
-rw-r--r-- | src/platforms/mirserver/displaywindow.h | 4 | ||||
-rw-r--r-- | src/platforms/mirserver/mirserverintegration.cpp | 16 |
4 files changed, 21 insertions, 10 deletions
diff --git a/src/modules/Unity/Application/application_manager.cpp b/src/modules/Unity/Application/application_manager.cpp index 7d9bec0..1ae8748 100644 --- a/src/modules/Unity/Application/application_manager.cpp +++ b/src/modules/Unity/Application/application_manager.cpp @@ -67,9 +67,10 @@ bool forceAllAppsIntoMainStage(const QSharedPointer<MirServer> &mirServer) const int tabletModeMinimimWithGU = 100; // Obtain display size + //TODO: should use mir::graphics::Display::configuration mir::geometry::Rectangles view_area; mirServer->the_display()->for_each_display_sync_group( - [&](mir::graphics::DisplaySyncGroup& group) { + [&view_area](mir::graphics::DisplaySyncGroup& group) { group.for_each_display_buffer( [&view_area](const mir::graphics::DisplayBuffer & db) { view_area.add(db.view_area()); diff --git a/src/platforms/mirserver/displaywindow.cpp b/src/platforms/mirserver/displaywindow.cpp index 07300ce..43cd5ab 100644 --- a/src/platforms/mirserver/displaywindow.cpp +++ b/src/platforms/mirserver/displaywindow.cpp @@ -36,10 +36,14 @@ static WId newWId() return ++id; } -DisplayWindow::DisplayWindow(QWindow *window, mir::graphics::DisplayBuffer *displayBuffer) +DisplayWindow::DisplayWindow( + QWindow *window, + mir::graphics::DisplaySyncGroup *displayGroup, + mir::graphics::DisplayBuffer *displayBuffer) : QObject(nullptr), QPlatformWindow(window) , m_isExposed(true) , m_winId(newWId()) + , m_displayGroup(displayGroup) , m_displayBuffer(displayBuffer) { qDebug() << "DisplayWindow::DisplayWindow"; @@ -101,7 +105,7 @@ bool DisplayWindow::event(QEvent *event) void DisplayWindow::swapBuffers() { m_displayBuffer->gl_swap_buffers(); -// m_displayBuffer->flip(); TODO check with kdub what's needed + m_displayGroup->post(); } void DisplayWindow::makeCurrent() diff --git a/src/platforms/mirserver/displaywindow.h b/src/platforms/mirserver/displaywindow.h index 8714702..086877c 100644 --- a/src/platforms/mirserver/displaywindow.h +++ b/src/platforms/mirserver/displaywindow.h @@ -21,6 +21,7 @@ #include <qpa/qplatformwindow.h> +#include <mir/graphics/display.h> #include <mir/graphics/display_buffer.h> #include <QObject> @@ -32,7 +33,7 @@ class DisplayWindow : public QObject, public QPlatformWindow { Q_OBJECT public: - explicit DisplayWindow(QWindow *window, mir::graphics::DisplayBuffer*); + explicit DisplayWindow(QWindow *window, mir::graphics::DisplaySyncGroup*, mir::graphics::DisplayBuffer*); QRect geometry() const override; void setGeometry(const QRect &rect) override; @@ -50,6 +51,7 @@ public: private: bool m_isExposed; WId m_winId; + mir::graphics::DisplaySyncGroup *m_displayGroup; mir::graphics::DisplayBuffer *m_displayBuffer; }; diff --git a/src/platforms/mirserver/mirserverintegration.cpp b/src/platforms/mirserver/mirserverintegration.cpp index 476ce94..56c03e7 100644 --- a/src/platforms/mirserver/mirserverintegration.cpp +++ b/src/platforms/mirserver/mirserverintegration.cpp @@ -135,15 +135,19 @@ QPlatformWindow *MirServerIntegration::createPlatformWindow(QWindow *window) con DisplayWindow* displayWindow = nullptr; - m_mirServer->the_display()->for_each_display_sync_group( - [&](mg::DisplaySyncGroup& group) { - group.for_each_display_buffer( - [&](mg::DisplayBuffer& buffer) { - // FIXME(gerry) this will go very bad for >1 display buffer - displayWindow = new DisplayWindow(window, &buffer); + mg::DisplayBuffer* first_buffer{nullptr}; + mg::DisplaySyncGroup* first_group{nullptr}; + m_mirServer->the_display()->for_each_display_sync_group([&](mg::DisplaySyncGroup& group) { + if (!first_group) first_group = &group; + group.for_each_display_buffer([&](mg::DisplayBuffer& buffer) { + if (!first_buffer) first_buffer = &buffer; }); }); + // FIXME(gerry) this will go very bad for >1 display buffer + if (first_group && first_buffer) + displayWindow = new DisplayWindow(window, first_group, first_buffer); + if (!displayWindow) return nullptr; |