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 /**
40  * GdkPixbufAnimation:
41  *
42  * An opaque struct representing an animation.
43  */
44 typedef struct _GdkPixbufAnimation GdkPixbufAnimation;
45 
46 
47 /**
48  * GdkPixbufAnimationIter:
49  *
50  * An opaque struct representing an iterator which points to a
51  * certain position in an animation.
52  */
53 typedef struct _GdkPixbufAnimationIter GdkPixbufAnimationIter;
54 
55 #define GDK_TYPE_PIXBUF_ANIMATION              (gdk_pixbuf_animation_get_type ())
56 #define GDK_PIXBUF_ANIMATION(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_PIXBUF_ANIMATION, GdkPixbufAnimation))
57 #define GDK_IS_PIXBUF_ANIMATION(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_PIXBUF_ANIMATION))
58 
59 #define GDK_TYPE_PIXBUF_ANIMATION_ITER              (gdk_pixbuf_animation_iter_get_type ())
60 #define GDK_PIXBUF_ANIMATION_ITER(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_PIXBUF_ANIMATION_ITER, GdkPixbufAnimationIter))
61 #define GDK_IS_PIXBUF_ANIMATION_ITER(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_PIXBUF_ANIMATION_ITER))
62 
63 GDK_PIXBUF_AVAILABLE_IN_ALL
64 GType               gdk_pixbuf_animation_get_type        (void) G_GNUC_CONST;
65 
66 #ifdef G_OS_WIN32
67 /* API/ABI compat, see gdk-pixbuf-core.h for details */
68 GDK_PIXBUF_AVAILABLE_IN_ALL
69 GdkPixbufAnimation *gdk_pixbuf_animation_new_from_file_utf8   (const char         *filename,
70                                                                GError            **error);
71 #endif
72 
73 GDK_PIXBUF_AVAILABLE_IN_ALL
74 GdkPixbufAnimation *gdk_pixbuf_animation_new_from_file   (const char         *filename,
75                                                           GError            **error);
76 GDK_PIXBUF_AVAILABLE_IN_2_28
77 GdkPixbufAnimation *gdk_pixbuf_animation_new_from_stream (GInputStream       *stream,
78                                                           GCancellable       *cancellable,
79                                                           GError            **error);
80 GDK_PIXBUF_AVAILABLE_IN_2_28
81 void                gdk_pixbuf_animation_new_from_stream_async (GInputStream *stream,
82                                                           GCancellable       *cancellable,
83                                                           GAsyncReadyCallback callback,
84                                                           gpointer            user_data);
85 GDK_PIXBUF_AVAILABLE_IN_2_28
86 GdkPixbufAnimation *gdk_pixbuf_animation_new_from_stream_finish (GAsyncResult*async_result,
87                                                           GError            **error);
88 GDK_PIXBUF_AVAILABLE_IN_2_28
89 GdkPixbufAnimation *gdk_pixbuf_animation_new_from_resource(const char        *resource_path,
90                                                           GError            **error);
91 
92 #ifndef GDK_PIXBUF_DISABLE_DEPRECATED
93 
94 GDK_PIXBUF_DEPRECATED_IN_2_0_FOR(g_object_ref)
95 GdkPixbufAnimation *gdk_pixbuf_animation_ref             (GdkPixbufAnimation *animation);
96 GDK_PIXBUF_DEPRECATED_IN_2_0_FOR(g_object_unref)
97 void                gdk_pixbuf_animation_unref           (GdkPixbufAnimation *animation);
98 #endif
99 
100 GDK_PIXBUF_AVAILABLE_IN_ALL
101 int                 gdk_pixbuf_animation_get_width       (GdkPixbufAnimation *animation);
102 GDK_PIXBUF_AVAILABLE_IN_ALL
103 int                 gdk_pixbuf_animation_get_height      (GdkPixbufAnimation *animation);
104 GDK_PIXBUF_AVAILABLE_IN_ALL
105 gboolean            gdk_pixbuf_animation_is_static_image  (GdkPixbufAnimation *animation);
106 GDK_PIXBUF_AVAILABLE_IN_ALL
107 GdkPixbuf          *gdk_pixbuf_animation_get_static_image (GdkPixbufAnimation *animation);
108 
109 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
110 GDK_PIXBUF_AVAILABLE_IN_ALL
111 GdkPixbufAnimationIter *gdk_pixbuf_animation_get_iter                        (GdkPixbufAnimation     *animation,
112                                                                               const GTimeVal         *start_time);
113 G_GNUC_END_IGNORE_DEPRECATIONS
114 
115 GDK_PIXBUF_AVAILABLE_IN_ALL
116 GType                   gdk_pixbuf_animation_iter_get_type                   (void) G_GNUC_CONST;
117 GDK_PIXBUF_AVAILABLE_IN_ALL
118 int                     gdk_pixbuf_animation_iter_get_delay_time             (GdkPixbufAnimationIter *iter);
119 GDK_PIXBUF_AVAILABLE_IN_ALL
120 GdkPixbuf              *gdk_pixbuf_animation_iter_get_pixbuf                 (GdkPixbufAnimationIter *iter);
121 GDK_PIXBUF_AVAILABLE_IN_ALL
122 gboolean                gdk_pixbuf_animation_iter_on_currently_loading_frame (GdkPixbufAnimationIter *iter);
123 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
124 GDK_PIXBUF_AVAILABLE_IN_ALL
125 gboolean                gdk_pixbuf_animation_iter_advance                    (GdkPixbufAnimationIter *iter,
126                                                                               const GTimeVal         *current_time);
127 G_GNUC_END_IGNORE_DEPRECATIONS
128 
129 
130 #ifdef GDK_PIXBUF_ENABLE_BACKEND
131 
132 
133 
134 /**
135  * GdkPixbufAnimationClass:
136  * @parent_class: the parent class
137  * @is_static_image: returns whether the given animation is just a static image.
138  * @get_static_image: returns a static image representing the given animation.
139  * @get_size: fills @width and @height with the frame size of the animation.
140  * @get_iter: returns an iterator for the given animation.
141  *
142  * Modules supporting animations must derive a type from
143  * #GdkPixbufAnimation, providing suitable implementations of the
144  * virtual functions.
145  */
146 typedef struct _GdkPixbufAnimationClass GdkPixbufAnimationClass;
147 
148 #define GDK_PIXBUF_ANIMATION_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_PIXBUF_ANIMATION, GdkPixbufAnimationClass))
149 #define GDK_IS_PIXBUF_ANIMATION_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_PIXBUF_ANIMATION))
150 #define GDK_PIXBUF_ANIMATION_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_PIXBUF_ANIMATION, GdkPixbufAnimationClass))
151 
152 /* Private part of the GdkPixbufAnimation structure */
153 struct _GdkPixbufAnimation {
154         GObject parent_instance;
155 
156 };
157 
158 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
159 struct _GdkPixbufAnimationClass {
160         GObjectClass parent_class;
161 
162         /*< public >*/
163 
164         gboolean                (*is_static_image)  (GdkPixbufAnimation *anim);
165 
166         GdkPixbuf*              (*get_static_image) (GdkPixbufAnimation *anim);
167 
168         void                    (*get_size) (GdkPixbufAnimation *anim,
169                                              int                 *width,
170                                              int                 *height);
171 
172         GdkPixbufAnimationIter* (*get_iter) (GdkPixbufAnimation *anim,
173                                              const GTimeVal     *start_time);
174 
175 };
176 G_GNUC_END_IGNORE_DEPRECATIONS
177 
178 
179 
180 /**
181  * GdkPixbufAnimationIterClass:
182  * @parent_class: the parent class
183  * @get_delay_time: returns the time in milliseconds that the current frame
184  *  should be shown.
185  * @get_pixbuf: returns the current frame.
186  * @on_currently_loading_frame: returns whether the current frame of @iter is
187  *  being loaded.
188  * @advance: advances the iterator to @current_time, possibly changing the
189  *  current frame.
190  *
191  * Modules supporting animations must derive a type from
192  * #GdkPixbufAnimationIter, providing suitable implementations of the
193  * virtual functions.
194  */
195 typedef struct _GdkPixbufAnimationIterClass GdkPixbufAnimationIterClass;
196 
197 #define GDK_PIXBUF_ANIMATION_ITER_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_PIXBUF_ANIMATION_ITER, GdkPixbufAnimationIterClass))
198 #define GDK_IS_PIXBUF_ANIMATION_ITER_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_PIXBUF_ANIMATION_ITER))
199 #define GDK_PIXBUF_ANIMATION_ITER_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_PIXBUF_ANIMATION_ITER, GdkPixbufAnimationIterClass))
200 
201 struct _GdkPixbufAnimationIter {
202         GObject parent_instance;
203 
204 };
205 
206 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
207 struct _GdkPixbufAnimationIterClass {
208         GObjectClass parent_class;
209 
210         /*< public >*/
211 
212         int        (*get_delay_time)   (GdkPixbufAnimationIter *iter);
213 
214         GdkPixbuf* (*get_pixbuf)       (GdkPixbufAnimationIter *iter);
215 
216         gboolean   (*on_currently_loading_frame) (GdkPixbufAnimationIter *iter);
217 
218         gboolean   (*advance)          (GdkPixbufAnimationIter *iter,
219                                         const GTimeVal         *current_time);
220 };
221 G_GNUC_END_IGNORE_DEPRECATIONS
222 
223 
224 GDK_PIXBUF_AVAILABLE_IN_ALL
225 GType               gdk_pixbuf_non_anim_get_type (void) G_GNUC_CONST;
226 GDK_PIXBUF_AVAILABLE_IN_ALL
227 GdkPixbufAnimation* gdk_pixbuf_non_anim_new (GdkPixbuf *pixbuf);
228 
229 #endif /* GDK_PIXBUF_ENABLE_BACKEND */
230 
231 G_END_DECLS
232 
233 #endif /* GDK_PIXBUF_ANIMATION_H */
234