[gimp] Add GimpProjectable::get_image_type()
- From: Michael Natterer <mitch src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] Add GimpProjectable::get_image_type()
- Date: Sat, 12 Sep 2009 17:27:24 +0000 (UTC)
commit 2af860e6a638099d46f71d62445c575f96b6513a
Author: Michael Natterer <mitch gimp org>
Date: Sat Sep 12 19:24:01 2009 +0200
Add GimpProjectable::get_image_type()
Needed because a group layer's projection can have a different type
than its image, at least at some pathologic moment during image type
conversion. But even if it didn't, it's cleaner this way anyway.
* app/core/gimpprojectable.[ch]: add the new vfunc plus public API.
* app/core/gimpprojection.c: use it instead of using the type of the
image returned by gimp_projectable_get_image(). The get_image()
function is now unused in the projection and only needs to stay
because the projection is also a GimpPickable.
* app/core/gimpgrouplayer.c: implement GimpProjectable::get_image_type().
app/core/gimpgrouplayer.c | 1 +
app/core/gimpimage.c | 13 +++++++++++++
app/core/gimpprojectable.c | 15 +++++++++++++++
app/core/gimpprojectable.h | 40 +++++++++++++++++++++-------------------
app/core/gimpprojection.c | 7 ++++++-
5 files changed, 56 insertions(+), 20 deletions(-)
---
diff --git a/app/core/gimpgrouplayer.c b/app/core/gimpgrouplayer.c
index 52aa62f..190b87f 100644
--- a/app/core/gimpgrouplayer.c
+++ b/app/core/gimpgrouplayer.c
@@ -191,6 +191,7 @@ static void
gimp_projectable_iface_init (GimpProjectableInterface *iface)
{
iface->get_image = (GimpImage * (*) (GimpProjectable *)) gimp_item_get_image;
+ iface->get_image_type = (GimpImageType (*) (GimpProjectable *)) gimp_drawable_type;
iface->get_offset = (void (*) (GimpProjectable*, gint*, gint*)) gimp_item_get_offset;
iface->get_size = (void (*) (GimpProjectable*, gint*, gint*)) gimp_viewable_get_size;
iface->get_graph = gimp_group_layer_get_graph;
diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c
index ce40c77..05c0e9f 100644
--- a/app/core/gimpimage.c
+++ b/app/core/gimpimage.c
@@ -167,6 +167,7 @@ static void gimp_image_projectable_flush (GimpProjectable *projectable
gboolean invalidate_preview);
static GeglNode * gimp_image_get_graph (GimpProjectable *projectable);
static GimpImage * gimp_image_get_image (GimpProjectable *projectable);
+static GimpImageType gimp_image_get_image_type (GimpProjectable *projectable);
static void gimp_image_mask_update (GimpDrawable *drawable,
gint x,
@@ -568,6 +569,7 @@ gimp_projectable_iface_init (GimpProjectableInterface *iface)
{
iface->flush = gimp_image_projectable_flush;
iface->get_image = gimp_image_get_image;
+ iface->get_image_type = gimp_image_get_image_type;
iface->get_size = (void (*) (GimpProjectable*, gint*, gint*)) gimp_image_get_size;
iface->get_graph = gimp_image_get_graph;
iface->invalidate_preview = (void (*) (GimpProjectable*)) gimp_viewable_invalidate_preview;
@@ -1212,6 +1214,17 @@ gimp_image_get_image (GimpProjectable *projectable)
return GIMP_IMAGE (projectable);
}
+static GimpImageType
+gimp_image_get_image_type (GimpProjectable *projectable)
+{
+ GimpImage *image = GIMP_IMAGE (projectable);
+ GimpImageType type;
+
+ type = GIMP_IMAGE_TYPE_FROM_BASE_TYPE (image->base_type);
+
+ return GIMP_IMAGE_TYPE_WITH_ALPHA (type);
+}
+
static GeglNode *
gimp_image_get_graph (GimpProjectable *projectable)
{
diff --git a/app/core/gimpprojectable.c b/app/core/gimpprojectable.c
index e732391..b9a05ff 100644
--- a/app/core/gimpprojectable.c
+++ b/app/core/gimpprojectable.c
@@ -164,6 +164,21 @@ gimp_projectable_get_image (GimpProjectable *projectable)
return NULL;
}
+GimpImageType
+gimp_projectable_get_image_type (GimpProjectable *projectable)
+{
+ GimpProjectableInterface *iface;
+
+ g_return_val_if_fail (GIMP_IS_PROJECTABLE (projectable), 0);
+
+ iface = GIMP_PROJECTABLE_GET_INTERFACE (projectable);
+
+ if (iface->get_image_type)
+ return iface->get_image_type (projectable);
+
+ return 0;
+}
+
void
gimp_projectable_get_offset (GimpProjectable *projectable,
gint *x,
diff --git a/app/core/gimpprojectable.h b/app/core/gimpprojectable.h
index 2ccf34d..5c3ec70 100644
--- a/app/core/gimpprojectable.h
+++ b/app/core/gimpprojectable.h
@@ -35,29 +35,30 @@ struct _GimpProjectableInterface
GTypeInterface base_iface;
/* signals */
- void (* invalidate) (GimpProjectable *projectable,
- gint x,
- gint y,
- gint width,
- gint height);
- void (* flush) (GimpProjectable *projectable,
- gboolean invalidate_preview);
- void (* structure_changed) (GimpProjectable *projectable);
+ void (* invalidate) (GimpProjectable *projectable,
+ gint x,
+ gint y,
+ gint width,
+ gint height);
+ void (* flush) (GimpProjectable *projectable,
+ gboolean invalidate_preview);
+ void (* structure_changed) (GimpProjectable *projectable);
/* virtual functions */
- GimpImage * (* get_image) (GimpProjectable *projectable);
- void (* get_offset) (GimpProjectable *projectable,
- gint *x,
- gint *y);
- void (* get_size) (GimpProjectable *projectable,
- gint *width,
- gint *height);
- GeglNode * (* get_graph) (GimpProjectable *projectable);
- void (* invalidate_preview) (GimpProjectable *projectable);
+ GimpImage * (* get_image) (GimpProjectable *projectable);
+ GimpImageType (* get_image_type) (GimpProjectable *projectable);
+ void (* get_offset) (GimpProjectable *projectable,
+ gint *x,
+ gint *y);
+ void (* get_size) (GimpProjectable *projectable,
+ gint *width,
+ gint *height);
+ GeglNode * (* get_graph) (GimpProjectable *projectable);
+ void (* invalidate_preview) (GimpProjectable *projectable);
/* legacy API virtual functions */
- GList * (* get_layers) (GimpProjectable *projectable);
- GList * (* get_channels) (GimpProjectable *projectable);
+ GList * (* get_layers) (GimpProjectable *projectable);
+ GList * (* get_channels) (GimpProjectable *projectable);
};
@@ -73,6 +74,7 @@ void gimp_projectable_flush (GimpProjectable *projectable
void gimp_projectable_structure_changed (GimpProjectable *projectable);
GimpImage * gimp_projectable_get_image (GimpProjectable *projectable);
+GimpImageType gimp_projectable_get_image_type (GimpProjectable *projectable);
void gimp_projectable_get_offset (GimpProjectable *projectable,
gint *x,
gint *y);
diff --git a/app/core/gimpprojection.c b/app/core/gimpprojection.c
index 8bf6a36..4eace41 100644
--- a/app/core/gimpprojection.c
+++ b/app/core/gimpprojection.c
@@ -283,7 +283,12 @@ gimp_projection_get_image (GimpPickable *pickable)
static GimpImageType
gimp_projection_get_image_type (GimpPickable *pickable)
{
- switch (gimp_image_base_type (gimp_projection_get_image (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:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]