1 /* -*- Mode: C; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 3 -*- */
2 
3 /*
4  * GImageView
5  * Copyright (C) 2001-2002 Takuro Ashie
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  *
21  * $Id: gimv_image_loader.h,v 1.7 2004/09/21 08:44:32 makeinu Exp $
22  */
23 
24 #ifndef __GIMV_IMAGE_LOADER_H__
25 #define __GIMV_IMAGE_LOADER_H__
26 
27 #ifdef HAVE_CONFIG_H
28 #  include "config.h"
29 #endif
30 
31 #include <gtk/gtkobject.h>
32 
33 #include "gimv_image.h"
34 #include "gimv_image_info.h"
35 #include "gimv_io.h"
36 
37 
38 #define GIMV_TYPE_IMAGE_LOADER            (gimv_image_loader_get_type ())
39 #define GIMV_IMAGE_LOADER(obj)            (GTK_CHECK_CAST (obj, gimv_image_loader_get_type (), GimvImageLoader))
40 #define GIMV_IMAGE_LOADER_CLASS(klass)    (GTK_CHECK_CLASS_CAST (klass, gimv_image_loader_get_type, GimvImageLoaderClass))
41 #define GIMV_IS_IMAGE_LOADER(obj)         (GTK_CHECK_TYPE (obj, gimv_image_loader_get_type ()))
42 #define GIMV_IS_IMAGE_LOADER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GIMV_TYPE_IMAGE_LOADER))
43 
44 
45 typedef struct GimvImageLoader_Tag      GimvImageLoader;
46 typedef struct GimvImageLoaderPriv_Tag  GimvImageLoaderPriv;
47 typedef struct GimvImageLoaderClass_Tag GimvImageLoaderClass;
48 
49 
50 typedef enum {
51    GIMV_IMAGE_LOADER_LOAD_NORMAL,
52    GIMV_IMAGE_LOADER_LOAD_THUMBNAIL
53 } GimvImageLoaderLoadType;
54 
55 
56 struct GimvImageLoader_Tag
57 {
58    GtkObject parent;
59 
60    GimvImageInfo *info;
61    GTimer        *timer;
62 
63    GimvImageLoaderPriv *priv;
64 };
65 
66 
67 struct GimvImageLoaderClass_Tag
68 {
69    GtkObjectClass parent;
70 
71    void (*load_start)        (GimvImageLoader *loader);
72    void (*progress_update)   (GimvImageLoader *loader);
73    void (*load_end)          (GimvImageLoader *loader);
74 };
75 
76 
77 #define GIMV_IMAGE_LOADER_IF_VERSION 2
78 
79 /*
80  *  for plugin
81  */
82 typedef enum {
83    GIMV_IMAGE_LOADER_PRIORITY_HIGH          = -255,
84    GIMV_IMAGE_LOADER_PRIORITY_CAN_CANCEL    = -127,
85    GIMV_IMAGE_LOADER_PRIORITY_DEFAULT       = 0,
86    GIMV_IMAGE_LOADER_PRIORITY_CANNOT_CANCEL = 127,
87    GIMV_IMAGE_LOADER_PRIORITY_LOW           = 255
88 } GimvImageLoaderPriority;
89 
90 typedef struct GimvImageLoaderPlugin_Tag
91 {
92    const guint32           if_version; /* plugin interface version */
93    const gchar * const     id;
94    GimvImageLoaderPriority priority_hint;
95 
96    const gchar       *(*check_type)    (GimvImageLoader *loader,
97                                         gpointer         data);
98    gboolean          *(*get_info)      (GimvImageLoader *loader,
99                                         gpointer         data);
100    GimvImage         *(*loader)        (GimvImageLoader *loader,
101                                         gpointer         data);
102 } GimvImageLoaderPlugin;
103 
104 
105 /*
106  *  used by client
107  */
108 GtkType      gimv_image_loader_get_type          (void);
109 GimvImageLoader
110             *gimv_image_loader_new               (void);
111 GimvImageLoader
112             *gimv_image_loader_new_with_image_info (GimvImageInfo *info);
113 GimvImageLoader
114             *gimv_image_loader_new_with_file_name (const gchar *filename);
115 GimvImageLoader
116             *gimv_image_loader_ref               (GimvImageLoader *loader);
117 void         gimv_image_loader_unref             (GimvImageLoader *loader);
118 void         gimv_image_loader_set_image_info    (GimvImageLoader *loader,
119                                                   GimvImageInfo   *info);
120 
121 
122 void         gimv_image_loader_set_gio           (GimvImageLoader *loader,
123                                                   GimvIO          *gio);
124 gboolean     gimv_image_loader_set_as_animation  (GimvImageLoader *loader,
125                                                   gboolean         animation);
126 gboolean     gimv_image_loader_set_load_type     (GimvImageLoader *loader,
127                                                   GimvImageLoaderLoadType type);
128 gboolean     gimv_image_loader_set_scale         (GimvImageLoader *loader,
129                                                   gfloat           w_scale,
130                                                   gfloat           h_scale);
131 /*
132  *  Loaders are not always follow this request strictly.
133  *  This request is for decreasing load of loading if possible.
134  */
135 gboolean     gimv_image_loader_set_size_request  (GimvImageLoader *loader,
136                                                   gint             max_width,
137                                                   gint             max_height,
138                                                   gboolean         keep_aspect);
139 void         gimv_image_loader_load              (GimvImageLoader *loader);
140 void         gimv_image_loader_load_start        (GimvImageLoader *loader);
141 void         gimv_image_loader_load_stop         (GimvImageLoader *loader);
142 gboolean     gimv_image_loader_is_loading        (GimvImageLoader *loader);
143 GimvImage   *gimv_image_loader_get_image         (GimvImageLoader *loader);
144 void         gimv_image_loader_unref_image       (GimvImageLoader *loader);
145 
146 
147 /*
148  *  used by loader module
149  */
150 GimvIO      *gimv_image_loader_get_gio           (GimvImageLoader *loader);
151 const gchar *gimv_image_loader_get_path          (GimvImageLoader *loader);
152 GimvImageLoaderLoadType
153              gimv_image_loader_get_load_type     (GimvImageLoader *loader);
154 gboolean     gimv_image_loader_load_as_animation (GimvImageLoader *loader);
155 gboolean     gimv_image_loader_get_scale         (GimvImageLoader *loader,
156                                                   gfloat *width_scale_ret,
157                                                   gfloat *height_scale_ret);
158 gboolean     gimv_image_loader_get_size_request  (GimvImageLoader *loader,
159                                                   gint            *max_width,
160                                                   gint            *max_height,
161                                                   gboolean        *keep_aspect);
162 gboolean     gimv_image_loader_progress_update   (GimvImageLoader *loader);
163 
164 /*
165  *  for plugin loader
166  */
167 gboolean     gimv_image_loader_plugin_regist     (const gchar *plugin_name,
168                                                   const gchar *module_name,
169                                                   gpointer     impl,
170                                                   gint         size);
171 
172 #endif /* __GIMV_GIMV_IMAGE_LOADER_H__ */
173