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