| 1 | /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */ | 
| 2 | /* GdkPixbuf library - Animation support | 
| 3 |  * | 
| 4 |  * Copyright (C) 1999 The Free Software Foundation | 
| 5 |  * | 
| 6 |  * Authors: Mark Crichton <crichton@gimp.org> | 
| 7 |  *          Miguel de Icaza <miguel@gnu.org> | 
| 8 |  *          Federico Mena-Quintero <federico@gimp.org> | 
| 9 |  *          Havoc Pennington <hp@redhat.com> | 
| 10 |  * | 
| 11 |  * This library is free software; you can redistribute it and/or | 
| 12 |  * modify it under the terms of the GNU Lesser General Public | 
| 13 |  * License as published by the Free Software Foundation; either | 
| 14 |  * version 2 of the License, or (at your option) any later version. | 
| 15 |  * | 
| 16 |  * This library is distributed in the hope that it will be useful, | 
| 17 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 18 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
| 19 |  * Lesser General Public License for more details. | 
| 20 |  * | 
| 21 |  * You should have received a copy of the GNU Lesser General Public | 
| 22 |  * License along with this library; if not, see <http://www.gnu.org/licenses/>. | 
| 23 |  */ | 
| 24 |  | 
| 25 | #ifndef GDK_PIXBUF_ANIMATION_H | 
| 26 | #define GDK_PIXBUF_ANIMATION_H | 
| 27 |  | 
| 28 | #if defined(GDK_PIXBUF_DISABLE_SINGLE_INCLUDES) && !defined (GDK_PIXBUF_H_INSIDE) && !defined (GDK_PIXBUF_COMPILATION) | 
| 29 | #error "Only <gdk-pixbuf/gdk-pixbuf.h> can be included directly." | 
| 30 | #endif | 
| 31 |  | 
| 32 | #include <glib-object.h> | 
| 33 | #include <gdk-pixbuf/gdk-pixbuf-core.h> | 
| 34 |  | 
| 35 | G_BEGIN_DECLS | 
| 36 |  | 
| 37 | /* Animation support */ | 
| 38 |  | 
| 39 | typedef struct _GdkPixbufAnimation GdkPixbufAnimation; | 
| 40 |  | 
| 41 |  | 
| 42 | typedef struct _GdkPixbufAnimationIter GdkPixbufAnimationIter; | 
| 43 |  | 
| 44 | #define GDK_TYPE_PIXBUF_ANIMATION              (gdk_pixbuf_animation_get_type ()) | 
| 45 | #define GDK_PIXBUF_ANIMATION(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_PIXBUF_ANIMATION, GdkPixbufAnimation)) | 
| 46 | #define GDK_IS_PIXBUF_ANIMATION(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_PIXBUF_ANIMATION)) | 
| 47 |  | 
| 48 | #define GDK_TYPE_PIXBUF_ANIMATION_ITER              (gdk_pixbuf_animation_iter_get_type ()) | 
| 49 | #define GDK_PIXBUF_ANIMATION_ITER(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_PIXBUF_ANIMATION_ITER, GdkPixbufAnimationIter)) | 
| 50 | #define GDK_IS_PIXBUF_ANIMATION_ITER(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_PIXBUF_ANIMATION_ITER)) | 
| 51 |  | 
| 52 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 53 | GType               gdk_pixbuf_animation_get_type        (void) G_GNUC_CONST; | 
| 54 |  | 
| 55 | #ifdef G_OS_WIN32 | 
| 56 | /* API/ABI compat, see gdk-pixbuf-core.h for details */ | 
| 57 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 58 | GdkPixbufAnimation *gdk_pixbuf_animation_new_from_file_utf8   (const char         *filename, | 
| 59 |                                                                GError            **error); | 
| 60 | #endif | 
| 61 |  | 
| 62 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 63 | GdkPixbufAnimation *gdk_pixbuf_animation_new_from_file   (const char         *filename, | 
| 64 |                                                           GError            **error); | 
| 65 | GDK_PIXBUF_AVAILABLE_IN_2_28 | 
| 66 | GdkPixbufAnimation *gdk_pixbuf_animation_new_from_stream (GInputStream       *stream, | 
| 67 |                                                           GCancellable       *cancellable, | 
| 68 |                                                           GError            **error); | 
| 69 | GDK_PIXBUF_AVAILABLE_IN_2_28 | 
| 70 | void                gdk_pixbuf_animation_new_from_stream_async (GInputStream *stream, | 
| 71 |                                                           GCancellable       *cancellable, | 
| 72 |                                                           GAsyncReadyCallback callback, | 
| 73 |                                                           gpointer            user_data); | 
| 74 | GDK_PIXBUF_AVAILABLE_IN_2_28 | 
| 75 | GdkPixbufAnimation *gdk_pixbuf_animation_new_from_stream_finish (GAsyncResult*async_result, | 
| 76 |                                                           GError            **error); | 
| 77 | GDK_PIXBUF_AVAILABLE_IN_2_28 | 
| 78 | GdkPixbufAnimation *gdk_pixbuf_animation_new_from_resource(const char        *resource_path, | 
| 79 |                                                           GError            **error); | 
| 80 |  | 
| 81 | #ifndef GDK_PIXBUF_DISABLE_DEPRECATED | 
| 82 |  | 
| 83 | GDK_PIXBUF_DEPRECATED_IN_2_0_FOR(g_object_ref) | 
| 84 | GdkPixbufAnimation *gdk_pixbuf_animation_ref             (GdkPixbufAnimation *animation); | 
| 85 | GDK_PIXBUF_DEPRECATED_IN_2_0_FOR(g_object_unref) | 
| 86 | void                gdk_pixbuf_animation_unref           (GdkPixbufAnimation *animation); | 
| 87 | #endif | 
| 88 |  | 
| 89 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 90 | int                 gdk_pixbuf_animation_get_width       (GdkPixbufAnimation *animation); | 
| 91 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 92 | int                 gdk_pixbuf_animation_get_height      (GdkPixbufAnimation *animation); | 
| 93 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 94 | gboolean            gdk_pixbuf_animation_is_static_image  (GdkPixbufAnimation *animation); | 
| 95 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 96 | GdkPixbuf          *gdk_pixbuf_animation_get_static_image (GdkPixbufAnimation *animation); | 
| 97 |  | 
| 98 | G_GNUC_BEGIN_IGNORE_DEPRECATIONS | 
| 99 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 100 | GdkPixbufAnimationIter *gdk_pixbuf_animation_get_iter                        (GdkPixbufAnimation     *animation, | 
| 101 |                                                                               const GTimeVal         *start_time); | 
| 102 | G_GNUC_END_IGNORE_DEPRECATIONS | 
| 103 |  | 
| 104 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 105 | GType                   gdk_pixbuf_animation_iter_get_type                   (void) G_GNUC_CONST; | 
| 106 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 107 | int                     gdk_pixbuf_animation_iter_get_delay_time             (GdkPixbufAnimationIter *iter); | 
| 108 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 109 | GdkPixbuf              *gdk_pixbuf_animation_iter_get_pixbuf                 (GdkPixbufAnimationIter *iter); | 
| 110 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 111 | gboolean                gdk_pixbuf_animation_iter_on_currently_loading_frame (GdkPixbufAnimationIter *iter); | 
| 112 | G_GNUC_BEGIN_IGNORE_DEPRECATIONS | 
| 113 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 114 | gboolean                gdk_pixbuf_animation_iter_advance                    (GdkPixbufAnimationIter *iter, | 
| 115 |                                                                               const GTimeVal         *current_time); | 
| 116 | G_GNUC_END_IGNORE_DEPRECATIONS | 
| 117 |  | 
| 118 |  | 
| 119 | #ifdef GDK_PIXBUF_ENABLE_BACKEND | 
| 120 |  | 
| 121 |  | 
| 122 |  | 
| 123 | /** | 
| 124 |  * GdkPixbufAnimationClass: | 
| 125 |  * @parent_class: the parent class | 
| 126 |  * @is_static_image: returns whether the given animation is just a static image. | 
| 127 |  * @get_static_image: returns a static image representing the given animation. | 
| 128 |  * @get_size: fills @width and @height with the frame size of the animation. | 
| 129 |  * @get_iter: returns an iterator for the given animation. | 
| 130 |  *  | 
| 131 |  * Modules supporting animations must derive a type from  | 
| 132 |  * #GdkPixbufAnimation, providing suitable implementations of the  | 
| 133 |  * virtual functions. | 
| 134 |  */ | 
| 135 | typedef struct _GdkPixbufAnimationClass GdkPixbufAnimationClass; | 
| 136 |  | 
| 137 | #define GDK_PIXBUF_ANIMATION_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_PIXBUF_ANIMATION, GdkPixbufAnimationClass)) | 
| 138 | #define GDK_IS_PIXBUF_ANIMATION_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_PIXBUF_ANIMATION)) | 
| 139 | #define GDK_PIXBUF_ANIMATION_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_PIXBUF_ANIMATION, GdkPixbufAnimationClass)) | 
| 140 |  | 
| 141 | /* Private part of the GdkPixbufAnimation structure */ | 
| 142 | struct _GdkPixbufAnimation { | 
| 143 |         GObject parent_instance; | 
| 144 |  | 
| 145 | }; | 
| 146 |  | 
| 147 | G_GNUC_BEGIN_IGNORE_DEPRECATIONS | 
| 148 | struct _GdkPixbufAnimationClass { | 
| 149 |         GObjectClass parent_class; | 
| 150 |  | 
| 151 |         /*< public >*/ | 
| 152 |  | 
| 153 |         gboolean                (*is_static_image)  (GdkPixbufAnimation *animation); | 
| 154 |  | 
| 155 |         GdkPixbuf*              (*get_static_image) (GdkPixbufAnimation *animation); | 
| 156 |  | 
| 157 |         void                    (*get_size) (GdkPixbufAnimation *animation, | 
| 158 |                                              int                 *width, | 
| 159 |                                              int                 *height); | 
| 160 |  | 
| 161 |         GdkPixbufAnimationIter* (*get_iter) (GdkPixbufAnimation *animation, | 
| 162 |                                              const GTimeVal     *start_time); | 
| 163 | }; | 
| 164 | G_GNUC_END_IGNORE_DEPRECATIONS | 
| 165 |  | 
| 166 |  | 
| 167 |  | 
| 168 | /** | 
| 169 |  * GdkPixbufAnimationIterClass: | 
| 170 |  * @parent_class: the parent class | 
| 171 |  * @get_delay_time: returns the time in milliseconds that the current frame  | 
| 172 |  *  should be shown. | 
| 173 |  * @get_pixbuf: returns the current frame. | 
| 174 |  * @on_currently_loading_frame: returns whether the current frame of @iter is  | 
| 175 |  *  being loaded. | 
| 176 |  * @advance: advances the iterator to @current_time, possibly changing the  | 
| 177 |  *  current frame. | 
| 178 |  *  | 
| 179 |  * Modules supporting animations must derive a type from  | 
| 180 |  * #GdkPixbufAnimationIter, providing suitable implementations of the  | 
| 181 |  * virtual functions. | 
| 182 |  */ | 
| 183 | typedef struct _GdkPixbufAnimationIterClass GdkPixbufAnimationIterClass; | 
| 184 |  | 
| 185 | #define GDK_PIXBUF_ANIMATION_ITER_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_PIXBUF_ANIMATION_ITER, GdkPixbufAnimationIterClass)) | 
| 186 | #define GDK_IS_PIXBUF_ANIMATION_ITER_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_PIXBUF_ANIMATION_ITER)) | 
| 187 | #define GDK_PIXBUF_ANIMATION_ITER_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_PIXBUF_ANIMATION_ITER, GdkPixbufAnimationIterClass)) | 
| 188 |  | 
| 189 | struct _GdkPixbufAnimationIter { | 
| 190 |         GObject parent_instance; | 
| 191 |  | 
| 192 | }; | 
| 193 |  | 
| 194 | G_GNUC_BEGIN_IGNORE_DEPRECATIONS | 
| 195 | struct _GdkPixbufAnimationIterClass { | 
| 196 |         GObjectClass parent_class; | 
| 197 |  | 
| 198 |         /*< public >*/ | 
| 199 |  | 
| 200 |         int        (*get_delay_time)   (GdkPixbufAnimationIter *iter); | 
| 201 |  | 
| 202 |         GdkPixbuf* (*get_pixbuf)       (GdkPixbufAnimationIter *iter); | 
| 203 |  | 
| 204 |         gboolean   (*on_currently_loading_frame) (GdkPixbufAnimationIter *iter); | 
| 205 |  | 
| 206 |         gboolean   (*advance)          (GdkPixbufAnimationIter *iter, | 
| 207 |                                         const GTimeVal         *current_time); | 
| 208 | }; | 
| 209 | G_GNUC_END_IGNORE_DEPRECATIONS | 
| 210 |        | 
| 211 |  | 
| 212 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 213 | GType               gdk_pixbuf_non_anim_get_type (void) G_GNUC_CONST; | 
| 214 | GDK_PIXBUF_AVAILABLE_IN_ALL | 
| 215 | GdkPixbufAnimation* gdk_pixbuf_non_anim_new (GdkPixbuf *pixbuf); | 
| 216 |  | 
| 217 | #endif /* GDK_PIXBUF_ENABLE_BACKEND */ | 
| 218 |  | 
| 219 | G_END_DECLS | 
| 220 |  | 
| 221 | #endif /* GDK_PIXBUF_ANIMATION_H */ | 
| 222 |  |