Skip to content
Snippets Groups Projects
Commit 3096811a authored by Ming Rui Zhang's avatar Ming Rui Zhang
Browse files

selectareadialog: set a minimum rect for the select area to display

- Also, the dialog now take rect reference so that, lrc api is
  called in videoview

Change-Id: I5fe63a67cbb68b144e113b96bc3d8b580ff60c60
parent 2da169af
Branches
No related tags found
No related merge requests found
...@@ -31,8 +31,13 @@ ...@@ -31,8 +31,13 @@
#include "lrcinstance.h" #include "lrcinstance.h"
#include "utils.h" #include "utils.h"
SelectAreaDialog::SelectAreaDialog() : SelectAreaDialog::SelectAreaDialog(int& screenNumberRef,
rubberBand_(nullptr) QRect& rectArea,
QWidget* parent) :
rubberBand_(nullptr),
screenNumber_(screenNumberRef),
rectArea_(rectArea),
QDialog(parent)
{ {
setWindowFlags(Qt::Widget | Qt::FramelessWindowHint); setWindowFlags(Qt::Widget | Qt::FramelessWindowHint);
setWindowState(Qt::WindowFullScreen); setWindowState(Qt::WindowFullScreen);
...@@ -41,12 +46,14 @@ SelectAreaDialog::SelectAreaDialog() : ...@@ -41,12 +46,14 @@ SelectAreaDialog::SelectAreaDialog() :
setAttribute(Qt::WA_NoSystemBackground, false); setAttribute(Qt::WA_NoSystemBackground, false);
setAttribute(Qt::WA_TranslucentBackground, true); setAttribute(Qt::WA_TranslucentBackground, true);
setAttribute(Qt::WA_PaintOnScreen); setAttribute(Qt::WA_PaintOnScreen);
setWindowModality(Qt::ApplicationModal);
grabMouse(); grabMouse();
rubberBand_ = new QRubberBand(QRubberBand::Rectangle, this); rubberBand_ = new QRubberBand(QRubberBand::Rectangle, this);
QApplication::setOverrideCursor(Qt::CrossCursor); QApplication::setOverrideCursor(Qt::CrossCursor);
auto screenNumber = qApp->desktop()->screenNumber(this);
if (auto screen = qApp->screens().at(screenNumber)) { screenNumber_ = qApp->desktop()->screenNumber(parent);
originalPixmap_ = screen->grabWindow(screenNumber); if (auto screen = qApp->screens().at(screenNumber_)) {
originalPixmap_ = screen->grabWindow(0);
originalPixmap_.setDevicePixelRatio(screen->devicePixelRatio()); originalPixmap_.setDevicePixelRatio(screen->devicePixelRatio());
} }
} }
...@@ -81,8 +88,7 @@ SelectAreaDialog::mouseReleaseEvent(QMouseEvent* event) ...@@ -81,8 +88,7 @@ SelectAreaDialog::mouseReleaseEvent(QMouseEvent* event)
return; return;
} }
auto screenNumber = qApp->desktop()->screenNumber(this); QScreen* screen = qApp->screens().at(screenNumber_);
QScreen* screen = qApp->screens().at(screenNumber);
if (!screen) { if (!screen) {
screen = qApp->primaryScreen(); screen = qApp->primaryScreen();
} }
...@@ -106,11 +112,14 @@ SelectAreaDialog::mouseReleaseEvent(QMouseEvent* event) ...@@ -106,11 +112,14 @@ SelectAreaDialog::mouseReleaseEvent(QMouseEvent* event)
rect.setHeight(static_cast<int>(height)); rect.setHeight(static_cast<int>(height));
} }
# endif # endif
LRCInstance::avModel().setDisplay(screenNumber,
rect.x(), rect.y(), rect.width(), rect.height() // Minimun size
); rect.setHeight(rect.height() < 128 ? 128 : rect.height());
rect.setWidth(rect.width() < 128 ? 128 : rect.width());
rectArea_ = rect;
rubberBand_->deleteLater(); rubberBand_->deleteLater();
reject(); done(0);
} }
void void
......
...@@ -28,7 +28,9 @@ class SelectAreaDialog : public QDialog ...@@ -28,7 +28,9 @@ class SelectAreaDialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
SelectAreaDialog(); explicit SelectAreaDialog(int& screenNumberRef,
QRect& rectArea,
QWidget* parent = nullptr);
protected: protected:
void mousePressEvent(QMouseEvent* event); void mousePressEvent(QMouseEvent* event);
void mouseMoveEvent(QMouseEvent* event); void mouseMoveEvent(QMouseEvent* event);
...@@ -39,5 +41,8 @@ private: ...@@ -39,5 +41,8 @@ private:
QDialog transDialog_; QDialog transDialog_;
QRubberBand* rubberBand_; QRubberBand* rubberBand_;
QPixmap originalPixmap_; QPixmap originalPixmap_;
int& screenNumber_;
QRect& rectArea_;
}; };
...@@ -268,8 +268,15 @@ VideoView::showContextMenu(const QPoint& position) ...@@ -268,8 +268,15 @@ VideoView::showContextMenu(const QPoint& position)
connect(shareAreaAction, &QAction::triggered, connect(shareAreaAction, &QAction::triggered,
[this]() { [this]() {
resetPreview(); resetPreview();
SelectAreaDialog selectAreaDialog; QRect area;
selectAreaDialog.exec(); int screenNumber = 0;
SelectAreaDialog selectAreaDialog(screenNumber, area, this);
int code = selectAreaDialog.exec();
if (code == 0) {
LRCInstance::avModel().setDisplay(screenNumber,
area.x(), area.y(), area.width(), area.height()
);
}
sharingEntireScreen_ = false; sharingEntireScreen_ = false;
}); });
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment