summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp')
-rw-r--r--Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp86
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();
}