29
29
#include "base/temp-buf.h"
31
31
#include "paint-funcs/paint-funcs.h"
32
#include "paint-funcs/scale-funcs.h"
33
34
#include "gimpbuffer.h"
36
static void gimp_buffer_class_init (GimpBufferClass *klass);
37
static void gimp_buffer_init (GimpBuffer *buffer);
39
static void gimp_buffer_finalize (GObject *object);
41
static gint64 gimp_buffer_get_memsize (GimpObject *object,
44
static void gimp_buffer_get_preview_size (GimpViewable *viewable,
50
static gboolean gimp_buffer_get_popup_size (GimpViewable *viewable,
56
static TempBuf * gimp_buffer_get_new_preview (GimpViewable *viewable,
59
static gchar * gimp_buffer_get_description (GimpViewable *viewable,
63
static GimpViewableClass *parent_class = NULL;
67
gimp_buffer_get_type (void)
69
static GType buffer_type = 0;
73
static const GTypeInfo buffer_info =
75
sizeof (GimpBufferClass),
77
(GBaseFinalizeFunc) NULL,
78
(GClassInitFunc) gimp_buffer_class_init,
79
NULL, /* class_finalize */
80
NULL, /* class_data */
83
(GInstanceInitFunc) gimp_buffer_init,
86
buffer_type = g_type_register_static (GIMP_TYPE_VIEWABLE,
37
static void gimp_buffer_finalize (GObject *object);
39
static gint64 gimp_buffer_get_memsize (GimpObject *object,
42
static gboolean gimp_buffer_get_size (GimpViewable *viewable,
45
static void gimp_buffer_get_preview_size (GimpViewable *viewable,
51
static gboolean gimp_buffer_get_popup_size (GimpViewable *viewable,
57
static TempBuf * gimp_buffer_get_new_preview (GimpViewable *viewable,
61
static gchar * gimp_buffer_get_description (GimpViewable *viewable,
65
G_DEFINE_TYPE (GimpBuffer, gimp_buffer, GIMP_TYPE_VIEWABLE)
67
#define parent_class gimp_buffer_parent_class
95
71
gimp_buffer_class_init (GimpBufferClass *klass)
98
74
GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
99
75
GimpViewableClass *viewable_class = GIMP_VIEWABLE_CLASS (klass);
101
parent_class = g_type_class_peek_parent (klass);
103
77
object_class->finalize = gimp_buffer_finalize;
105
79
gimp_object_class->get_memsize = gimp_buffer_get_memsize;
107
81
viewable_class->default_stock_id = "gtk-paste";
82
viewable_class->get_size = gimp_buffer_get_size;
108
83
viewable_class->get_preview_size = gimp_buffer_get_preview_size;
109
84
viewable_class->get_popup_size = gimp_buffer_get_popup_size;
110
85
viewable_class->get_new_preview = gimp_buffer_get_new_preview;
135
110
gimp_buffer_get_memsize (GimpObject *object,
136
111
gint64 *gui_size)
113
GimpBuffer *buffer = GIMP_BUFFER (object);
139
114
gint64 memsize = 0;
141
buffer = GIMP_BUFFER (object);
143
116
if (buffer->tiles)
144
117
memsize += tile_manager_get_memsize (buffer->tiles, FALSE);
124
gimp_buffer_get_size (GimpViewable *viewable,
128
GimpBuffer *buffer = GIMP_BUFFER (viewable);
130
*width = gimp_buffer_get_width (buffer);
131
*height = gimp_buffer_get_height (buffer);
151
137
gimp_buffer_get_preview_size (GimpViewable *viewable,
153
139
gboolean is_popup,
154
140
gboolean dot_for_dot,
158
144
GimpBuffer *buffer = GIMP_BUFFER (viewable);
227
214
bytes = tile_manager_bpp (buffer->tiles);
229
216
pixel_region_init (&srcPR, buffer->tiles,
235
222
if (buffer_height > height || buffer_width > width)
236
223
temp_buf = temp_buf_new (width, height, bytes, 0, 0, NULL);
238
225
temp_buf = temp_buf_new (buffer_width, buffer_height, bytes, 0, 0, NULL);
240
destPR.bytes = temp_buf->bytes;
243
destPR.w = temp_buf->width;
244
destPR.h = temp_buf->height;
245
destPR.rowstride = temp_buf->width * destPR.bytes;
246
destPR.data = temp_buf_data (temp_buf);
227
pixel_region_init_temp_buf (&destPR, temp_buf,
228
0, 0, temp_buf->width, temp_buf->height);
248
230
if (buffer_height > height || buffer_width > width)
273
255
GimpBuffer *buffer = GIMP_BUFFER (viewable);
278
return g_strdup_printf ("%s (%d x %d)",
257
return g_strdup_printf ("%s (%d × %d)",
279
258
GIMP_OBJECT (buffer)->name,
280
259
gimp_buffer_get_width (buffer),
281
260
gimp_buffer_get_height (buffer));
285
264
gimp_buffer_new (TileManager *tiles,
287
266
gboolean copy_pixels)
290
PixelRegion srcPR, destPR;
293
271
g_return_val_if_fail (tiles != NULL, NULL);
294
272
g_return_val_if_fail (name != NULL, NULL);
296
274
width = tile_manager_width (tiles);
297
275
height = tile_manager_height (tiles);
299
buffer = g_object_new (GIMP_TYPE_BUFFER, NULL);
301
gimp_object_set_name (GIMP_OBJECT (buffer), name);
277
buffer = g_object_new (GIMP_TYPE_BUFFER,
283
PixelRegion srcPR, destPR;
305
285
buffer->tiles = tile_manager_new (width, height,
306
286
tile_manager_bpp (tiles));
301
gimp_buffer_new_from_pixbuf (GdkPixbuf *pixbuf,
313
g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
314
g_return_val_if_fail (name != NULL, NULL);
316
width = gdk_pixbuf_get_width (pixbuf);
317
height = gdk_pixbuf_get_height (pixbuf);
318
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
319
channels = gdk_pixbuf_get_n_channels (pixbuf);
321
tiles = tile_manager_new (width, height, channels);
323
pixel_region_init (&destPR, tiles, 0, 0, width, height, TRUE);
325
for (y = 0, pixels = gdk_pixbuf_get_pixels (pixbuf);
327
y++, pixels += rowstride)
329
pixel_region_set_row (&destPR, 0, y, width, pixels);
332
return gimp_buffer_new (tiles, name, FALSE);
321
336
gimp_buffer_get_width (const GimpBuffer *buffer)
333
348
return tile_manager_height (buffer->tiles);
352
gimp_buffer_get_bytes (const GimpBuffer *buffer)
354
g_return_val_if_fail (GIMP_IS_BUFFER (buffer), 0);
356
return tile_manager_bpp (buffer->tiles);
360
gimp_buffer_get_image_type (const GimpBuffer *buffer)
362
g_return_val_if_fail (GIMP_IS_BUFFER (buffer), 0);
364
switch (tile_manager_bpp (buffer->tiles))
366
case 1: return GIMP_GRAY_IMAGE;
367
case 2: return GIMP_GRAYA_IMAGE;
368
case 3: return GIMP_RGB_IMAGE;
369
case 4: return GIMP_RGBA_IMAGE;