Skip to content
Snippets Groups Projects
Commit 4fccc627 authored by Konstantinos Sideris's avatar Konstantinos Sideris
Browse files

Fix full screen image viewer on macOS sierra

parent 93e8297b
No related branches found
No related tags found
No related merge requests found
......@@ -21,14 +21,12 @@
#include <QMouseEvent>
#include <QPixmap>
class ImageOverlayDialog : public QDialog
class ImageOverlayDialog : public QWidget
{
Q_OBJECT
public:
ImageOverlayDialog(QPixmap image, QWidget *parent = nullptr);
void reject() override;
protected:
void mousePressEvent(QMouseEvent *event) override;
void paintEvent(QPaintEvent *event) override;
......@@ -36,9 +34,6 @@ protected:
signals:
void closing();
private slots:
void closeDialog();
private:
void scaleImage(int width, int height);
......@@ -47,4 +42,5 @@ private:
QRect content_;
QRect close_button_;
QRect screen_;
};
......@@ -15,43 +15,37 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QApplication>
#include <QDebug>
#include <QDesktopWidget>
#include <QPainter>
#include <QScreen>
#include <QTimer>
#include "ImageOverlayDialog.h"
ImageOverlayDialog::ImageOverlayDialog(QPixmap image, QWidget *parent)
: QDialog{parent}
: QWidget{parent}
, originalImage_{image}
{
setMouseTracking(true);
setModal(false);
setParent(0);
setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
setAttribute(Qt::WA_NoSystemBackground, true);
setAttribute(Qt::WA_TranslucentBackground, true);
setAttribute(Qt::WA_DeleteOnClose, true);
setWindowState(Qt::WindowFullScreen);
connect(this, SIGNAL(closing()), this, SLOT(closeDialog()));
}
screen_ = QApplication::desktop()->availableGeometry();
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);
move(QApplication::desktop()->mapToGlobal(screen_.topLeft()));
resize(screen_.size());
QDialog::reject();
}
connect(this, SIGNAL(closing()), this, SLOT(close()));
void ImageOverlayDialog::closeDialog()
{
QTimer::singleShot(100, this, &ImageOverlayDialog::reject);
raise();
}
// TODO: Move this into Utils
......@@ -87,15 +81,15 @@ void ImageOverlayDialog::paintEvent(QPaintEvent *event)
painter.setRenderHint(QPainter::Antialiasing);
// Full screen overlay.
painter.fillRect(rect(), QColor(55, 55, 55, 170));
painter.fillRect(QRect(0, 0, screen_.width(), screen_.height()), QColor(55, 55, 55, 170));
// Left and Right margins
int outer_margin = rect().width() * 0.12;
int outer_margin = screen_.width() * 0.12;
int buttonSize = 36;
int margin = outer_margin * 0.1;
int max_width = rect().width() - 2 * outer_margin;
int max_height = rect().height();
int max_width = screen_.width() - 2 * outer_margin;
int max_height = screen_.height();
scaleImage(max_width, max_height);
......@@ -103,7 +97,7 @@ void ImageOverlayDialog::paintEvent(QPaintEvent *event)
int diff_y = max_height - image_.height();
content_ = QRect(outer_margin + diff_x / 2, diff_y / 2, image_.width(), image_.height());
close_button_ = QRect(rect().width() - margin - buttonSize, margin, buttonSize, buttonSize);
close_button_ = QRect(screen_.width() - margin - buttonSize, margin, buttonSize, buttonSize);
// Draw main content_.
painter.drawPixmap(content_, image_);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment