[cairo] Copying of clip not working for PS surface

Behdad Esfahbod behdad at behdad.org
Thu Oct 25 21:27:11 PDT 2007


On Thu, 2007-10-25 at 14:31 -0400, Fred Kiefer wrote:
> Thank you for this explanation. The copy_clip_path would just do the
> trick for us, if you could at that to an upcoming cairo release, then
> the GNUstep cairo based code could be fully working.

This is already in TODO:

 • cairo_copy_clip() and cairo_copy_clip_flat()

http://lists.freedesktop.org/archives/cairo/2007-April/010520.html


Cheers,

behdad


> Cheers,
> Fred
> 
> 
> Vladimir Vukicevic wrote:
> > 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
-- 
behdad
http://behdad.org/

"Those who would give up Essential Liberty to purchase a little
 Temporary Safety, deserve neither Liberty nor Safety."
        -- Benjamin Franklin, 1759





More information about the cairo mailing list