GdkPixbufAnimation
- From: Havoc Pennington <hp redhat com>
- To: gtk-devel-list gnome org
- Cc: federico ximian com, lewing ximian com
- Subject: GdkPixbufAnimation
- Date: 26 Apr 2001 20:12:44 -0400
Hi,
Trying to implement animation support for GtkImage, discovered that
GdkPixbufAnimation has some issues.
Minor problem:
gdk_pixbuf_frame_get_delay_time() is documented to return
milliseconds, which would make sense, but actually it
returns hundredths. I think this is an implementation bug
not a docs bug. But e.g. GtkHTML already works around it
by doing a * 10 on the return value. Can't be fixed
in stable. :-(
Large meta-problem:
The API is too GIF-specific. I just implemented a better-abstracted
API:
GdkPixbufAnimationIter *gdk_pixbuf_animation_get_iter (GdkPixbufAnimation *animation);
void gdk_pixbuf_animation_iter_free (GdkPixbufAnimationIter *iter);
gboolean gdk_pixbuf_animation_iter_next (GdkPixbufAnimationIter *iter);
int gdk_pixbuf_animation_iter_get_delay_time (GdkPixbufAnimationIter *iter);
GdkPixbuf *gdk_pixbuf_animation_iter_get_pixbuf (GdkPixbufAnimationIter *iter);
i.e. for each step you display the returned pixbuf, wait the delay
time, call _next(), display the next pixbuf.
The iterator may continue infinitely, or _next() may eventually
return FALSE.
This takes the frame actions, etc. into account, and just maintains
one or two pixbufs of the "current graphic to display" with
frames composited appropriately.
API bug:
You can't actually render GIFs properly, especially if you read the docs.
GtkFrameAction is supposed to correspond to the GIF actions:
a) leave graphic as it was with this frame rendered
b) restore area used by this frame to the background color
c) restore area used by this frame to what was in that area previously
However the GtkFrameAction docs say:
GDK_PIXBUF_FRAME_RETAIN The previous image should remain displayed,
and will potentially be occluded by the new frame.
GDK_PIXBUF_FRAME_DISPOSE The animation will be reverted to the state
before the frame was shown.
GDK_PIXBUF_FRAME_REVERT The animation will be reverted to the first frame.
These are reported for a), b), c) respectively.
So the documented behavior of _REVERT does not exist in GIF, the
documented behavior of _DISPOSE should be done when io-gif actually
reports _REVERT, and the correct GIF behavior b) is not possible
to implement because you can't get the background color from the
GIF file.
Suggested course of action in unstable branch:
Add the iterator API, so we can support MNG and stuff, and so
using the API isn't insanely difficult
Deprecate the rest of the API; lose the whole GdkPixbufFrame
deal. Actually, consider just removing this API, because
any code using it is broken, the API is not usable.
Fix the GIF loader to return the background color and other
necessary info, but this is all internal, we wouldn't
expose frames, bg color, etc. via the API.
Suggested course of action in stable branch:
I believe we are fucked, but maybe someone has an idea.
Havoc
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]