1 /* -*- Mode: C; tab-width: 3; indent-tabs-mode: nil; c-basic-offset: 3 -*- */ 2 3 /* 4 * GImageView 5 * Copyright (C) 2001 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.h,v 1.37 2004/03/07 11:53:30 makeinu Exp $ 22 */ 23 24 #ifndef __GIMV_IMAGE_H__ 25 #define __GIMV_IMAGE_H__ 26 27 #include "gimageview.h" 28 29 30 #define GIMV_TYPE_IMAGE (gimv_image_get_type ()) 31 #define GIMV_IMAGE(obj) (GTK_CHECK_CAST (obj, gimv_image_get_type (), GimvImage)) 32 #define GIMV_IMAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST (klass, gimv_image_get_type, GimvImageClass)) 33 #define GIMV_IS_IMAGE(obj) (GTK_CHECK_TYPE (obj, gimv_image_get_type ())) 34 #define GIMV_IS_IMAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GIMV_TYPE_IMAGE)) 35 36 37 typedef struct GimvImage_Tag GimvImage; 38 typedef struct GimvImagePriv_Tag GimvImagePriv; 39 typedef struct GimvImageClass_Tag GimvImageClass; 40 41 42 typedef enum { 43 GIMV_IMAGE_NORMAL_MODE = 0, 44 GIMV_IMAGE_DISSOLVE_MODE = 1, 45 GIMV_IMAGE_MULTIPLY_MODE = 3, 46 GIMV_IMAGE_SCREEN_MODE = 4, 47 GIMV_IMAGE_OVERLAY_MODE = 5, 48 GIMV_IMAGE_DIFFERENCE_MODE = 6, 49 GIMV_IMAGE_ADDITION_MODE = 7, 50 GIMV_IMAGE_SUBTRACT_MODE = 8, 51 GIMV_IMAGE_DARKEN_ONLY_MODE = 9, 52 GIMV_IMAGE_LIGHTEN_ONLY_MODE = 10, 53 GIMV_IMAGE_HUE_MODE = 11, 54 GIMV_IMAGE_SATURATION_MODE = 12, 55 GIMV_IMAGE_COLOR_MODE = 13, 56 GIMV_IMAGE_VALUE_MODE = 14 57 } GimvImageLayerMode; 58 59 60 typedef enum { 61 GIMV_IMAGE_VECTOR_FLAGS = 1 << 0 62 } GimvImageFlags; 63 64 65 typedef enum { 66 GIMV_IMAGE_ROTATE_0, 67 GIMV_IMAGE_ROTATE_90, 68 GIMV_IMAGE_ROTATE_180, 69 GIMV_IMAGE_ROTATE_270 70 } GimvImageAngle; 71 72 73 struct GimvImage_Tag 74 { 75 GtkObject parent; 76 77 gpointer image; /* library dependent data */ 78 GimvImageAngle angle; 79 GimvImageFlags flags; 80 GHashTable *comments; 81 gpointer additional_data; 82 }; 83 84 85 struct GimvImageClass_Tag 86 { 87 GtkObjectClass parent_class; 88 }; 89 90 91 GtkType gimv_image_get_type (void); 92 93 const gchar *gimv_image_detect_type_by_ext (const gchar *str); 94 GimvImage *gimv_image_load_file (const gchar *filename, 95 gboolean animation); 96 gboolean gimv_image_save_file (GimvImage *image, 97 const gchar *filename, 98 const gchar *format); 99 GimvImage *gimv_image_create_from_data (guchar *data, 100 gint width, 101 gint height, 102 gboolean alpha); 103 GimvImage *gimv_image_create_from_drawable (GdkDrawable *drawable, 104 gint x, 105 gint y, 106 gint width, 107 gint height); 108 GimvImage *gimv_image_rotate_90 (GimvImage *src_image, 109 gboolean counter_clockwise); 110 GimvImage *gimv_image_rotate_180 (GimvImage *src_image); 111 GimvImage *gimv_image_rotate (GimvImage *src_image, 112 GimvImageAngle abs_angle); 113 void gimv_image_get_pixmap_and_mask (GimvImage *image, 114 GdkPixmap **pixmap_return, 115 GdkBitmap **mask_return); 116 void gimv_image_free_pixmap_and_mask (GdkPixmap *pixmap, 117 GdkBitmap *mask); 118 gboolean gimv_image_is_scalable (GimvImage *image); 119 GimvImage *gimv_image_scale (GimvImage *src_image, 120 gint width, 121 gint height); 122 GimvImage *gimv_image_scale_down (GimvImage *image, 123 int dest_width, 124 int dest_height); 125 void gimv_image_scale_get_pixmap (GimvImage *src_image, 126 gint width, 127 gint height, 128 GdkPixmap **pixmap_return, 129 GdkBitmap **mask_return); 130 void gimv_image_get_size (GimvImage *image, 131 gint *width, 132 gint *height); 133 gint gimv_image_width (GimvImage *image); 134 gint gimv_image_height (GimvImage *image); 135 gint gimv_image_depth (GimvImage *image); 136 gboolean gimv_image_has_alpha (GimvImage *image); 137 gboolean gimv_image_can_alpha (GimvImage *image); 138 gint gimv_image_rowstride (GimvImage *image); 139 guchar *gimv_image_get_pixels (GimvImage *image); 140 const gchar *gimv_image_get_comment (GimvImage *image, 141 const gchar *key); 142 GimvImage *gimv_image_ref (GimvImage *image); 143 void gimv_image_unref (GimvImage *image); 144 145 /* protected */ 146 GimvImage *gimv_image_new (void); 147 void gimv_image_add_comment (GimvImage *image, 148 const gchar *key, 149 const gchar *val); 150 void gimv_image_free_comments (GimvImage *image); 151 152 153 /* FIXME!! */ 154 gboolean gimv_image_add_layer (guchar *buffer, 155 gint width, 156 gint left, 157 gint components, 158 gint pass, 159 GimvImageLayerMode mode, 160 guchar *rgbbuffer); 161 GimvImage *gimv_image_rgba2rgb (GimvImage *image, 162 gint bg_red, 163 gint bg_green, 164 gint bg_blue, 165 gboolean ignore_alpha); 166 /* END FIXME!! */ 167 168 #endif /* __GIMV_IMAGE_H__ */ 169