summaryrefslogtreecommitdiff
authorsandman <sandman>2002-09-30 10:12:36 (UTC)
committer sandman <sandman>2002-09-30 10:12:36 (UTC)
commitece83520d6bf5c481275a3d4a8e792749119fa08 (patch) (side-by-side diff)
treeeb1c8bfdc013a3aca46c4feaa2ff50e38e5d632b
parenta999acbcd1b8bc1715f2ad2dda6acedf423b89ea (diff)
downloadopie-ece83520d6bf5c481275a3d4a8e792749119fa08.zip
opie-ece83520d6bf5c481275a3d4a8e792749119fa08.tar.gz
opie-ece83520d6bf5c481275a3d4a8e792749119fa08.tar.bz2
Optimizations for the new busy indicator:
- QPixmaps are buffered now - real fix for the startTimer 100% cpu-load bug (was a typo)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/launcherview.cpp71
1 files changed, 36 insertions, 35 deletions
diff --git a/core/launcher/launcherview.cpp b/core/launcher/launcherview.cpp
index dbcb0d7..5daaeff 100644
--- a/core/launcher/launcherview.cpp
+++ b/core/launcher/launcherview.cpp
@@ -74,92 +74,93 @@ public:
~LauncherIconView()
{
#if 0 // debuggery
QListIterator<AppLnk> it(hidden);
AppLnk* l;
while ((l=it.current())) {
++it;
//qDebug("%p: hidden (should remove)",l);
}
#endif
}
- QPixmap* busyPixmap() const { return (QPixmap*)&bpm; }
+ QPixmap* busyPixmap() const { return (QPixmap*)&bpm[::abs(busystate)]; }
QIconViewItem* busyItem() const { return bsy; }
void setBigIcons( bool bi ) { bigIcns = bi; }
void updateCategoriesAndMimeTypes();
void doAutoScroll()
{
// We don't want rubberbanding (yet)
}
void setBusy(bool on)
{
QIconViewItem *c = on ? currentItem() : 0;
if ( bsy != c ) {
if ( bsy )
bsy-> repaint ( );
bsy = c;
if ( bsy ) {
+ busystate = 5;
+ for ( int i = 0; i <= 5; i++ )
+ bpm [i] = QPixmap ( );
+ timerEvent ( 0 );
busytimer = startTimer ( 150 );
- busystate = 50;
- // not sure what this startTimer is for, maybe i am just to tired. But
- // currently that causes 100% cpuload on app launch
- //startTimer ( 0 );
}
else
killTimer ( busytimer );
}
}
virtual void timerEvent ( QTimerEvent *te )
{
if ( !te || ( te-> timerId ( ) == busytimer )) {
if ( bsy ) {
- QPixmap *src = bsy-> QIconViewItem::pixmap();
- QImage img = src->convertToImage();
- QRgb* rgb;
- int count;
- if ( img.depth() == 32 ) {
- rgb = (QRgb*)img.bits();
- count = img.bytesPerLine()/sizeof(QRgb)*img.height();
- } else {
- rgb = img.colorTable();
- count = img.numColors();
- }
- int rc, gc, bc;
- int bs = ::abs ( busystate ) + 25;
- colorGroup().highlight().rgb( &rc, &gc, &bc );
- rc = rc * bs / 100;
- gc = gc * bs / 100;
- bc = bc * bs / 100;
+ if ( bpm [::abs(busystate)]. isNull ( )) {
+ QPixmap *src = bsy-> QIconViewItem::pixmap();
+ QImage img = src->convertToImage();
+ QRgb* rgb;
+ int count;
+ if ( img.depth() == 32 ) {
+ rgb = (QRgb*)img.bits();
+ count = img.bytesPerLine()/sizeof(QRgb)*img.height();
+ } else {
+ rgb = img.colorTable();
+ count = img.numColors();
+ }
+ int rc, gc, bc;
+ int bs = ::abs ( busystate * 10 ) + 25;
+ colorGroup().highlight().rgb( &rc, &gc, &bc );
+ rc = rc * bs / 100;
+ gc = gc * bs / 100;
+ bc = bc * bs / 100;
- for ( int r = 0; r < count; r++, rgb++ ) {
- int ri = rc + qRed ( *rgb ) * ( 100 - bs ) / 100;
- int gi = gc + qGreen ( *rgb ) * ( 100 - bs ) / 100;
- int bi = bc + qBlue ( *rgb ) * ( 100 - bs ) / 100;
- int ai = qAlpha ( *rgb );
- *rgb = qRgba ( ri, gi, bi, ai );
+ for ( int r = 0; r < count; r++, rgb++ ) {
+ int ri = rc + qRed ( *rgb ) * ( 100 - bs ) / 100;
+ int gi = gc + qGreen ( *rgb ) * ( 100 - bs ) / 100;
+ int bi = bc + qBlue ( *rgb ) * ( 100 - bs ) / 100;
+ int ai = qAlpha ( *rgb );
+ *rgb = qRgba ( ri, gi, bi, ai );
+ }
+
+ bpm [::abs(busystate)].convertFromImage( img );
}
-
- bpm.convertFromImage( img );
-
bsy-> repaint ( );
- busystate += 10;
- if ( busystate > 50 )
- busystate = -40;
+ busystate++;
+ if ( busystate > 5 )
+ busystate = -4;
}
}
}
bool inKeyEvent() const { return ike; }
void keyPressEvent(QKeyEvent* e)
{
ike = TRUE;
if ( e->key() == Key_F33 /* OK button */ || e->key() == Key_Space )
returnPressed(currentItem());
QIconView::keyPressEvent(e);
ike = FALSE;
@@ -302,25 +303,25 @@ protected:
private:
QList<AppLnk> hidden;
QDict<void> mimes;
QDict<void> cats;
SortMethod sortmeth;
QRegExp tf;
int cf;
QIconViewItem* bsy;
bool ike;
bool bigIcns;
QPixmap bgPixmap;
- QPixmap bpm;
+ QPixmap bpm [6];
QColor bgColor;
int busytimer;
int busystate;
};
bool LauncherView::bsy=FALSE;
void LauncherView::setBusy(bool on)
{
icons->setBusy(on);
}