mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-04 05:51:27 +12:00
65 lines
1.9 KiB
C++
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();
|
|
}
|