diff --git a/src/dialogs/ImageOverlay.cc b/src/dialogs/ImageOverlay.cc
index 1e30b3ff..0e4d9d71 100644
--- a/src/dialogs/ImageOverlay.cc
+++ b/src/dialogs/ImageOverlay.cc
@@ -19,6 +19,7 @@
#include <QDesktopWidget>
#include <QPainter>
+#include "Utils.h"
#include "dialogs/ImageOverlay.h"
using namespace dialogs;
@@ -47,33 +48,6 @@ ImageOverlay::ImageOverlay(QPixmap image, QWidget *parent)
raise();
}
-// TODO: Move this into Utils
-void
-ImageOverlay::scaleImage(int max_width, int max_height)
-{
- if (originalImage_.isNull())
- return;
-
- auto width_ratio = (double)max_width / (double)originalImage_.width();
- auto height_ratio = (double)max_height / (double)originalImage_.height();
-
- auto min_aspect_ratio = std::min(width_ratio, height_ratio);
-
- int final_width = 0;
- int final_height = 0;
-
- if (min_aspect_ratio > 1) {
- final_width = originalImage_.width();
- final_height = originalImage_.height();
- } else {
- final_width = originalImage_.width() * min_aspect_ratio;
- final_height = originalImage_.height() * min_aspect_ratio;
- }
-
- image_ = originalImage_.scaled(
- final_width, final_height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
-}
-
void
ImageOverlay::paintEvent(QPaintEvent *event)
{
@@ -93,7 +67,7 @@ ImageOverlay::paintEvent(QPaintEvent *event)
int max_width = screen_.width() - 2 * outer_margin;
int max_height = screen_.height();
- scaleImage(max_width, max_height);
+ image_ = utils::scaleDown<QPixmap>(max_width, max_height, originalImage_);
int diff_x = max_width - image_.width();
int diff_y = max_height - image_.height();
diff --git a/src/timeline/widgets/ImageItem.cc b/src/timeline/widgets/ImageItem.cc
index e8fa069e..591d4e7b 100644
--- a/src/timeline/widgets/ImageItem.cc
+++ b/src/timeline/widgets/ImageItem.cc
@@ -23,6 +23,7 @@
#include <QPixmap>
#include "Config.h"
+#include "Utils.h"
#include "dialogs/ImageOverlay.h"
#include "timeline/widgets/ImageItem.h"
@@ -113,30 +114,6 @@ ImageItem::openUrl()
qWarning() << "Could not open url" << url_.toString();
}
-void
-ImageItem::scaleImage()
-{
- if (image_.isNull())
- return;
-
- auto width_ratio = (double)max_width_ / (double)image_.width();
- auto height_ratio = (double)max_height_ / (double)image_.height();
-
- auto min_aspect_ratio = std::min(width_ratio, height_ratio);
-
- if (min_aspect_ratio > 1) {
- width_ = image_.width();
- height_ = image_.height();
- } else {
- width_ = image_.width() * min_aspect_ratio;
- height_ = image_.height() * min_aspect_ratio;
- }
-
- setFixedSize(width_, height_);
- scaled_image_ =
- image_.scaled(width_, height_, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
-}
-
QSize
ImageItem::sizeHint() const
{
@@ -149,8 +126,13 @@ ImageItem::sizeHint() const
void
ImageItem::setImage(const QPixmap &image)
{
- image_ = image;
- scaleImage();
+ image_ = image;
+ scaled_image_ = utils::scaleDown<QPixmap>(max_width_, max_height_, image_);
+
+ width_ = scaled_image_.width();
+ height_ = scaled_image_.height();
+
+ setFixedSize(width_, height_);
update();
}
@@ -176,9 +158,15 @@ ImageItem::mousePressEvent(QMouseEvent *event)
void
ImageItem::resizeEvent(QResizeEvent *event)
{
- Q_UNUSED(event);
+ if (!image_)
+ return QWidget::resizeEvent(event);
+
+ scaled_image_ = utils::scaleDown<QPixmap>(max_width_, max_height_, image_);
- scaleImage();
+ width_ = scaled_image_.width();
+ height_ = scaled_image_.height();
+
+ setFixedSize(width_, height_);
}
void
|