X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/c5948d644352046637dffb8ee8eb748069e44d4e..da3bc09d21b43837873c899e2fbda1fa6c2a2e5e:/src/pixmapviewer.cpp diff --git a/src/pixmapviewer.cpp b/src/pixmapviewer.cpp index 4fe451a8c..36d583c1d 100644 --- a/src/pixmapviewer.cpp +++ b/src/pixmapviewer.cpp @@ -26,10 +26,14 @@ #include PixmapViewer::PixmapViewer(QWidget* parent) : - QWidget(parent) + QWidget(parent), + m_animationStep(0) { setMinimumWidth(K3Icon::SizeEnormous); setMinimumWidth(K3Icon::SizeEnormous); + + m_animation.setDuration(300); + connect(&m_animation, SIGNAL(valueChanged(qreal)), this, SLOT(update())); } PixmapViewer::~PixmapViewer() @@ -38,20 +42,34 @@ PixmapViewer::~PixmapViewer() void PixmapViewer::setPixmap(const QPixmap& pixmap) { + if (pixmap.isNull()) { + return; + } + + m_oldPixmap = m_pixmap.isNull() ? pixmap : m_pixmap; m_pixmap = pixmap; - update(); + + m_animation.start(); } void PixmapViewer::paintEvent(QPaintEvent* event) { QWidget::paintEvent(event); - QPainter painter; - painter.begin(this); - const int x = (width() - m_pixmap.width()) / 2; - const int y = (height() - m_pixmap.height()) / 2; - painter.drawPixmap(x, y, m_pixmap); - painter.end(); + QPainter painter(this); + + const float value = m_animation.currentValue(); + + const int scaledWidth = static_cast((m_oldPixmap.width() * (1.0 - value)) + (m_pixmap.width() * value)); + const int scaledHeight = static_cast((m_oldPixmap.height() * (1.0 - value)) + (m_pixmap.height() * value)); + const int x = (width() - scaledWidth ) / 2; + const int y = (height() - scaledHeight) / 2; + + if (m_oldPixmap.width() > m_pixmap.width()) { + painter.drawPixmap(x, y, m_oldPixmap.scaled(scaledWidth, scaledHeight)); + } else { + painter.drawPixmap(x, y, m_pixmap.scaled(scaledWidth, scaledHeight)); + } } #include "pixmapviewer.moc"