1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
/* This file is proposed to be part of the KDE base.
* Copyright (C) 2003 Laur Ivan <[email protected]>
*
* Many thanks to:
* - Bernardo Hung <[email protected]> for the enhanced shadow
* algorithm (currently used)
* - Tim Jansen <[email protected]> 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 <qcolor.h>
#include <qpixmap.h>
#include <qimage.h>
#include <qstring.h>
#include <kfileivi.h>
/*
* The dither flags used to display the shadow image
*/
#define DITHER_FLAGS (Qt::DiffuseAlphaDither | Qt::ColorOnly | Qt::AvoidDither)
class QFont;
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 QString& _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(QPainter *p, const QColorGroup &cg);
/**
* Reimplements QIconView::paintFocus() to take the shadow
* metrics into account();
*/
virtual void paintFocus( QPainter *p, const QColorGroup &cg );
/**
* Draws the shadow text.
* @param p the painter for drawing the item
* @param cg the base color group
*/
virtual void drawShadowedText(QPainter *p, const QColorGroup &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 alignment
* @param shadowColor the shadow color
*/
virtual QImage *buildShadow(QPainter *p, const int align, QColor &shadowColor);
protected:
void setNormalImage(QImage *newImage) { delete m_normalImage; m_normalImage = newImage; };
void setSelectedImage(QImage *newImage) { delete m_selectedImage; m_selectedImage = newImage; };
QImage *normalImage() { return m_normalImage; };
QImage *selectedImage() { return m_selectedImage; };
private:
bool shouldUpdateShadow(bool selected);
int shadowThickness() const;
KShadowEngine *m_shadow;
QImage *m_selectedImage;
QImage *m_normalImage;
QString oldText;
unsigned long _selectedUID;
unsigned long _normalUID;
};
#endif
|