[cairo] Erasing A Line

Ivan Baldo ibaldo at adinet.com.uy
Thu Jun 28 19:37:51 PDT 2007


    Hello.

El 28/06/07 10:18, Allen escribió:
> Hi Ivan,
>
> Thanks for the hints.  & yes, I use Gtkmm.  I was thinking of "layers" 
> or "surfaces" but being so new I don't really know how to use the 
> effectively.  I'm checkout the "examples" right now.
>
> But it sounds like, from what you have said, that I use 1 surface for 
> the Background (bg) image, and the "apply" another surface for drawing 
> on, which would need to be "clear" or really transparent.  Then I draw 
> on the transparency.
>
> Is this correct?
>
    Yes!
    But if you have a background image, then almost certainly you will 
end having a Cairo Surface for it, so what you do after the user moves 
the mouse is this:
       - generate an expose event for the area occupied by the old line 
and the new line, 2 calls to gtk_widget_queue_draw_area (it will join 
both rectangles and generate only 1 expose event).
       - on the expose event of the DrawingArea or Image you draw with 
Cairo, first clip with gdk_cairo_region(cr, event->region); 
cairo_clip(cr), then draw first the background image, then the line at 
the place where the mouse is pointing.
    You really don't need transparency or real layers, just draw things 
in the correct order.

    Though beware: I consider myself a Cairo newbie still, maybe someone 
can enlighten us with a more clever approach?

    Hey, maybe you want to take a look at some canvas library, for 
example GooCanvas, you may find that using them things become more 
simpler or clear.

    Goodbye!

-- 
Ivan Baldo - ibaldo at adinet.com.uy - http://ibaldo.codigolibre.net/
ICQ 10215364 - Phone/FAX (598) (2) 613 3223.
Caldas 1781, Malvin, Montevideo, Uruguay, South America.
We believe that we are free, but in reality we are not! Are we?
Alternatives: ibaldo at codigolibre.net - http://go.to/ibaldo




More information about the cairo mailing list