diff options
Diffstat (limited to 'qgraphicssystem_dd.cpp')
-rw-r--r-- | qgraphicssystem_dd.cpp | 75 |
1 files changed, 56 insertions, 19 deletions
diff --git a/qgraphicssystem_dd.cpp b/qgraphicssystem_dd.cpp index 28f8c18..8916ba9 100644 --- a/qgraphicssystem_dd.cpp +++ b/qgraphicssystem_dd.cpp @@ -63,7 +63,7 @@ QDevDaysWindowSurface::QDevDaysWindowSurface(QWidget *window, QDevDaysGraphicsSy { quint32 parentId = system->m_ids.value(window->parentWidget(), 0); - Request request(Request::CreateRequest, parentId); + Request request(Request::CreateWindowRequest, parentId); system->sendRequest(request); Response response; @@ -76,7 +76,7 @@ QDevDaysWindowSurface::QDevDaysWindowSurface(QWidget *window, QDevDaysGraphicsSy QDevDaysWindowSurface::~QDevDaysWindowSurface() { - Request request(Request::DestroyRequest, m_id); + Request request(Request::DestroyWindowRequest, m_id); m_system->sendRequest(request); m_system->m_surfaces.remove(m_id); m_system->m_ids.remove(window()); @@ -95,7 +95,7 @@ void QDevDaysWindowSurface::flush(QWidget *widget, const QRegion ®ion, const Q_UNUSED(offset); qDebug() << "WINDOW: flush"; // send an update request to the server - Request request(Request::UpdateRequest, m_id); // ### rect + Request request(Request::UpdateWindowRequest, m_id); // ### rect m_system->sendRequest(request); // we don't expect any response } @@ -104,21 +104,22 @@ void QDevDaysWindowSurface::setGeometry(const QRect &rect) { qDebug() << "WINDOW: setGeometry"; QWindowSurface::setGeometry(rect); + qDebug() << "WINDOW: geometry" << geometry(); // create or resize the shared memory qint32 byteCount = rect.width() * rect.height() * sizeof(quint32); // ### server should hold the pixel format qDebug() << "WINDOW: byte count" << byteCount; if (byteCount > m_shared.size()) { - if (m_shared.key().isEmpty()) - m_shared.setKey(QString::number(m_id)); - else - m_shared.detach(); + if (!m_shared.key().isEmpty()) + m_shared.setKey(QString()); // detach + m_shared.setKey(QString::number(m_id)); if (!m_shared.create(byteCount) && !m_shared.attach()) qWarning() << m_shared.errorString() << m_shared.key(); qDebug() << "WINDOW: data" << m_shared.data() << "key" << m_shared.key(); + Q_ASSERT(m_shared.data()); } - Request request(Request::SetGeometryRequest, m_id, rect); + Request request(Request::SetWindowGeometryRequest, m_id, 0, rect); m_system->sendRequest(request); } @@ -151,7 +152,7 @@ void QDevDaysWindowSurface::endPaint(const QRegion ®ion) else qDebug() << "WINDOW: failed to unlock shared memory"; } - +/* void QDevDaysWindowSurface::handleMouseEvent(const Event &event) { QEvent::Type type = QEvent::None; @@ -163,6 +164,9 @@ void QDevDaysWindowSurface::handleMouseEvent(const Event &event) case Event::MouseReleaseEvent: type = QEvent::MouseButtonPress; break; + case Event::MouseMoveEvent: + type = QEvent::MouseMove; + break; default: break; } @@ -170,11 +174,28 @@ void QDevDaysWindowSurface::handleMouseEvent(const Event &event) QApplicationPrivate::handleMouseEvent(window(), mouseEvent); } +void QDevDaysWindowSurface::handleKeyEvent(const Event &event) +{ + QEvent::Type type = QEvent::None; + quint32 key = 0; + + switch (event.type) { + case Event::KeyPressEvent: + type = QEvent::KeyPress; + break; + case Event::KeyReleaseEvent: + type = QEvent::KeyRelease; + break; + } + QKeyEvent keyEvent(type, key, Qt::NoModifier, QString(), true, 0); + QApplicationPrivate::handleKeyEvent(window(), keyEvent); +} + void QDevDaysWindowSurface::handleGeometryChanged(const Event &event) { QApplicationPrivate::handleGeometryChange(window(), event.rect.toRect()); } - +*/ // // graphics system // @@ -256,22 +277,38 @@ void QDevDaysGraphicsSystem::eventDispatcher() QDataStream in(&m_connection); in >> m_message; switch (m_message.message) { - case Event::EventMessage: - qDebug() << "SYSTEM: received event" << m_message.type; + case Event::EventMessage: { QDevDaysWindowSurface *surface = m_surfaces.value(m_message.id); + QWidget *window = surface ? surface->window() : 0; + qDebug() << "SYSTEM: received event" << m_message.type << window; switch (m_message.type) { + case Event::GeometryChangeEvent: { + QApplicationPrivate::handleGeometryChange(window, m_message.rect.toRect()); + break; } case Event::MousePressEvent: { - // ### we don't support multiple buttons or keyboard modifiers - QMouseEvent me(QEvent::MouseButtonPress, m_message.rect.topLeft().toPoint(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier); - QApplicationPrivate::handleMouseEvent(surface->window(), me); + // ### we don't support multiple buttons or any keyboard modifiers + QPoint pos = m_message.rect.topLeft().toPoint(); + QMouseEvent me(QEvent::MouseButtonPress, pos, pos + window->pos(), + Qt::LeftButton, Qt::NoButton, Qt::NoModifier); + QApplicationPrivate::handleMouseEvent(window, me); break; } case Event::MouseReleaseEvent: { - // ### we don't support multiple buttons or keyboard modifiers - QMouseEvent me(QEvent::MouseButtonRelease, m_message.rect.topLeft().toPoint(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier); - QApplicationPrivate::handleMouseEvent(surface->window(), me); + // ### we don't support multiple buttons or any keyboard modifiers + QPoint pos = m_message.rect.topLeft().toPoint(); + QMouseEvent me(QEvent::MouseButtonRelease, pos, pos + window->pos(), + Qt::LeftButton, Qt::NoButton, Qt::NoModifier); + QApplicationPrivate::handleMouseEvent(window, me); + break; } + case Event::KeyPressEvent: { + QKeyEvent ke(QEvent::KeyPress, m_message.value, Qt::NoModifier); + QApplicationPrivate::handleKeyEvent(window, &ke); + break; } + case Event::KeyReleaseEvent: { + QKeyEvent ke(QEvent::KeyRelease, m_message.value, Qt::NoModifier); + QApplicationPrivate::handleKeyEvent(window, &ke); break; } } - break; + break; } case Response::ResponseMessage: case Request::RequestMessage: default: |