[gimp] app: fix gimp_value_set_drawable(), set_channel()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: fix gimp_value_set_drawable(), set_channel()
- Date: Fri, 26 Jul 2019 10:16:38 +0000 (UTC)
commit 6cb8a59501faf57bf9edff238adc83cb5384906e
Author: Michael Natterer <mitch gimp org>
Date: Fri Jul 26 12:14:25 2019 +0200
app: fix gimp_value_set_drawable(), set_channel()
to work like gimp_value_set_item() and properly deal with all sorts of
drawables and channels.
app/core/gimpparamspecs.c | 52 ++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 49 insertions(+), 3 deletions(-)
---
diff --git a/app/core/gimpparamspecs.c b/app/core/gimpparamspecs.c
index 17ba6a54e3..cc66b8595e 100644
--- a/app/core/gimpparamspecs.c
+++ b/app/core/gimpparamspecs.c
@@ -913,7 +913,9 @@ gimp_value_set_item (GValue *value,
{
g_return_if_fail (item == NULL || GIMP_IS_ITEM (item));
- /* FIXME remove hack as soon as bug #375864 is fixed */
+ /* This could all be less messy, see
+ * https://gitlab.gnome.org/GNOME/glib/issues/66
+ */
if (GIMP_VALUE_HOLDS_ITEM_ID (value))
{
@@ -1067,7 +1069,34 @@ gimp_value_set_drawable (GValue *value,
g_return_if_fail (GIMP_VALUE_HOLDS_DRAWABLE_ID (value));
g_return_if_fail (drawable == NULL || GIMP_IS_DRAWABLE (drawable));
- value->data[0].v_int = drawable ? gimp_item_get_ID (GIMP_ITEM (drawable)) : -1;
+ if (GIMP_VALUE_HOLDS_DRAWABLE_ID (value))
+ {
+ value->data[0].v_int = drawable ? gimp_item_get_ID (GIMP_ITEM (drawable)) : -1;
+ }
+ else if (GIMP_VALUE_HOLDS_LAYER_ID (value) &&
+ (drawable == NULL || GIMP_IS_LAYER (drawable)))
+ {
+ gimp_value_set_layer (value, GIMP_LAYER (drawable));
+ }
+ else if (GIMP_VALUE_HOLDS_CHANNEL_ID (value) &&
+ (drawable == NULL || GIMP_IS_CHANNEL (drawable)))
+ {
+ gimp_value_set_channel (value, GIMP_CHANNEL (drawable));
+ }
+ else if (GIMP_VALUE_HOLDS_LAYER_MASK_ID (value) &&
+ (drawable == NULL || GIMP_IS_LAYER_MASK (drawable)))
+ {
+ gimp_value_set_layer_mask (value, GIMP_LAYER_MASK (drawable));
+ }
+ else if (GIMP_VALUE_HOLDS_SELECTION_ID (value) &&
+ (drawable == NULL || GIMP_IS_SELECTION (drawable)))
+ {
+ gimp_value_set_selection (value, GIMP_SELECTION (drawable));
+ }
+ else
+ {
+ g_return_if_reached ();
+ }
}
@@ -1297,7 +1326,24 @@ gimp_value_set_channel (GValue *value,
g_return_if_fail (GIMP_VALUE_HOLDS_CHANNEL_ID (value));
g_return_if_fail (channel == NULL || GIMP_IS_CHANNEL (channel));
- value->data[0].v_int = channel ? gimp_item_get_ID (GIMP_ITEM (channel)) : -1;
+ if (GIMP_VALUE_HOLDS_CHANNEL_ID (value))
+ {
+ value->data[0].v_int = channel ? gimp_item_get_ID (GIMP_ITEM (channel)) : -1;
+ }
+ else if (GIMP_VALUE_HOLDS_LAYER_MASK_ID (value) &&
+ (channel == NULL || GIMP_IS_LAYER_MASK (channel)))
+ {
+ gimp_value_set_layer_mask (value, GIMP_LAYER_MASK (channel));
+ }
+ else if (GIMP_VALUE_HOLDS_SELECTION_ID (value) &&
+ (channel == NULL || GIMP_IS_SELECTION (channel)))
+ {
+ gimp_value_set_selection (value, GIMP_SELECTION (channel));
+ }
+ else
+ {
+ g_return_if_reached ();
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]