diff --git a/src/kpixmapregionselectordialog.cpp b/src/kpixmapregionselectordialog.cpp index dd852da..6547211 100644 --- a/src/kpixmapregionselectordialog.cpp +++ b/src/kpixmapregionselectordialog.cpp @@ -1,179 +1,180 @@ /* This file is part of the KDE libraries Copyright (C) 2004 Antonio Larrosa #include +#include #include #include #include #include #include class Q_DECL_HIDDEN KPixmapRegionSelectorDialog::Private { public: Private(KPixmapRegionSelectorDialog *parent) : pixmapSelectorWidget(nullptr), q(parent) { } KPixmapRegionSelectorWidget *pixmapSelectorWidget; KPixmapRegionSelectorDialog *q; void init() { //When the image is rotated we need to enforce the maximum width&height into the //KPixmapRegionSelectorWidget; in order to avoid the dialog to get out of the screen q->connect(pixmapSelectorWidget, SIGNAL(pixmapRotated()), q, SLOT(_k_adjustPixmapSize())); } void _k_adjustPixmapSize() { if (pixmapSelectorWidget) { //Set maximum size for picture #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) QScreen *screen = pixmapSelectorWidget->screen(); #else QScreen *screen = QGuiApplication::screenAt(pixmapSelectorWidget->geometry().center()); #endif if (screen) { const QRect screenGeometry = screen->availableGeometry(); pixmapSelectorWidget->setMaximumWidgetSize( (int)(screenGeometry.width() * 4.0 / 5), (int)(screenGeometry.height() * 4.0 / 5)); } } } }; KPixmapRegionSelectorDialog::KPixmapRegionSelectorDialog(QWidget *parent) : QDialog(parent), d(new Private(this)) { setWindowTitle(tr("Select Region of Image")); QVBoxLayout *boxLayout = new QVBoxLayout(this); QLabel *label = new QLabel(tr("Please click and drag on the image to select the region of interest:"), this); d->pixmapSelectorWidget = new KPixmapRegionSelectorWidget(this); QDialogButtonBox *buttonBox = new QDialogButtonBox(this); buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); boxLayout->addWidget(label); boxLayout->addWidget(d->pixmapSelectorWidget); boxLayout->addWidget(buttonBox); d->init(); } KPixmapRegionSelectorDialog::~KPixmapRegionSelectorDialog() { delete d; } KPixmapRegionSelectorWidget *KPixmapRegionSelectorDialog::pixmapRegionSelectorWidget() const { return d->pixmapSelectorWidget; } void KPixmapRegionSelectorDialog::adjustRegionSelectorWidgetSizeToFitScreen() { d->_k_adjustPixmapSize(); } QRect KPixmapRegionSelectorDialog::getSelectedRegion(const QPixmap &pixmap, QWidget *parent) { KPixmapRegionSelectorDialog dialog(parent); dialog.pixmapRegionSelectorWidget()->setPixmap(pixmap); dialog.adjustRegionSelectorWidgetSizeToFitScreen(); int result = dialog.exec(); QRect rect; if (result == QDialog::Accepted) { rect = dialog.pixmapRegionSelectorWidget()->unzoomedSelectedRegion(); } return rect; } QRect KPixmapRegionSelectorDialog::getSelectedRegion(const QPixmap &pixmap, int aspectRatioWidth, int aspectRatioHeight, QWidget *parent) { KPixmapRegionSelectorDialog dialog(parent); dialog.pixmapRegionSelectorWidget()->setPixmap(pixmap); dialog.pixmapRegionSelectorWidget()->setSelectionAspectRatio(aspectRatioWidth, aspectRatioHeight); dialog.adjustRegionSelectorWidgetSizeToFitScreen(); int result = dialog.exec(); QRect rect; if (result == QDialog::Accepted) { rect = dialog.pixmapRegionSelectorWidget()->unzoomedSelectedRegion(); } return rect; } QImage KPixmapRegionSelectorDialog::getSelectedImage(const QPixmap &pixmap, QWidget *parent) { KPixmapRegionSelectorDialog dialog(parent); dialog.pixmapRegionSelectorWidget()->setPixmap(pixmap); dialog.adjustRegionSelectorWidgetSizeToFitScreen(); int result = dialog.exec(); QImage image; if (result == QDialog::Accepted) { image = dialog.pixmapRegionSelectorWidget()->selectedImage(); } return image; } QImage KPixmapRegionSelectorDialog::getSelectedImage(const QPixmap &pixmap, int aspectRatioWidth, int aspectRatioHeight, QWidget *parent) { KPixmapRegionSelectorDialog dialog(parent); dialog.pixmapRegionSelectorWidget()->setPixmap(pixmap); dialog.pixmapRegionSelectorWidget()->setSelectionAspectRatio(aspectRatioWidth, aspectRatioHeight); dialog.adjustRegionSelectorWidgetSizeToFitScreen(); int result = dialog.exec(); QImage image; if (result == QDialog::Accepted) { image = dialog.pixmapRegionSelectorWidget()->selectedImage(); } return image; } #include "moc_kpixmapregionselectordialog.cpp"