[cairo] Blitting and sprites in Cairo

Chris Wilson chris at chris-wilson.co.uk
Wed May 15 02:07:17 PDT 2013

On Wed, May 15, 2013 at 10:47:31AM +0200, Donn wrote:
> How would you move a sprite across a background?
> The sprite could be:
> draw rectangle 32x32
> clip()
> push_group()
> draw sprite with cairo functions
> s=pop_group()
> But now:
> Draw background once
> loop start
>  Copy rect of bg where sprite is gonna go //How do you do this?
>   translate() //move sprite
>   set_source(s)
>   paint() //Draw the sprite
>  //Replace the backdrop
>  ?? //Some kind of set_source + paint again?
> loop
> That kind of jazz.

Assuming you've disposed off the background layer and only have the
frontbuffer left - yes, you would need to make a copy of the area to be
damaged (after undoing the old sprite and before applying the new).

However, since you will want to double-buffer the expose event at least,
you can use that as a composition step and not burn the sprites into the

Chris Wilson, Intel Open Source Technology Centre

More information about the cairo mailing list