summaryrefslogtreecommitdiff
authorsandman <sandman>2002-09-30 23:06:39 (UTC)
committer sandman <sandman>2002-09-30 23:06:39 (UTC)
commit37a8266f4a32d07a27d453897febf1f25963a4d0 (patch) (unidiff)
tree38f41045da51b99b76a69b42beaafd0124564cc9
parent6fdaab436d4fa72b3de06a1a9cf9be0bd964677a (diff)
downloadopie-37a8266f4a32d07a27d453897febf1f25963a4d0.zip
opie-37a8266f4a32d07a27d453897febf1f25963a4d0.tar.gz
opie-37a8266f4a32d07a27d453897febf1f25963a4d0.tar.bz2
- again some speedups for the new busy indicator
- (inefficient) fix for background pixmaps with alpha channel (untested)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/launcherview.cpp53
1 files changed, 30 insertions, 23 deletions
diff --git a/core/launcher/launcherview.cpp b/core/launcher/launcherview.cpp
index 5daaeff..33717bc 100644
--- a/core/launcher/launcherview.cpp
+++ b/core/launcher/launcherview.cpp
@@ -94,47 +94,36 @@ public:
94 // We don't want rubberbanding (yet) 94 // We don't want rubberbanding (yet)
95 } 95 }
96 96
97 void setBusy(bool on) 97 void setBusy(bool on)
98 { 98 {
99 QIconViewItem *c = on ? currentItem() : 0; 99 QIconViewItem *c = on ? currentItem() : 0;
100 qDebug ( "set busy %d -> %s", on, c ? c-> text ().latin1() : "(null)" );
101
100 if ( bsy != c ) { 102 if ( bsy != c ) {
101 if ( bsy ) 103 QIconViewItem *oldbsy = bsy;
102 bsy-> repaint ( );
103 bsy = c; 104 bsy = c;
104 105
106 if ( oldbsy )
107 oldbsy-> repaint ( );
108
105 if ( bsy ) { 109 if ( bsy ) {
106 busystate = 5; 110 QPixmap *src = bsy-> QIconViewItem::pixmap();
107 for ( int i = 0; i <= 5; i++ ) 111 for ( int i = 0; i <= 5; i++ ) {
108 bpm [i] = QPixmap ( );
109 timerEvent ( 0 );
110 busytimer = startTimer ( 150 );
111 }
112 else
113 killTimer ( busytimer );
114 }
115 }
116
117 virtual void timerEvent ( QTimerEvent *te )
118 {
119 if ( !te || ( te-> timerId ( ) == busytimer )) {
120 if ( bsy ) {
121 if ( bpm [::abs(busystate)]. isNull ( )) {
122 QPixmap *src = bsy-> QIconViewItem::pixmap();
123 QImage img = src->convertToImage(); 112 QImage img = src->convertToImage();
124 QRgb* rgb; 113 QRgb* rgb;
125 int count; 114 int count;
126 if ( img.depth() == 32 ) { 115 if ( img.depth() == 32 ) {
127 rgb = (QRgb*)img.bits(); 116 rgb = (QRgb*)img.bits();
128 count = img.bytesPerLine()/sizeof(QRgb)*img.height(); 117 count = img.bytesPerLine()/sizeof(QRgb)*img.height();
129 } else { 118 } else {
130 rgb = img.colorTable(); 119 rgb = img.colorTable();
131 count = img.numColors(); 120 count = img.numColors();
132 } 121 }
133 int rc, gc, bc; 122 int rc, gc, bc;
134 int bs = ::abs ( busystate * 10 ) + 25; 123 int bs = ::abs ( i * 10 ) + 25;
135 colorGroup().highlight().rgb( &rc, &gc, &bc ); 124 colorGroup().highlight().rgb( &rc, &gc, &bc );
136 rc = rc * bs / 100; 125 rc = rc * bs / 100;
137 gc = gc * bs / 100; 126 gc = gc * bs / 100;
138 bc = bc * bs / 100; 127 bc = bc * bs / 100;
139 128
140 for ( int r = 0; r < count; r++, rgb++ ) { 129 for ( int r = 0; r < count; r++, rgb++ ) {
@@ -142,19 +131,36 @@ public:
142 int gi = gc + qGreen ( *rgb ) * ( 100 - bs ) / 100; 131 int gi = gc + qGreen ( *rgb ) * ( 100 - bs ) / 100;
143 int bi = bc + qBlue ( *rgb ) * ( 100 - bs ) / 100; 132 int bi = bc + qBlue ( *rgb ) * ( 100 - bs ) / 100;
144 int ai = qAlpha ( *rgb ); 133 int ai = qAlpha ( *rgb );
145 *rgb = qRgba ( ri, gi, bi, ai ); 134 *rgb = qRgba ( ri, gi, bi, ai );
146 } 135 }
147 136
148 bpm [::abs(busystate)].convertFromImage( img ); 137 bpm [i].convertFromImage( img );
149 } 138 }
150 bsy-> repaint ( ); 139 busystate = 0;
140 if ( busytimer )
141 killTimer ( busytimer );
142 timerEvent ( 0 );
143 busytimer = startTimer ( 180 );
144 }
145 else {
146 killTimer ( busytimer );
147 busytimer = 0;
148 }
149 }
150 }
151 151
152 virtual void timerEvent ( QTimerEvent *te )
153 {
154 if ( !te || ( te-> timerId ( ) == busytimer )) {
155 if ( bsy ) {
152 busystate++; 156 busystate++;
153 if ( busystate > 5 ) 157 if ( busystate > 5 )
154 busystate = -4; 158 busystate = -4;
159
160 bsy-> repaint ( );
155 } 161 }
156 } 162 }
157 } 163 }
158 164
159 bool inKeyEvent() const { return ike; } 165 bool inKeyEvent() const { return ike; }
160 void keyPressEvent(QKeyEvent* e) 166 void keyPressEvent(QKeyEvent* e)
@@ -203,13 +209,14 @@ public:
203 bgColor = c; 209 bgColor = c;
204 } 210 }
205 211
206 void drawBackground( QPainter *p, const QRect &r ) 212 void drawBackground( QPainter *p, const QRect &r )
207 { 213 {
208 if ( !bgPixmap.isNull() ) { 214 if ( !bgPixmap.isNull() ) {
209 p->drawTiledPixmap( r, bgPixmap, 215 p-> fillRect ( r, bgColor );
216 p->drawTiledPixmap( r, bgPixmap,
210 QPoint( (r.x() + contentsX()) % bgPixmap.width(), 217 QPoint( (r.x() + contentsX()) % bgPixmap.width(),
211 (r.y() + contentsY()) % bgPixmap.height() ) ); 218 (r.y() + contentsY()) % bgPixmap.height() ) );
212 } else { 219 } else {
213 p->fillRect( r, bgColor ); 220 p->fillRect( r, bgColor );
214 } 221 }
215 } 222 }