/***************************************************************************** * gta5view Grand Theft Auto V Profile Viewer * Copyright (C) 2016-2020 Syping * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . *****************************************************************************/ #include "PictureDialog.h" #include "PictureWidget.h" #include "UiModLabel.h" #include "AppEnv.h" #include #include #include #include #include #if QT_VERSION < 0x060000 #include #endif PictureWidget::PictureWidget(QWidget *parent) : QDialog(parent) { installEventFilter(this); widgetLayout = new QHBoxLayout(this); widgetLayout->setSpacing(0); widgetLayout->setContentsMargins(0, 0, 0, 0); pictureLabel = new UiModLabel(this); pictureLabel->setObjectName("pictureLabel"); pictureLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); pictureLabel->setContextMenuPolicy(Qt::CustomContextMenu); pictureLabel->setAlignment(Qt::AlignCenter); widgetLayout->addWidget(pictureLabel); QObject::connect(pictureLabel, SIGNAL(mouseDoubleClicked(Qt::MouseButton)), this, SLOT(pictureDoubleClicked(Qt::MouseButton))); QObject::connect(pictureLabel, SIGNAL(customContextMenuRequested(QPoint)), parent, SLOT(exportCustomContextMenuRequested(QPoint))); #if QT_VERSION < 0x060000 QObject::connect(QApplication::desktop(), SIGNAL(resized(int)), this, SLOT(updateWindowSize(int))); #endif setLayout(widgetLayout); } PictureWidget::~PictureWidget() { widgetLayout->removeWidget(pictureLabel); delete pictureLabel; delete widgetLayout; } bool PictureWidget::eventFilter(QObject *obj, QEvent *ev) { if (obj == this) { if (ev->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = (QKeyEvent*)ev; switch (keyEvent->key()) { case Qt::Key_Left: emit previousPictureRequested(); break; case Qt::Key_Right: emit nextPictureRequested(); break; } } } return false; } void PictureWidget::pictureDoubleClicked(Qt::MouseButton button) { if (button == Qt::LeftButton) { close(); } } void PictureWidget::setImage(QImage image_, QRect rec) { const qreal screenRatioPR = AppEnv::screenRatioPR(); image = image_; QPixmap pixmap = QPixmap::fromImage(image.scaled(rec.width() * screenRatioPR, rec.height() * screenRatioPR, Qt::KeepAspectRatio, Qt::SmoothTransformation)); #if QT_VERSION >= 0x050600 pixmap.setDevicePixelRatio(AppEnv::screenRatioPR()); #endif pictureLabel->setPixmap(pixmap); } void PictureWidget::setImage(QImage image_) { const qreal screenRatioPR = AppEnv::screenRatioPR(); image = image_; QPixmap pixmap = QPixmap::fromImage(image.scaled(geometry().width() * screenRatioPR, geometry().height() * screenRatioPR, Qt::KeepAspectRatio, Qt::SmoothTransformation)); #if QT_VERSION >= 0x050600 pixmap.setDevicePixelRatio(screenRatioPR); #endif pictureLabel->setPixmap(pixmap); } void PictureWidget::updateWindowSize(int screenID) { #if QT_VERSION >= 0x060000 Q_UNUSED(screenID) const qreal screenRatioPR = AppEnv::screenRatioPR(); QRect desktopRect = QApplication::screenAt(pos())->geometry(); move(desktopRect.x(), desktopRect.y()); resize(desktopRect.width(), desktopRect.height()); showFullScreen(); QPixmap pixmap = QPixmap::fromImage(image.scaled(geometry().width() * screenRatioPR, geometry().height() * screenRatioPR, Qt::KeepAspectRatio, Qt::SmoothTransformation)); #if QT_VERSION >= 0x050600 pixmap.setDevicePixelRatio(screenRatioPR); #endif pictureLabel->setPixmap(pixmap); #else if (screenID == QApplication::desktop()->screenNumber(this)) { QRect desktopRect = QApplication::desktop()->screenGeometry(this); move(desktopRect.x(), desktopRect.y()); resize(desktopRect.width(), desktopRect.height()); showFullScreen(); pictureLabel->setPixmap(QPixmap::fromImage(image.scaled(desktopRect.width(), desktopRect.height(), Qt::KeepAspectRatio, Qt::SmoothTransformation))); } #endif }