author | sandman <sandman> | 2002-09-30 23:06:39 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-09-30 23:06:39 (UTC) |
commit | 37a8266f4a32d07a27d453897febf1f25963a4d0 (patch) (unidiff) | |
tree | 38f41045da51b99b76a69b42beaafd0124564cc9 | |
parent | 6fdaab436d4fa72b3de06a1a9cf9be0bd964677a (diff) | |
download | opie-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)
-rw-r--r-- | core/launcher/launcherview.cpp | 53 |
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 | } |