X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/da3bc09d21b43837873c899e2fbda1fa6c2a2e5e..b1c9b5126d:/src/pixmapviewer.h diff --git a/src/pixmapviewer.h b/src/pixmapviewer.h index 54ed5232c..26e520aab 100644 --- a/src/pixmapviewer.h +++ b/src/pixmapviewer.h @@ -1,6 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Peter Penz * - * peter.penz@gmx.at * + * Copyright (C) 2006 by Peter Penz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -21,8 +20,9 @@ #ifndef PIXMAPVIEWER_H #define PIXMAPVIEWER_H -#include -#include +#include +#include +#include #include class QPaintEvent; @@ -30,30 +30,69 @@ class QPaintEvent; /** * @brief Widget which shows a pixmap centered inside the boundaries. * - * @see IconsViewSettingsPage - * @author Peter Penz + * When the pixmap is changed, a smooth transition is done from the old pixmap + * to the new pixmap. */ class PixmapViewer : public QWidget { Q_OBJECT + public: - explicit PixmapViewer(QWidget* parent); + enum Transition + { + /** No transition is done when the pixmap is changed. */ + NoTransition, + + /** + * The old pixmap is replaced by the new pixmap and the size is + * adjusted smoothly to the size of the new pixmap. + */ + DefaultTransition, + + /** + * If the old pixmap and the new pixmap have the same content, but + * a different size it is recommended to use Transition::SizeTransition + * instead of Transition::DefaultTransition. In this case it is assured + * that the larger pixmap is used for downscaling, which leads + * to an improved scaling output. + */ + SizeTransition + }; + + explicit PixmapViewer(QWidget* parent, + Transition transition = DefaultTransition); + virtual ~PixmapViewer(); void setPixmap(const QPixmap& pixmap); - const QPixmap& pixmap() const - { - return m_pixmap; - } + const QPixmap& pixmap() const; + + /** + * Sets the size hint to \a size and triggers a relayout + * of the parent widget. Per default no size hint is given. + */ + void setSizeHint(const QSize& size); + virtual QSize sizeHint() const; protected: virtual void paintEvent(QPaintEvent* event); +private Q_SLOTS: + void checkPendingPixmaps(); + private: QPixmap m_pixmap; QPixmap m_oldPixmap; + QQueue m_pendingPixmaps; QTimeLine m_animation; + Transition m_transition; int m_animationStep; + QSize m_sizeHint; }; +inline const QPixmap& PixmapViewer::pixmap() const +{ + return m_pixmap; +} + #endif