summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordknn <yoann.blein@free.fr>2012-08-06 14:40:13 (GMT)
committerdknn <yoann.blein@free.fr>2012-09-22 09:32:38 (GMT)
commitd62f8088b8cc42417f97a3b5c3f99bf9288593d4 (patch)
tree46861355d40bfe5e18088496abc9654e0dbaa00c /Swift/QtUI/ScreenSharing
parent343f88e3048887e83cc91bb710510b3aa618f779 (diff)
downloadswift-contrib-d62f8088b8cc42417f97a3b5c3f99bf9288593d4.zip
swift-contrib-d62f8088b8cc42417f97a3b5c3f99bf9288593d4.tar.bz2
Add support for multiple sharing and control in chat view
Diffstat (limited to 'Swift/QtUI/ScreenSharing')
-rw-r--r--Swift/QtUI/ScreenSharing/QtRemoteScreenWindow.cpp13
-rw-r--r--Swift/QtUI/ScreenSharing/QtRemoteScreenWindow.h2
-rw-r--r--Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp20
-rw-r--r--Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.h8
4 files changed, 29 insertions, 14 deletions
diff --git a/Swift/QtUI/ScreenSharing/QtRemoteScreenWindow.cpp b/Swift/QtUI/ScreenSharing/QtRemoteScreenWindow.cpp
index e6cd291..a1f1a88 100644
--- a/Swift/QtUI/ScreenSharing/QtRemoteScreenWindow.cpp
+++ b/Swift/QtUI/ScreenSharing/QtRemoteScreenWindow.cpp
@@ -7,17 +7,24 @@
#include "QtRemoteScreenWindow.h"
#include "RemoteScreenViewerWidget.h"
#include <QToolBar>
+#include <QVBoxLayout>
#include <Swiften/ScreenSharing/IncomingScreenSharing.h>
namespace Swift {
QtRemoteScreenWindow::QtRemoteScreenWindow(boost::shared_ptr<IncomingScreenSharing> incScreenSharing, QWidget *parent)
- : QMainWindow(parent), RemoteScreenWindow(incScreenSharing)
+ : QMainWindow(parent), RemoteScreenWindow(incScreenSharing), viewer(new RemoteScreenViewerWidget(iss))
{
- setCentralWidget(new RemoteScreenViewerWidget(iss));
+ QVBoxLayout* centralLayout = new QVBoxLayout;
+ centralLayout->addWidget(viewer);
+
+ QWidget* central = new QWidget(this);
+ central->setLayout(centralLayout);
+
+ setCentralWidget(central);
controlToolBar = addToolBar(tr("Control"));
closeAction = controlToolBar->addAction(QIcon::fromTheme("window-close"), tr("&Terminate session"), this, SLOT(handleCloseTriggered()));
}
@@ -27,8 +34,8 @@ QtRemoteScreenWindow::~QtRemoteScreenWindow()
}
void QtRemoteScreenWindow::handleCloseTriggered()
{
- iss->stop();
+ onStopRequest();
}
}
diff --git a/Swift/QtUI/ScreenSharing/QtRemoteScreenWindow.h b/Swift/QtUI/ScreenSharing/QtRemoteScreenWindow.h
index 00ac803..d6c783a 100644
--- a/Swift/QtUI/ScreenSharing/QtRemoteScreenWindow.h
+++ b/Swift/QtUI/ScreenSharing/QtRemoteScreenWindow.h
@@ -12,8 +12,9 @@
class QToolBar;
namespace Swift {
+ class RemoteScreenViewerWidget;
class QtRemoteScreenWindow : public QMainWindow, public RemoteScreenWindow {
Q_OBJECT
@@ -24,8 +25,9 @@ namespace Swift {
private slots:
void handleCloseTriggered();
private:
+ RemoteScreenViewerWidget* viewer;
QAction* closeAction;
QToolBar* controlToolBar;
};
}
diff --git a/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp b/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp
index f601f1b..7bb3f26 100644
--- a/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp
+++ b/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.cpp
@@ -17,9 +17,9 @@
namespace Swift {
RemoteScreenViewerWidget::RemoteScreenViewerWidget(boost::shared_ptr<IncomingScreenSharing> incScreenSharing, QWidget *parent) :
- QWidget(parent), iss(incScreenSharing)
+ QFrame(parent), iss(incScreenSharing)
{
iss->onNewImageReceived.connect(boost::bind(&RemoteScreenViewerWidget::handleNewImageReceived, this, _1));
}
@@ -27,28 +27,34 @@ RemoteScreenViewerWidget::~RemoteScreenViewerWidget()
{
iss->onNewImageReceived.disconnect(boost::bind(&RemoteScreenViewerWidget::handleNewImageReceived, this, _1));
}
-void RemoteScreenViewerWidget::paintEvent(QPaintEvent *)
+void RemoteScreenViewerWidget::paintEvent(QPaintEvent* event)
{
- QPainter painter(this);
+ QFrame::paintEvent(event);
if (!pixmap.isNull()) {
+ QPainter painter(this);
painter.translate(geometry().center());
painter.drawPixmap(-pixmap.rect().center(), pixmap);
}
}
void RemoteScreenViewerWidget::resizeEvent(QResizeEvent *event)
{
- if (!pixmap.isNull())
- pixmap = pixmap.scaled(event->size(), Qt::KeepAspectRatio);
- QWidget::resizeEvent(event);
+ if (!pixmap.isNull()) {
+ int frameWidth2 = frameWidth() * 2;
+ QSize borders(frameWidth2, frameWidth2);
+ pixmap = pixmap.scaled(event->size() - borders, Qt::KeepAspectRatio);
+ }
+ QFrame::resizeEvent(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);
+ int frameWidth2 = frameWidth() * 2;
+ QSize borders(frameWidth2, frameWidth2);
+ pixmap = QPixmap::fromImage(qImg).scaled(size() - borders, Qt::KeepAspectRatio);
update();
}
}
diff --git a/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.h b/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.h
index 622bd26..c074e9f 100644
--- a/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.h
+++ b/Swift/QtUI/ScreenSharing/RemoteScreenViewerWidget.h
@@ -5,25 +5,25 @@
*/
#pragma once
-#include <QWidget>
+#include <QFrame>
#include <boost/shared_ptr.hpp>
namespace Swift {
class IncomingScreenSharing;
class Image;
- class RemoteScreenViewerWidget : public QWidget {
+ class RemoteScreenViewerWidget : public QFrame {
Q_OBJECT
public:
RemoteScreenViewerWidget(boost::shared_ptr<IncomingScreenSharing> incScreenSharing, QWidget *parent = 0);
~RemoteScreenViewerWidget();
protected:
- void paintEvent(QPaintEvent *);
- void resizeEvent(QResizeEvent *event);
+ void paintEvent(QPaintEvent* event);
+ void resizeEvent(QResizeEvent* event);
private:
void handleNewImageReceived(const Image& image);