X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/5c4c00e1591f1756b4b06fb04d47cc421fcd6399..b3beb9e0c2ff8cdc77f9a48e3416877e5bad0918:/src/pixmapviewer.h diff --git a/src/pixmapviewer.h b/src/pixmapviewer.h index a5293c88d..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,35 +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 slots: - void beginTransition(); - void finishTransition(); +private Q_SLOTS: + void checkPendingPixmaps(); private: QPixmap m_pixmap; - QPixmap m_nextPixmap; - QPixmap m_pendingPixmap; + 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