[Rd] Question about grid.group compositing operators in cairo

Panagiotis Skintzos @|gm@p| @end|ng |rom po@teo@net
Tue Sep 27 21:04:34 CEST 2022


Here is the code again in text:


src <- rectGrob(2/3, 1/3, width=.6, height=.6, gp=gpar(lwd = 5, 
fill=rgb(0, 0, 0.9, 0.4)))
dst <- rectGrob(1/3, 2/3, width=.6, height=.6, gp=gpar(lwd = 5, 
fill=rgb(0.7, 0, 0, 0.8)))

svg("cairo.in.svg", width = 5, height = 5)
grid.group(src, "in", dst)
dev.off()



On 27/9/22 04:44, Paul Murrell wrote:
>
> Could you also please send me the SVG code that your device is 
> generating for your example.  Thanks!
>
> Paul
>
> On 27/09/22 08:50, Paul Murrell wrote:
>> Hi
>>
>> Thanks for the report.  It certainly sounds like I have done 
>> something stupid :)  For my debugging and testing could you please 
>> share the R code from your tests ?  Thanks!
>>
>> Paul
>>
>> On 26/09/22 10:27, Panagiotis Skintzos wrote:
>>> Hello,
>>>
>>> I'm trying to update ggiraph package in graphic engine v15 
>>> (currently we support up to v14).
>>>
>>> I've implemented the group operators and when I compare the outputs 
>>> of ggiraph::dsvg with the outputs of svg/png, I noticed some weird 
>>> results.
>>>
>>> Specifically, some operators in cairo (in, out, dest.in, dest.atop) 
>>> give strange output, when any source element in the group has a 
>>> stroke color defined.
>>>
>>> I attach three example images, where two stroked rectangles are used 
>>> as source (right) and destination (left).
>>>
>>> cairo.over.png shows the result of the over operator in cairo
>>>
>>> cairo.in.png shows the result of the in operator in cairo
>>>
>>> dsvg.in.png shows the result of the in operator in dsvg
>>>
>>>
>>> You can see the difference between cairo.in.png and dsvg.in.png. I 
>>> found out why I get different results:
>>>
>>> In dsvg implementation there is one drawing operation: Draw the 
>>> source element, as whole (fill and stroke) over the destination 
>>> element (using feComposite filter)
>>>
>>> In cairo implementation though there are two operations: Apply the 
>>> fill on source and draw over the destination and then apply the 
>>> stroke and draw over the result of the previous operation.
>>>
>>> I'm not sure if this is intentional or not. Shouldn't the source 
>>> element being drawn first as whole (fill and stroke with over 
>>> operator) and then apply the group operator and draw it over the 
>>> destination? It would seem more logical that way.
>>>
>>>
>>> Thanks,
>>>
>>> Panagiotis
>>>
>>>
>>> ______________________________________________
>>> R-devel using r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>



More information about the R-devel mailing list