summaryrefslogtreecommitdiff
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp35
1 files changed, 25 insertions, 10 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 839b2c3..447cf0c 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -13,26 +13,41 @@ MainWindow::MainWindow(const QStringList &filePaths, QWidget *parent)
if (!filePaths.isEmpty()) {
current.load(filePaths.first());
setWindowTitle(title_format.arg(filePaths.first()));
- resizePixmap();
+ fit();
}
- connect(ui->original_toolButton, &QToolButton::clicked, this,
- [this]() { ui->label->setPixmap(current); });
+ connect(ui->ori_toolButton, &QToolButton::clicked, [this]() { scale(1.0); });
+ connect(ui->fit_toolButton, &QToolButton::clicked, [this]() { fit(); });
- connect(ui->fit_toolButton, &QToolButton::clicked, this,
- [this]() { resizePixmap(); });
+ connect(ui->scale_slider, &QSlider::sliderMoved,
+ [this](int value) { scale(static_cast<double>(value) / 100.0f); });
}
MainWindow::~MainWindow() { delete ui; }
void MainWindow::resizeEvent(QResizeEvent *event) {
- resizePixmap();
+ fit();
QMainWindow::resizeEvent(event);
}
-void MainWindow::resizePixmap() {
- const auto size =
- ui->scrollArea->viewport()->size().boundedTo(current.size());
+void MainWindow::fit() {
+ const auto pixmpSize = current.size();
+ const auto scaleSize =
+ pixmpSize.scaled(ui->scrollArea->viewport()->size(), Qt::KeepAspectRatio);
+
+ const int scale = std::min(scaleSize.width() * 100 / pixmpSize.width(),
+ scaleSize.height() * 100 / pixmpSize.height());
+
+ ui->label->setPixmap(
+ current.scaled(scaleSize, Qt::KeepAspectRatio, Qt::SmoothTransformation));
+ ui->scale_slider->setValue(scale);
+ ui->scale_label->setText(scale_format.arg(scale));
+}
+
+void MainWindow::scale(double scale) {
+ const auto scaleSize = current.size() * scale;
ui->label->setPixmap(
- current.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation));
+ current.scaled(scaleSize, Qt::KeepAspectRatio, Qt::SmoothTransformation));
+ ui->scale_slider->setValue(scale * 100);
+ ui->scale_label->setText(scale_format.arg(scale * 100));
}