]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/pixmapviewer.h
Group classes into folders, Dolphin is too big in the meantime for having a flat...
[dolphin.git] / src / pixmapviewer.h
index a5293c88d6909f7004e9e080078b39d3b474eb72..26e520aab3bc05e117bbdf1d242aa4c011891580 100644 (file)
@@ -1,6 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2006 by Peter Penz                                      *
- *   peter.penz@gmx.at                                                     *
+ *   Copyright (C) 2006 by Peter Penz <peter.penz@gmx.at>                  *
  *                                                                         *
  *   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 <QtGui/QWidget>
-#include <QtGui/QPixmap>
+#include <QWidget>
+#include <QPixmap>
+#include <QQueue>
 #include <QTimeLine>
 
 class QPaintEvent;
@@ -30,35 +30,69 @@ class QPaintEvent;
 /**
  * @brief Widget which shows a pixmap centered inside the boundaries.
  *
- * @see IconsViewSettingsPage
- * @author Peter Penz <peter.penz@gmx.at>
+ * 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<QPixmap> m_pendingPixmaps;
     QTimeLine m_animation;
+    Transition m_transition;
     int m_animationStep;
+    QSize m_sizeHint;
 };
 
+inline const QPixmap& PixmapViewer::pixmap() const
+{
+    return m_pixmap;
+}
+
 
 #endif