rpcs3/rpcs3/rpcs3qt/screenshot_preview.cpp
2020-12-06 15:30:12 +03:00

65 lines
1.9 KiB
C++

#include "screenshot_preview.h"
#include "qt_utils.h"
#include <QAction>
#include <QApplication>
#include <QClipboard>
#include <QImage>
#include <QImageReader>
#include <QMenu>
#include <QResizeEvent>
screenshot_preview::screenshot_preview(const QString& filepath, QWidget* parent)
: QLabel(parent)
, m_filepath(filepath)
{
QImageReader reader(filepath);
reader.setAutoTransform(true);
m_image = reader.read();
setWindowTitle(tr("Screenshot Viewer"));
setObjectName("screenshot_preview");
setContextMenuPolicy(Qt::CustomContextMenu);
setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
setPixmap(QPixmap::fromImage(m_image));
setMinimumSize(160, 90);
connect(this, &screenshot_preview::customContextMenuRequested, this, &screenshot_preview::show_context_menu);
}
void screenshot_preview::show_context_menu(const QPoint & pos)
{
QMenu* menu = new QMenu();
menu->addAction(tr("&Copy"), [this]() { QGuiApplication::clipboard()->setImage(m_image); });
menu->addSeparator();
menu->addAction(tr("&Open file location"), [this]() { gui::utils::open_dir(m_filepath); });
menu->addSeparator();
QAction* reset_act = menu->addAction(tr("To &Normal Size"), [this]() { scale(m_image.size()); });
reset_act->setEnabled(pixmap()->size() != m_image.size());
QAction* stretch_act = menu->addAction(tr("&Stretch to size"), [this]() { m_stretch = !m_stretch; scale(size()); });
stretch_act->setCheckable(true);
stretch_act->setChecked(m_stretch);
menu->addSeparator();
menu->addAction(tr("E&xit"), this, &QLabel::close);
menu->exec(mapToGlobal(pos));
}
void screenshot_preview::scale(const QSize& new_size)
{
if (new_size != size())
{
resize(new_size);
}
setPixmap(QPixmap::fromImage(m_image.scaled(new_size, m_stretch ? Qt::IgnoreAspectRatio : Qt::KeepAspectRatio, Qt::SmoothTransformation)));
}
void screenshot_preview::resizeEvent(QResizeEvent* event)
{
scale(event->size());
event->ignore();
}