macOS fixes (#15)

- Improve build instructions.
- Fix fullscreen image sizing.
- Remove horizontal overscroll of RoomInfoListItem.
This commit is contained in:
Matthew Hodgson 2017-05-04 11:11:04 +01:00 committed by mujx
parent fb76118309
commit 9cc9b623eb
4 changed files with 26 additions and 12 deletions

View File

@ -42,6 +42,9 @@ $ brew update
$ brew install qt5 $ brew install qt5
``` ```
N.B. you will need to pass `-DCMAKE_PREFIX_PATH=/usr/local/opt/qt5`
to cmake to point it at your qt5 install (tweaking the path as needed)
### Building ### Building
```bash ```bash

View File

@ -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_;

View File

@ -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)

View File

@ -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);