diff options
Diffstat (limited to 'Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp')
-rw-r--r-- | Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp | 86 |
1 files changed, 82 insertions, 4 deletions
diff --git a/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp b/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp index 899f335..91a515f 100644 --- a/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp +++ b/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp @@ -20,6 +20,8 @@ namespace Swift { RemoteScreenViewerWidget::RemoteScreenViewerWidget(boost::shared_ptr<IncomingScreenSharing> incScreenSharing, QWidget *parent) : QWidget(parent), iss(incScreenSharing) { + setMouseTracking(true); + setFocusPolicy(Qt::StrongFocus); iss->onNewImageReceived.connect(boost::bind(&RemoteScreenViewerWidget::handleNewImageReceived, this, _1)); } @@ -28,7 +30,7 @@ RemoteScreenViewerWidget::~RemoteScreenViewerWidget() iss->onNewImageReceived.disconnect(boost::bind(&RemoteScreenViewerWidget::handleNewImageReceived, this, _1)); } -void RemoteScreenViewerWidget::paintEvent(QPaintEvent* event) +void RemoteScreenViewerWidget::paintEvent(QPaintEvent*) { if (!pixmap.isNull()) { QPainter painter(this); @@ -37,18 +39,94 @@ void RemoteScreenViewerWidget::paintEvent(QPaintEvent* event) } } -void RemoteScreenViewerWidget::resizeEvent(QResizeEvent *event) +void RemoteScreenViewerWidget::resizeEvent(QResizeEvent* event) { if (!pixmap.isNull()) { - pixmap = pixmap.scaled(event->size(), Qt::KeepAspectRatio); + pixmap = pixmap.scaled(event->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); } QWidget::resizeEvent(event); } +void RemoteScreenViewerWidget::keyPressEvent(QKeyEvent* event) +{ + InputEventPayload::Event ev(InputEventPayload::Event::KeyPress, event->key()); + iss->sendInputEvent(ev); + QWidget::keyPressEvent(event); +} + +void RemoteScreenViewerWidget::keyReleaseEvent(QKeyEvent* event) +{ + InputEventPayload::Event ev(InputEventPayload::Event::KeyRelease, event->key()); + iss->sendInputEvent(ev); + QWidget::keyReleaseEvent(event); +} + +void RemoteScreenViewerWidget::mouseMoveEvent(QMouseEvent* event) +{ + float x = static_cast<float>(event->x()) / pixmap.width(); + float y = static_cast<float>(event->y()) / pixmap.height(); + InputEventPayload::Event ev(InputEventPayload::Event::MouseMove, x, y); + iss->sendInputEvent(ev); + QWidget::mouseMoveEvent(event); +} + +void RemoteScreenViewerWidget::mousePressEvent(QMouseEvent* event) +{ + int btnId = 0; + switch (event->button()) { + case Qt::LeftButton: + btnId = 3; + break; + case Qt::MidButton: + btnId = 2; + break; + case Qt::RightButton: + btnId = 1; + break; + default: + break; + } + if (btnId) { + InputEventPayload::Event ev(InputEventPayload::Event::MousePress, btnId); + iss->sendInputEvent(ev); + } + QWidget::mousePressEvent(event); +} + +void RemoteScreenViewerWidget::mouseReleaseEvent(QMouseEvent* event) +{ + int btnId = 0; + switch (event->button()) { + case Qt::LeftButton: + btnId = 3; + break; + case Qt::MidButton: + btnId = 2; + break; + case Qt::RightButton: + btnId = 1; + break; + default: + break; + } + if (btnId) { + InputEventPayload::Event ev(InputEventPayload::Event::MouseRelease, btnId); + iss->sendInputEvent(ev); + } + QWidget::mouseReleaseEvent(event); +} + +void RemoteScreenViewerWidget::wheelEvent(QWheelEvent* event) +{ + InputEventPayload::Event ev(InputEventPayload::Event::MouseWheel, event->delta()); + iss->sendInputEvent(ev); + QWidget::wheelEvent(event); +} + void RemoteScreenViewerWidget::handleNewImageReceived(const Image& image) { QImage qImg(image.data.data(), image.width, image.height, QImage::Format_RGB888); - pixmap = QPixmap::fromImage(qImg).scaled(size(), Qt::KeepAspectRatio); + pixmap = QPixmap::fromImage(qImg).scaled(size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); update(); } |