diff options
author | Kevin DuBois <kevin.dubois@canonical.com> | 2015-02-12 10:56:27 -0500 |
---|---|---|
committer | Kevin DuBois <kevin.dubois@canonical.com> | 2015-02-12 10:56:27 -0500 |
commit | 80c3c0d37c18f83a70a2df5afd50b8419cda0ecb (patch) | |
tree | 5747cbec768a6d2556496490351e457d8f37745a /src | |
parent | 5708bad137836ba767eeb591eb85f3d686cae370 (diff) |
adapt for changes to mg::DisplayBuffer
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/Unity/Application/application_manager.cpp | 7 | ||||
-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 | 15 |
4 files changed, 24 insertions, 10 deletions
diff --git a/src/modules/Unity/Application/application_manager.cpp b/src/modules/Unity/Application/application_manager.cpp index 0fb5ad9..c54c881 100644 --- a/src/modules/Unity/Application/application_manager.cpp +++ b/src/modules/Unity/Application/application_manager.cpp @@ -67,12 +67,13 @@ 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_buffer( - [&view_area](const mir::graphics::DisplayBuffer & db) - { + mirServer->the_display()->for_each_display_group([&view_area](mir::graphics::DisplayGroup& group) { + group.for_each_display_buffer([&view_area](const mir::graphics::DisplayBuffer & db) { view_area.add(db.view_area()); }); + }); // Get current Grid Unit value int gridUnitPx = 8; diff --git a/src/platforms/mirserver/displaywindow.cpp b/src/platforms/mirserver/displaywindow.cpp index e6f9e2d..cb06b87 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::DisplayGroup *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(); + m_displayGroup->post(); } void DisplayWindow::makeCurrent() diff --git a/src/platforms/mirserver/displaywindow.h b/src/platforms/mirserver/displaywindow.h index 8714702..d9d0475 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::DisplayGroup*, 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::DisplayGroup *m_displayGroup; mir::graphics::DisplayBuffer *m_displayBuffer; }; diff --git a/src/platforms/mirserver/mirserverintegration.cpp b/src/platforms/mirserver/mirserverintegration.cpp index 14e7033..260f73a 100644 --- a/src/platforms/mirserver/mirserverintegration.cpp +++ b/src/platforms/mirserver/mirserverintegration.cpp @@ -135,12 +135,19 @@ QPlatformWindow *MirServerIntegration::createPlatformWindow(QWindow *window) con DisplayWindow* displayWindow = nullptr; - m_mirServer->the_display()->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::DisplayGroup* first_group{nullptr}; + m_mirServer->the_display()->for_each_display_group([&](mg::DisplayGroup& 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; |