What to do about KColor?

Andreas Pakulat apaku at gmx.de
Mon May 28 18:12:29 BST 2007

On 28.05.07 18:10:42, Thomas Zander wrote:
> On Monday 28 May 2007 16:37:37 Ingo Klöcker wrote:
> > > I expect people to adjust to the new concepts over the duration of
> > > the KDE4 lifetime and when they do, then it becomes weird when there
> > > are two conflicting ways to set the blending amount.
> >
> > Why conflicting? If I blend two colors with different alpha values a1
> > and a2 then I'd expect to get the blended color with alpha value
> > (a1+a2)/2 ( or (1-r) a1 + r a2 in the more general case ). Again,
> > that's what I as email application developer (and maybe also as
> > mathematician) would expect. I don't want to study color theory to
> > understand what a certain method I want to use actually does. No, I
> > want the method to do what I expect it to do. But I guess just as in
> > application usability you'll get ten different expectations if you ask
> > ten different people.
> We are talking about slightly different things here :)
> I agree with what you wrote above;  blending of 2 colors means take the 
> average (and that is exactly what the current one does).

It does? So If I do just

blendColor(Qt::white, Qt:red) 

I end up with a light red? (I didn't test yet, kdelibs is currently
building). I'm not a graphics expert but as far as I can see the
blendColors function just paints 2 rects using the two provided colors
on top of each other. So to get actual blending I need to set an alpha
value on the 2nd color. Or do I have to provide another composition mode
to get that result? Neither of these two is something that an app
developer should have to think about, IMHO. 

> The request you wrote in the previous email is to change the blend method 
> to include a double on how much blending is done.
> So, instead of using the exact difference between the two you are able to 
> state how strong the second color is applied to the first in returning 
> the result.
> And that makes sense in old colors, sure.  Where is starts to get a bit 
> weird is if you have a color A and a color B where color B has an alpha 
> of 50% and you call the blendColor with an additional 
> parameter 'strength' that you also set to 50%.
> The question that different people will probably answer differently is how 
> strong the second color will have to be applied. Is it 50%? Or is it 25% 
> (50% of the 50% that the color is already transparent). Or even something 
> different based on color theory which is not perfectly linear...

So the problem is if a given color has an alpha value set already right?
But that doesn't change with the above unless I misunderstand the
algorithm that is in kdelibs now. Because as far as I can see I still
need to set an alpha value, which would override the current alpha value
of the color. So the only solution to this (afaics) is to check wether
color B already has an alpha value set and then try to decide wether to
change that in a meaningful way or to leave it as is and just mix color
A with color B directly. I don't see why this would have to be rewritten
in every class that uses blendColor and how an app developer with no
graphics background should decide what exactly to do.

> > Whoever adds code to our core libraries should be aware of the fact
> > that this functionality will be used by people who are not necessarily
> > experts in the domain of this functionality. Functionality that does
> > require more than a slight understanding of the matter and some common
> > sense does IMO not belong into our core libraries but into some special
> > purpose libraries, like say Pigment. So please keep the color related
> > stuff in kdelibs dead simple and easily understandable for idiots like
> > me. Thanks!
> Fully agreed, and I was under the impression that this new method that was 
> committed this morning does exactly that.
> It blends 2 colors. Nothing more, nothing less.

As I said above, just doing blendColor(c1,c2) doesn't give you anything
but c2 (unless c2 already has an alpha set). Thats the main point,
calling that function what I want to end up is a mix of those two
colors, not the original c2, without any extra work.


Many changes of mind and mood; do not hesitate too long.

More information about the kde-core-devel mailing list