/* This file is proposed to be part of the KDE base. * Copyright (C) 2003 Laur Ivan <laurivan@eircom.net> * * Many thanks to: * - Bernardo Hung <deciare@gta.igs.net> for the enhanced shadow * algorithm (currently used) * - Tim Jansen <tim@tjansen.de> for the API updates and fixes. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License version 2 as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef KFILE_IVI_DESKTOP #define KFILE_IVI_DESKTOP #include <tqcolor.h> #include <tqpixmap.h> #include <tqimage.h> #include <tqstring.h> #include <kfileivi.h> /* * The dither flags used to display the shadow image */ #define DITHER_FLAGS (Qt::DiffuseAlphaDither | Qt::ColorOnly | Qt::AvoidDither) class TQFont; class KShadowEngine; /** * This class replaces KFileIVI in the desktop only. * If the shadow object is NULL, then the class should behave almost identical * to its parent. * @since 3.2 */ class KFileIVIDesktop : public KFileIVI { public: /** * Constructor. It replicates the KFileIVI constructor and adds an * optional shadow object. * @param iconview the parent (iconview) * @param fileitem the item theis object is supposed to draw * @param size the default size of the drawn object * @param shadow reference to the shadow object */ KFileIVIDesktop(KonqIconViewWidget *iconview, KFileItem* fileitem, int size, KShadowEngine *shadow = 0L); /** * Default destructor. Doesn't really do anything. */ ~KFileIVIDesktop(); protected: /** * Reimplements KIconView::calcRect to take the shadow metrics * into account */ virtual void calcRect( const TQString& _text ); /** * Paints this item. Takes care of using the normal or alpha * blending methods depending on the configuration. * @param p the painter for drawing the item * @param cg the base color group */ virtual void paintItem(TQPainter *p, const TQColorGroup &cg); /** * Draws the shadow text. * @param p the painter for drawing the item * @param cg the base color group */ virtual void drawShadowedText(TQPainter *p, const TQColorGroup &cg); /** * Builds the shadow. As the algorithm is pretty slow (at pixel level), * This method is triggered only if the configuration has changed. * @param p the painter for drawing the item * @param align the shadow tqalignment * @param shadowColor the shadow color */ virtual TQImage *buildShadow(TQPainter *p, const int align, TQColor &shadowColor); protected: void setNormalImage(TQImage *newImage) { delete m_normalImage; m_normalImage = newImage; }; void setSelectedImage(TQImage *newImage) { delete m_selectedImage; m_selectedImage = newImage; }; TQImage *normalImage() { return m_normalImage; }; TQImage *selectedImage() { return m_selectedImage; }; private: bool shouldUpdateShadow(bool selected); int shadowThickness() const; KShadowEngine *m_shadow; TQImage *m_selectedImage; TQImage *m_normalImage; TQString oldText; unsigned long _selectedUID; unsigned long _normalUID; }; #endif