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