Trying a new operator type

Carlos López González <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <CAF52pzLRvofKCYpy=G-n3fEG-3=QY+3UZdUHDFTSbiCSK8O6Nw@mail.gmail.com>
Hi,
I'm trying to create new operators for a custom drawing application,
using the current Cairo operators and its compositing abilities.
So far I want an operator that (using the same nomenclature than in
the tutorials):

A= source
B= destination
R= result
alpha= float value to be used


aR= (aA*-aB)*alpha+aB = aA*alpha + (1.0-alpha)*aB
xR=((xaA-xaB)*alpha+xaB)/aR = (xaA*alpha+(1.0-alpha)*xaB)/aR

So when alpha =1 then aR=aA and so xR = xA

It is like a mixture between SOURCE and OVER.

To try this I've written a code like this:
http://pastebin.com/x7hxmbBf

Notice that the section commented with "Draw the surface over itself
with 1.0-alpha"
is going to be part of a external function that would receive a
cairo_t* an the alpha value as arguments.
This function doesn't know anything about the state of cairo_t* and
the state of its surface.
In the most general case the cairo_t* has commands already added and
surface could come from
other portion of code that has drawn things on it. Like in the example code

The result I have when run that code is strange. The rectangle's alpha
outside the overlapping area is not 0.65 or near (due to rounding to
char).
Instead of that the rectangle's alpha in that area is 0.773.
The circle's alpha outside the overlapping area is not correct but has
sense (0.80).

So I have two questions:

1) What's the best way to perform the desired operations
2) Why the rectangle's alpha is wrong?

Thank you in advance.
Cheers!
--
Carlos
http://synfig.org
-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.