[cairo-bugs] [Bug 30003] surface change serial

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Fri Sep 3 21:43:52 PDT 2010


https://bugs.freedesktop.org/show_bug.cgi?id=30003

--- Comment #2 from Havoc Pennington <hp at pobox.com> 2010-09-03 21:43:50 PDT ---
I haven't seen Søren's proposal, link? The serial approach has the advantage of
being trivial to implement and zero-overhead...

Agree a signal is more flexible, but it would have to cover all changes, not
just "external" changes like mark_dirty does now.

how are you going to do signals in cairo? (have to say: once you're adding
signals the gobject reinvention is getting painful. signals are pretty hard,
too, if you handle all the weird reentrancy cases only Tim Janik can keep track
of)

A damage-based API could be nice. Would probably want to allow multiple damage
regions per surface, like

damage* damage_create(surface)
damage_reference(damage)
damage_destroy(damage)
region* damage_subtract(damage)

you could also put a callback here like:
 damage_set_notify(damage, callback, data, dnotify_data)

rather than trying to do a full "signal system" 

fwiw, this is overkill for the two cases I had in mind (detect when to copy
cairo pixels to gdkpixbuf pixels; detect when to update a server-side copy of
an image surface). The cache invalidation serial is totally fine for
cache-expiration purposes.

But I can imagine uses for damage too. For example an incremental image loader
could just hand a surface to something like GtkImage and have things magically
work. (GtkImage would get damage as new pixels arrived.)

-- 
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the cairo-bugs mailing list