summaryrefslogtreecommitdiffstats
path: root/kdeui/krootpixmap.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdeui/krootpixmap.h')
-rw-r--r--kdeui/krootpixmap.h216
1 files changed, 216 insertions, 0 deletions
diff --git a/kdeui/krootpixmap.h b/kdeui/krootpixmap.h
new file mode 100644
index 000000000..3eef65f51
--- /dev/null
+++ b/kdeui/krootpixmap.h
@@ -0,0 +1,216 @@
+/* vi: ts=8 sts=4 sw=4
+ *
+ * $Id$
+ * This file is part of the KDE project, module kdesktop.
+ * Copyright (C) 1999,2000 Geert Jansen <jansen@kde.org>
+ *
+ * You can Freely distribute this program under the GNU Library General
+ * Public License. See the file "COPYING.LIB" for the exact licensing terms.
+ */
+
+#ifndef __KRootPixmap_h_Included__
+#define __KRootPixmap_h_Included__
+
+#include <qobject.h>
+#include <qcolor.h>
+#include <kdelibs_export.h>
+
+#ifndef Q_WS_QWS //FIXME
+
+class QRect;
+class QWidget;
+class QTimer;
+class KSharedPixmap;
+class KRootPixmapData;
+
+/**
+ * Creates pseudo-transparent widgets.
+ *
+ * A pseudo-transparent widget is a widget with its background pixmap set to
+ * that part of the desktop background that it is currently obscuring. This
+ * gives a transparency effect.
+ *
+ * To create a transparent widget, construct a KRootPixmap and pass it a
+ * pointer to your widget. That's it! Moving, resizing and background changes
+ * are handled automatically.
+ *
+ * Instead of using the default behavior, you can ask KRootPixmap
+ * to emit a backgroundUpdated(const QPixmap &) signal whenever
+ * the background needs updating by using setCustomPainting(bool).
+ * Alternatively by reimplementing updateBackground(KSharedPixmap*)
+ * you can take complete control of the behavior.
+ *
+ * @author Geert Jansen <jansen@kde.org>
+ * @version $Id$
+ */
+class KDEUI_EXPORT KRootPixmap: public QObject
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Constructs a KRootPixmap. The KRootPixmap will be created as a child
+ * of the target widget so it will be deleted automatically when the
+ * widget is destroyed.
+ *
+ * @param target A pointer to the widget that you want to make pseudo
+ * transparent.
+ * @param name The internal name of the pixmap
+ */
+ KRootPixmap( QWidget *target, const char *name=0 );
+
+ /**
+ * Constructs a KRootPixmap where the parent QObject and target QWidget are
+ * different.
+ */
+ KRootPixmap( QWidget *target, QObject *parent, const char *name=0 );
+
+ /**
+ * Destructs the object.
+ */
+ virtual ~KRootPixmap();
+
+ /**
+ * Checks if pseudo-transparency is available.
+ * @return @p true if transparency is available, @p false otherwise.
+ */
+ bool isAvailable() const;
+
+ /**
+ * Returns true if the KRootPixmap is active.
+ */
+ bool isActive() const { return m_bActive; }
+
+ /**
+ * Returns the number of the current desktop.
+ */
+ int currentDesktop() const;
+
+ /**
+ * Returns true if custom painting is enabled, false otherwise.
+ * @see setCustomPainting(bool)
+ */
+ bool customPainting() const { return m_bCustomPaint; }
+
+#ifndef KDE_NO_COMPAT
+ /**
+ * Deprecated, use isAvailable() instead.
+ * @deprecated
+ */
+ KDE_DEPRECATED bool checkAvailable(bool) { return isAvailable(); }
+#endif
+
+ /** @since 3.2
+ * @return the fade color.
+ */
+ const QColor &color() const { return m_FadeColor; }
+
+ /** @since 3.2
+ * @return the color opacity.
+ */
+ double opacity() const { return m_Fade; }
+
+public slots:
+ /**
+ * Starts background handling.
+ */
+ virtual void start();
+
+ /**
+ * Stops background handling.
+ */
+ virtual void stop();
+
+ /**
+ * Sets the fade effect.
+ *
+ * This effect will fade the background to the
+ * specified color.
+ * @param opacity A value between 0 and 1, indicating the opacity
+ * of the color. A value of 0 will not change the image, a value of 1
+ * will use the fade color unchanged.
+ * @param color The color to fade to.
+ */
+ void setFadeEffect(double opacity, const QColor &color);
+
+ /**
+ * Repaints the widget background. Normally, you shouldn't need this
+ * as it is handled automatically.
+ *
+ * @param force Force a repaint, even if the contents did not change.
+ */
+ void repaint( bool force );
+
+ /**
+ * Repaints the widget background. Normally, you shouldn't need this
+ * as it is handled automatically. This is equivalent to calling
+ * repaint( false ).
+ */
+ void repaint();
+
+ /**
+ * Enables custom handling of the background painting. If custom
+ * painting is enabled then KRootPixmap will emit a
+ * backgroundUpdated() signal when the background for the
+ * target widget changes, instead of applying the new background.
+ */
+ void setCustomPainting( bool enable ) { m_bCustomPaint = enable; }
+
+ /**
+ * Asks KDesktop to export the desktop background as a KSharedPixmap.
+ * This method uses DCOP to call KBackgroundIface/setExport(int).
+ */
+ void enableExports();
+
+ /**
+ * Returns the name of the shared pixmap (only needed for low level access)
+ */
+ static QString pixmapName(int desk);
+signals:
+ /**
+ * Emitted when the background needs updating and custom painting
+ * (see setCustomPainting(bool) ) is enabled.
+ *
+ * @param pm A pixmap containing the new background.
+ */
+ void backgroundUpdated( const QPixmap &pm );
+
+protected:
+ /**
+ * Reimplemented to filter the events from the target widget and
+ * track its movements.
+ */
+ virtual bool eventFilter(QObject *, QEvent *);
+
+ /**
+ * Called when the pixmap has been updated. The default implementation
+ * applies the fade effect, then sets the target's background, or emits
+ * backgroundUpdated(const QPixmap &) depending on the painting mode.
+ */
+ virtual void updateBackground( KSharedPixmap * );
+
+private slots:
+ void slotBackgroundChanged(int);
+ void slotDone(bool);
+ void desktopChanged(int desktop);
+ void desktopChanged( WId window, unsigned int properties );
+
+private:
+ bool m_bActive, m_bInit, m_bCustomPaint;
+ int m_Desk;
+
+ double m_Fade;
+ QColor m_FadeColor;
+
+ QRect m_Rect;
+ QWidget *m_pWidget;
+ QTimer *m_pTimer;
+ KSharedPixmap *m_pPixmap;
+ KRootPixmapData *d;
+
+ void init();
+};
+
+#endif // ! Q_WS_QWS
+#endif // __KRootPixmap_h_Included__
+