blend function urgently needed in kdelibs

Matthew Woehlke mw_triad at users.sourceforge.net
Tue May 22 02:14:32 BST 2007


Matt Newell wrote:
> On Monday 21 May 2007 17:09, Matthew Woehlke wrote:
>> Aaron J. Seigo wrote:
>>> we're talking about 2 color objects and 2 doubles, right? that shouldn't
>>> be a problem.
>> ok... sizeof(KColor) == sizeof(void*), it has a d-ptr (it NEEDS a
>> d-ptr!). sizeof(KColorPrivate) == 80 at least; more if/when more color
>> spaces are supported. So that's an overhead of at least 184 bytes...
>> because people think 3-6 args to a function is too many? That was the
>> question. :-) I'm willing to be convinced, but personally I'm not
>> bothered by 3-6 args...
> 
> Not that it makes a huge difference, but why not make the members private and 
> have a d-pointer set to 0 for now.  Then at least the object can be allocated 
> on the stack.  Also, if the class is KColor, then shouldn't it only hold the 
> actual color information?  It seem 80 bytes is overkill unless there's 
> something I'm missing.  

Well, let's see...
- if it is extended, there is a strange mix of private and d-ptr'd code
- the private members must remain forever (until KDE5)
- not totally relevant, but I was going to hang the colorspace 
conversion code off of KColorPrivate
- no implicit sharing (this might be a good idea...)

80 bytes comes from 10 channels of information: alpha, red, green, blue, 
hue, saturation(hsv), saturation(hsl/hsy), value, luminance, and luma. 
And that's with no CMYK support. Also it's 84 bytes (my bad), I will 
probably have a mask of which channels are valid to improve performance. 
You *could* cut it down to 36 as you pointed out, but then if you ever 
have code like this...

kc.red()
kd.hue()
kc.blue()
kc.hue()

...now you're converting back and forth all the time :-( and you only 
saved 48 bytes. (Also, with a d-ptr *now* we can tweak such 
implementation details without breaking BC :-))

Anyway this is all excellent stuff to consider, but it's also SC so we 
have Mondays until release to decide which is better :-).

-- 
Matthew
When in doubt, duct tape!





More information about the kde-core-devel mailing list