Merge 506ce6b07c
into 3d77438878
This commit is contained in:
commit
d9f8294529
@ -42,6 +42,9 @@ $ brew update
|
|||||||
$ brew install qt5
|
$ brew install qt5
|
||||||
```
|
```
|
||||||
|
|
||||||
|
N.B. you will need to pass `-DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.8.0_2`
|
||||||
|
to cmake to point it at your qt5 install (tweaking the path as needed)
|
||||||
|
|
||||||
### Building
|
### Building
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -28,6 +28,8 @@ class ImageOverlayDialog : public QDialog
|
|||||||
public:
|
public:
|
||||||
ImageOverlayDialog(QPixmap image, QWidget *parent = nullptr);
|
ImageOverlayDialog(QPixmap image, QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
void reject() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QMouseEvent *event) override;
|
void mousePressEvent(QMouseEvent *event) override;
|
||||||
void paintEvent(QPaintEvent *event) override;
|
void paintEvent(QPaintEvent *event) override;
|
||||||
@ -41,6 +43,7 @@ private slots:
|
|||||||
private:
|
private:
|
||||||
void scaleImage(int width, int height);
|
void scaleImage(int width, int height);
|
||||||
|
|
||||||
|
QPixmap originalImage_;
|
||||||
QPixmap image_;
|
QPixmap image_;
|
||||||
|
|
||||||
QRect content_;
|
QRect content_;
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
ImageOverlayDialog::ImageOverlayDialog(QPixmap image, QWidget *parent)
|
ImageOverlayDialog::ImageOverlayDialog(QPixmap image, QWidget *parent)
|
||||||
: QDialog{parent}
|
: QDialog{parent}
|
||||||
, image_{image}
|
, originalImage_{image}
|
||||||
{
|
{
|
||||||
setMouseTracking(true);
|
setMouseTracking(true);
|
||||||
setModal(false);
|
setModal(false);
|
||||||
@ -36,11 +36,19 @@ ImageOverlayDialog::ImageOverlayDialog(QPixmap image, QWidget *parent)
|
|||||||
|
|
||||||
setWindowState(Qt::WindowFullScreen);
|
setWindowState(Qt::WindowFullScreen);
|
||||||
|
|
||||||
raise();
|
|
||||||
|
|
||||||
connect(this, SIGNAL(closing()), this, SLOT(closeDialog()));
|
connect(this, SIGNAL(closing()), this, SLOT(closeDialog()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImageOverlayDialog::reject()
|
||||||
|
{
|
||||||
|
// needed on macOS to recover the main menu after the dialog is closed(!)
|
||||||
|
// also affects KDE/Plasma. XXX: There may be a better way of resetting the
|
||||||
|
// window state than this...
|
||||||
|
setWindowState(Qt::WindowNoState);
|
||||||
|
|
||||||
|
QDialog::reject();
|
||||||
|
}
|
||||||
|
|
||||||
void ImageOverlayDialog::closeDialog()
|
void ImageOverlayDialog::closeDialog()
|
||||||
{
|
{
|
||||||
QTimer::singleShot(100, this, &ImageOverlayDialog::reject);
|
QTimer::singleShot(100, this, &ImageOverlayDialog::reject);
|
||||||
@ -49,11 +57,11 @@ void ImageOverlayDialog::closeDialog()
|
|||||||
// TODO: Move this into Utils
|
// TODO: Move this into Utils
|
||||||
void ImageOverlayDialog::scaleImage(int max_width, int max_height)
|
void ImageOverlayDialog::scaleImage(int max_width, int max_height)
|
||||||
{
|
{
|
||||||
if (image_.isNull())
|
if (originalImage_.isNull())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto width_ratio = (double)max_width / (double)image_.width();
|
auto width_ratio = (double)max_width / (double)originalImage_.width();
|
||||||
auto height_ratio = (double)max_height / (double)image_.height();
|
auto height_ratio = (double)max_height / (double)originalImage_.height();
|
||||||
|
|
||||||
auto min_aspect_ratio = std::min(width_ratio, height_ratio);
|
auto min_aspect_ratio = std::min(width_ratio, height_ratio);
|
||||||
|
|
||||||
@ -61,14 +69,14 @@ void ImageOverlayDialog::scaleImage(int max_width, int max_height)
|
|||||||
int final_height = 0;
|
int final_height = 0;
|
||||||
|
|
||||||
if (min_aspect_ratio > 1) {
|
if (min_aspect_ratio > 1) {
|
||||||
final_width = image_.width();
|
final_width = originalImage_.width();
|
||||||
final_height = image_.height();
|
final_height = originalImage_.height();
|
||||||
} else {
|
} else {
|
||||||
final_width = image_.width() * min_aspect_ratio;
|
final_width = originalImage_.width() * min_aspect_ratio;
|
||||||
final_height = image_.height() * min_aspect_ratio;
|
final_height = originalImage_.height() * min_aspect_ratio;
|
||||||
}
|
}
|
||||||
|
|
||||||
image_ = image_.scaled(final_width, final_height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
image_ = originalImage_.scaled(final_width, final_height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImageOverlayDialog::paintEvent(QPaintEvent *event)
|
void ImageOverlayDialog::paintEvent(QPaintEvent *event)
|
||||||
|
@ -41,7 +41,7 @@ RoomInfoListItem::RoomInfoListItem(RoomInfo info, QWidget *parent)
|
|||||||
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||||
setAutoFillBackground(true);
|
setAutoFillBackground(true);
|
||||||
|
|
||||||
setMinimumSize(parent->width(), max_height_);
|
setMaximumSize(parent->width(), max_height_);
|
||||||
|
|
||||||
topLayout_ = new QHBoxLayout(this);
|
topLayout_ = new QHBoxLayout(this);
|
||||||
topLayout_->setSpacing(0);
|
topLayout_->setSpacing(0);
|
||||||
|
Loading…
Reference in New Issue
Block a user