[gimp] app: add GimpPickable::get_babl_format()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add GimpPickable::get_babl_format()
- Date: Wed, 2 May 2012 16:04:27 +0000 (UTC)
commit f05de34cd65976584a5fe8cb12d1a444eadc1c0a
Author: Michael Natterer <mitch gimp org>
Date: Sat Mar 17 15:21:11 2012 +0100
app: add GimpPickable::get_babl_format()
app/core/gimpdrawable.c | 13 +++++----
app/core/gimpimagemap.c | 62 ++++++++++++++++++++++++++-------------------
app/core/gimppickable.c | 15 +++++++++++
app/core/gimppickable.h | 28 +++++++++++---------
app/core/gimpprojection.c | 41 ++++++++++++++++++++++++------
5 files changed, 106 insertions(+), 53 deletions(-)
---
diff --git a/app/core/gimpdrawable.c b/app/core/gimpdrawable.c
index 97435f7..51251aa 100644
--- a/app/core/gimpdrawable.c
+++ b/app/core/gimpdrawable.c
@@ -269,12 +269,13 @@ gimp_drawable_init (GimpDrawable *drawable)
static void
gimp_drawable_pickable_iface_init (GimpPickableInterface *iface)
{
- iface->get_image = (GimpImage * (*) (GimpPickable *pickable)) gimp_item_get_image;
- iface->get_image_type = (GimpImageType (*) (GimpPickable *pickable)) gimp_drawable_type;
- iface->get_bytes = (gint (*) (GimpPickable *pickable)) gimp_drawable_bytes;
- iface->get_buffer = (GeglBuffer * (*) (GimpPickable *pickable)) gimp_drawable_get_read_buffer;
- iface->get_tiles = (TileManager * (*) (GimpPickable *pickable)) gimp_drawable_get_tiles;
- iface->get_pixel_at = gimp_drawable_get_pixel_at;
+ iface->get_image = (GimpImage * (*) (GimpPickable *pickable)) gimp_item_get_image;
+ iface->get_babl_format = (const Babl * (*) (GimpPickable *pickable)) gimp_drawable_get_babl_format;
+ iface->get_image_type = (GimpImageType (*) (GimpPickable *pickable)) gimp_drawable_type;
+ iface->get_bytes = (gint (*) (GimpPickable *pickable)) gimp_drawable_bytes;
+ iface->get_buffer = (GeglBuffer * (*) (GimpPickable *pickable)) gimp_drawable_get_read_buffer;
+ iface->get_tiles = (TileManager * (*) (GimpPickable *pickable)) gimp_drawable_get_tiles;
+ iface->get_pixel_at = gimp_drawable_get_pixel_at;
}
static void
diff --git a/app/core/gimpimagemap.c b/app/core/gimpimagemap.c
index 528f58a..2295a15 100644
--- a/app/core/gimpimagemap.c
+++ b/app/core/gimpimagemap.c
@@ -97,30 +97,31 @@ struct _GimpImageMap
static void gimp_image_map_pickable_iface_init (GimpPickableInterface *iface);
-static void gimp_image_map_dispose (GObject *object);
-static void gimp_image_map_finalize (GObject *object);
-
-static GimpImage * gimp_image_map_get_image (GimpPickable *pickable);
-static GimpImageType gimp_image_map_get_image_type (GimpPickable *pickable);
-static gint gimp_image_map_get_bytes (GimpPickable *pickable);
-static GeglBuffer * gimp_image_map_get_buffer (GimpPickable *pickable);
-static TileManager * gimp_image_map_get_tiles (GimpPickable *pickable);
-static gboolean gimp_image_map_get_pixel_at (GimpPickable *pickable,
- gint x,
- gint y,
- guchar *pixel);
+static void gimp_image_map_dispose (GObject *object);
+static void gimp_image_map_finalize (GObject *object);
+
+static GimpImage * gimp_image_map_get_image (GimpPickable *pickable);
+static const Babl * gimp_image_map_get_babl_format (GimpPickable *pickable);
+static GimpImageType gimp_image_map_get_image_type (GimpPickable *pickable);
+static gint gimp_image_map_get_bytes (GimpPickable *pickable);
+static GeglBuffer * gimp_image_map_get_buffer (GimpPickable *pickable);
+static TileManager * gimp_image_map_get_tiles (GimpPickable *pickable);
+static gboolean gimp_image_map_get_pixel_at (GimpPickable *pickable,
+ gint x,
+ gint y,
+ guchar *pixel);
static void gimp_image_map_update_undo_tiles
- (GimpImageMap *image_map,
- const GeglRectangle *rect);
-static gboolean gimp_image_map_do (GimpImageMap *image_map);
-static void gimp_image_map_data_written (GObject *operation,
- const GeglRectangle *extent,
- GimpImageMap *image_map);
+ (GimpImageMap *image_map,
+ const GeglRectangle *rect);
+static gboolean gimp_image_map_do (GimpImageMap *image_map);
+static void gimp_image_map_data_written (GObject *operation,
+ const GeglRectangle *extent,
+ GimpImageMap *image_map);
static void gimp_image_map_cancel_any_idle_jobs
- (GimpImageMap *image_map);
+ (GimpImageMap *image_map);
static void gimp_image_map_kill_any_idle_processors
- (GimpImageMap *image_map);
+ (GimpImageMap *image_map);
G_DEFINE_TYPE_WITH_CODE (GimpImageMap, gimp_image_map, GIMP_TYPE_OBJECT,
@@ -153,12 +154,13 @@ gimp_image_map_class_init (GimpImageMapClass *klass)
static void
gimp_image_map_pickable_iface_init (GimpPickableInterface *iface)
{
- iface->get_image = gimp_image_map_get_image;
- iface->get_image_type = gimp_image_map_get_image_type;
- iface->get_bytes = gimp_image_map_get_bytes;
- iface->get_buffer = gimp_image_map_get_buffer;
- iface->get_tiles = gimp_image_map_get_tiles;
- iface->get_pixel_at = gimp_image_map_get_pixel_at;
+ iface->get_image = gimp_image_map_get_image;
+ iface->get_babl_format = gimp_image_map_get_babl_format;
+ iface->get_image_type = gimp_image_map_get_image_type;
+ iface->get_bytes = gimp_image_map_get_bytes;
+ iface->get_buffer = gimp_image_map_get_buffer;
+ iface->get_tiles = gimp_image_map_get_tiles;
+ iface->get_pixel_at = gimp_image_map_get_pixel_at;
}
static void
@@ -262,6 +264,14 @@ gimp_image_map_get_image (GimpPickable *pickable)
return gimp_pickable_get_image (GIMP_PICKABLE (image_map->drawable));
}
+static const Babl *
+gimp_image_map_get_babl_format (GimpPickable *pickable)
+{
+ GimpImageMap *image_map = GIMP_IMAGE_MAP (pickable);
+
+ return gimp_pickable_get_babl_format (GIMP_PICKABLE (image_map->drawable));
+}
+
static GimpImageType
gimp_image_map_get_image_type (GimpPickable *pickable)
{
diff --git a/app/core/gimppickable.c b/app/core/gimppickable.c
index 052e816..7f2d051 100644
--- a/app/core/gimppickable.c
+++ b/app/core/gimppickable.c
@@ -106,6 +106,21 @@ gimp_pickable_get_image_type (GimpPickable *pickable)
return -1;
}
+const Babl *
+gimp_pickable_get_babl_format (GimpPickable *pickable)
+{
+ GimpPickableInterface *pickable_iface;
+
+ g_return_val_if_fail (GIMP_IS_PICKABLE (pickable), -1);
+
+ pickable_iface = GIMP_PICKABLE_GET_INTERFACE (pickable);
+
+ if (pickable_iface->get_babl_format)
+ return pickable_iface->get_babl_format (pickable);
+
+ return NULL;
+}
+
gint
gimp_pickable_get_bytes (GimpPickable *pickable)
{
diff --git a/app/core/gimppickable.h b/app/core/gimppickable.h
index 96f4e2e..195a314 100644
--- a/app/core/gimppickable.h
+++ b/app/core/gimppickable.h
@@ -35,19 +35,20 @@ struct _GimpPickableInterface
GTypeInterface base_iface;
/* virtual functions */
- void (* flush) (GimpPickable *pickable);
- GimpImage * (* get_image) (GimpPickable *pickable);
- GimpImageType (* get_image_type) (GimpPickable *pickable);
- gint (* get_bytes) (GimpPickable *pickable);
- GeglBuffer * (* get_buffer) (GimpPickable *pickable);
- TileManager * (* get_tiles) (GimpPickable *pickable);
- gboolean (* get_pixel_at) (GimpPickable *pickable,
- gint x,
- gint y,
- guchar *pixel);
- gint (* get_opacity_at) (GimpPickable *pickable,
- gint x,
- gint y);
+ void (* flush) (GimpPickable *pickable);
+ GimpImage * (* get_image) (GimpPickable *pickable);
+ const Babl * (* get_babl_format) (GimpPickable *pickable);
+ GimpImageType (* get_image_type) (GimpPickable *pickable);
+ gint (* get_bytes) (GimpPickable *pickable);
+ GeglBuffer * (* get_buffer) (GimpPickable *pickable);
+ TileManager * (* get_tiles) (GimpPickable *pickable);
+ gboolean (* get_pixel_at) (GimpPickable *pickable,
+ gint x,
+ gint y,
+ guchar *pixel);
+ gint (* get_opacity_at) (GimpPickable *pickable,
+ gint x,
+ gint y);
};
@@ -55,6 +56,7 @@ GType gimp_pickable_interface_get_type (void) G_GNUC_CONST;
void gimp_pickable_flush (GimpPickable *pickable);
GimpImage * gimp_pickable_get_image (GimpPickable *pickable);
+const Babl * gimp_pickable_get_babl_format (GimpPickable *pickable);
GimpImageType gimp_pickable_get_image_type (GimpPickable *pickable);
gint gimp_pickable_get_bytes (GimpPickable *pickable);
GeglBuffer * gimp_pickable_get_buffer (GimpPickable *pickable);
diff --git a/app/core/gimpprojection.c b/app/core/gimpprojection.c
index 92ea946..1f1863c 100644
--- a/app/core/gimpprojection.c
+++ b/app/core/gimpprojection.c
@@ -61,6 +61,7 @@ static gint64 gimp_projection_get_memsize (GimpObject *objec
static void gimp_projection_pickable_flush (GimpPickable *pickable);
static GimpImage * gimp_projection_get_image (GimpPickable *pickable);
+static const Babl * gimp_projection_get_babl_format (GimpPickable *pickable);
static GimpImageType gimp_projection_get_image_type (GimpPickable *pickable);
static gint gimp_projection_get_bytes (GimpPickable *pickable);
static GeglBuffer * gimp_projection_get_buffer (GimpPickable *pickable);
@@ -161,14 +162,15 @@ gimp_projection_init (GimpProjection *proj)
static void
gimp_projection_pickable_iface_init (GimpPickableInterface *iface)
{
- iface->flush = gimp_projection_pickable_flush;
- iface->get_image = gimp_projection_get_image;
- iface->get_image_type = gimp_projection_get_image_type;
- iface->get_bytes = gimp_projection_get_bytes;
- iface->get_buffer = gimp_projection_get_buffer;
- iface->get_tiles = gimp_projection_get_tiles;
- iface->get_pixel_at = gimp_projection_get_pixel_at;
- iface->get_opacity_at = gimp_projection_get_opacity_at;
+ iface->flush = gimp_projection_pickable_flush;
+ iface->get_image = gimp_projection_get_image;
+ iface->get_babl_format = gimp_projection_get_babl_format;
+ iface->get_image_type = gimp_projection_get_image_type;
+ iface->get_bytes = gimp_projection_get_bytes;
+ iface->get_buffer = gimp_projection_get_buffer;
+ iface->get_tiles = gimp_projection_get_tiles;
+ iface->get_pixel_at = gimp_projection_get_pixel_at;
+ iface->get_opacity_at = gimp_projection_get_opacity_at;
}
static void
@@ -292,6 +294,29 @@ gimp_projection_get_image (GimpPickable *pickable)
return gimp_projectable_get_image (proj->projectable);
}
+static const Babl *
+gimp_projection_get_babl_format (GimpPickable *pickable)
+{
+ GimpProjection *proj = GIMP_PROJECTION (pickable);
+ GimpImageType type;
+
+ type = gimp_projectable_get_image_type (proj->projectable);
+
+ switch (GIMP_IMAGE_TYPE_BASE_TYPE (type))
+ {
+ case GIMP_RGB:
+ case GIMP_INDEXED:
+ return babl_format ("RGBA u8");
+
+ case GIMP_GRAY:
+ return babl_format ("YA u8");
+ }
+
+ g_assert_not_reached ();
+
+ return NULL;
+}
+
static GimpImageType
gimp_projection_get_image_type (GimpPickable *pickable)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]