From kde-core-devel Sat Oct 28 16:36:17 2000 From: Rik Hemsley Date: Sat, 28 Oct 2000 16:36:17 +0000 To: kde-core-devel Subject: Re: Alpha channel support X-MARC-Message: https://marc.info/?l=kde-core-devel&m=97275123130524 On Fri, 27 Oct 2000 18:56:24 +0200 Antonio Larrosa wrote: > I'd like to work on that. > > I don't think we can do anything about using different methods, those > icons need a special handling as you have to get your background already > prepared when loading those icons an you have to reload the icons > whenever the background changes. > > To workaround about this, we can do something like this: > <(maybe) absurd idea> > implement a KTIcon class that you create for each icon passing to the > constructor the icon name and the QWidget object over which you'll > paint the icon. This way, instead of using QPainter::drawPixmap > to draw icons, we should use KTIcon::draw(QPainter &p); > which automatically would get the background of the widget, blend > the transparency, generate a cache index using QPixmap::serialNumber > on the background portion over which the icon is painted, and > paint the icon. > :) > > If you send me the code you already wrote I can continue > your work on it, if you have other things on your TODO. Ok, great. I'm not sure about the 'absurd idea' - it gets a little hairy when the widget changes size or moves w.r.t. the background, but it might be possible :) All that really needs to be done in kdelibs is to add a new method to KIconLoader called loadIconImage(), next to loadIcon(). You can probably make loadIcon() call loadIconImage(), which is what I did, though I had to remove the caching stuff, mainly because I was doing a quick hack. You can probably do it and still cache the pixmaps. I'll check my blending code into KImageEffect. You can then use KIconLoader::loadIconImage() and KImageEffect::blend() (or whatever I call it) to get the icon onto kicker. Cheers, Rik