[cairo] patch: quartz - fallback when source/mask has CAIRO_EXTEND_PAD and they are surface type

Andrea Canciani ranma42 at gmail.com
Fri Jul 27 00:41:44 PDT 2012


On Wed, Jul 25, 2012 at 11:41 PM, Henry (Yu) Song - SISA
<hsong at sisa.samsung.com> wrote:
> Hi, Andrea
>
> I did not see this commit from latest cairo snapshot.  Did I miss anything?

I meant to get it working without doing the fallback, but it involves
a nontrivial amount of work.
If we are to fallback in this case, we should actually fallback in all
the surface pattern cases (except when the transformation is an
integer translation), because Quartz has a different behavior from
cairo on the edge of the image.
This looks quite undesirable to me and iirc basically the same patch
was rejected by Mozilla for performance reasons.

I guess I could just push it before next stable cairo and then we work
from that towards the removal of the fallback and the correction of
edge behavior.

Jeff, Robert, any opinions on this?

Andrea

>
> Thanks
>
> Henry
> ________________________________________
> From: Andrea Canciani [ranma42 at gmail.com]
> Sent: Tuesday, July 24, 2012 2:39 AM
> To: Henry (Yu) Song - SISA
> Cc: cairo at cairographics.org
> Subject: Re: [cairo] patch: quartz - fallback when source/mask has CAIRO_EXTEND_PAD and they are surface type
>
> Thanks for your patches!
> I tested and pushed them (with minor whitespace and commit message changes).
>
> On Mon, Jul 23, 2012 at 9:35 PM, Henry (Yu) Song - SISA
> <hsong at sisa.samsung.com> wrote:
>> commit 20d3005bc98d0f75606c67175ec73a9ce3827e31
>> Author: Henry Song <henry.song at samsung.com>
>> Date:   Mon Jul 23 12:33:45 2012 -0700
>>
>>     quartz:  quartz does not handle CAIRO_EXTEND_PAD, let's fallback
>
> I had posted a patch to do the same, but the Mozilla guys did not want
> the fallback to happen.
>
>>
>> diff --git a/src/cairo-quartz-surface.c b/src/cairo-quartz-surface.c
>> index 28bdae6..471c95d 100644
>> --- a/src/cairo-quartz-surface.c
>> +++ b/src/cairo-quartz-surface.c
>> @@ -1139,6 +1139,15 @@ _cairo_quartz_setup_state (cairo_quartz_drawing_state_t *state,
>>      state->cgDrawContext = NULL;
>>      state->cgMaskContext = NULL;
>>
>> +    /* FIXME: ideally, we should use CIImage's CIAffineClamp for
>> +       CAIRO_EXTEND_PAD
>> +     */
>
> A related issue happens for repeated images, which are interpolated in
> the inside but not across the image edges.
> Maybe both can be fixed using CIImage... but is it possible to use it
> without using Objective-C?
> Another thing I wanted to look into was modifying the dataprovider to
> handle repeat/pad.
>
>> +    if ((composite->source_pattern.base.type == CAIRO_PATTERN_TYPE_SURFACE &&
>> +        composite->source_pattern.base.extend == CAIRO_EXTEND_PAD) ||
>> +       (composite->mask_pattern.base.type == CAIRO_PATTERN_TYPE_SURFACE &&
>> +        composite->mask_pattern.base.extend == CAIRO_EXTEND_PAD))
>> +       return CAIRO_INT_STATUS_UNSUPPORTED;
>> +
>>      status = _cairo_surface_clipper_set_clip (&surface->clipper, clip);
>>      if (unlikely (status))
>>         return status;
>> --
>> cairo mailing list
>> cairo at cairographics.org
>> http://lists.cairographics.org/mailman/listinfo/cairo


More information about the cairo mailing list