[cairo] Copying of clip not working for PS surface
Vladimir Vukicevic
vladimir at pobox.com
Tue Oct 23 11:12:48 PDT 2007
Fred Kiefer wrote:
> About a week ago I send this mail to the mailing list, but didn't get
> any reply.
> What I need to know is if this is intended behaviour and if there is a
> way to work around it. If necessary, I could provide you with some
> background information, where and why the copying of the current clip
> range is needed in GNUstep (We use it to work around another limitation
> of cairo).
Unfortunately this is unimplemented behaviour -- the
copy_clip_rectangle_list stuff only works when the backend implements
clipping using a region. The PS surface uses the path directly, and so
even if the path is a rectangle, it's still stored as a path and not a
region. There are two things that could be done here:
1) copy_clip_rectangle_list could try to do a tessellation and a region
extraction if the clip that's set is a path;
2) implement a copy_clip_path (since we already have a public way to
represent a path).
- Vlad
>
> Cheers,
> Fred
>
>
> Fred Kiefer wrote:
>> Is anybody able to explain why the following short program gives the
>> output "Cairo status 'clip region not representable in desired format'
>> in copy clip"?
>>
>> The same operations work fine when applied to an image surface.
>>
>> Thank you
>> Fred
>>
>> #include <stddef.h>
>> #include <cairo.h>
>> #include <cairo-ps.h>
>>
>> int
>> main (int argc, const char *argv[])
>> {
>> cairo_status_t status;
>> cairo_t *ct;
>> cairo_surface_t *surface;
>> cairo_rectangle_list_t *clip_rects;
>>
>> surface = cairo_ps_surface_create("test.ps", 100, 100);
>> status = cairo_surface_status(surface);
>> if (status != CAIRO_STATUS_SUCCESS)
>> {
>> printf("Cairo status '%s' for surface\n",
>> cairo_status_to_string(status));
>> return 0;
>> }
>>
>> ct = cairo_create(surface);
>> status = cairo_status(ct);
>> if (status != CAIRO_STATUS_SUCCESS)
>> {
>> printf("Cairo status '%s' for context\n",
>> cairo_status_to_string(status));
>> return 0;
>> }
>>
>> cairo_rectangle(ct, 10, 10, 80, 80);
>> cairo_clip(ct);
>> clip_rects = cairo_copy_clip_rectangle_list(ct);
>> status = clip_rects->status;
>> if (status != CAIRO_STATUS_SUCCESS)
>> {
>> printf("Cairo status '%s' in copy clip\n",
>> cairo_status_to_string(status));
>> }
>>
>> cairo_destroy(ct);
>> cairo_surface_destroy(surface);
>> }
>>
>>
>>
>> _______________________________________________
>> cairo mailing list
>> cairo at cairographics.org
>> http://lists.cairographics.org/mailman/listinfo/cairo
>>
>
> _______________________________________________
> cairo mailing list
> cairo at cairographics.org
> http://lists.cairographics.org/mailman/listinfo/cairo
>
More information about the cairo
mailing list