Bug 612931 - Moving individual layer in layer group not possible with Move Tool in 'pick a layer' mode
When using GimpPickable::get_opacity_at(), don't consider group layers as having content.
This commit is contained in:
@ -65,6 +65,7 @@ struct _GimpGroupLayerPrivate
|
|||||||
|
|
||||||
|
|
||||||
static void gimp_projectable_iface_init (GimpProjectableInterface *iface);
|
static void gimp_projectable_iface_init (GimpProjectableInterface *iface);
|
||||||
|
static void gimp_pickable_iface_init (GimpPickableInterface *iface);
|
||||||
|
|
||||||
static void gimp_group_layer_finalize (GObject *object);
|
static void gimp_group_layer_finalize (GObject *object);
|
||||||
static void gimp_group_layer_set_property (GObject *object,
|
static void gimp_group_layer_set_property (GObject *object,
|
||||||
@ -135,6 +136,11 @@ static void gimp_group_layer_convert_type (GimpDrawable *drawabl
|
|||||||
|
|
||||||
static GeglNode * gimp_group_layer_get_graph (GimpProjectable *projectable);
|
static GeglNode * gimp_group_layer_get_graph (GimpProjectable *projectable);
|
||||||
static GList * gimp_group_layer_get_layers (GimpProjectable *projectable);
|
static GList * gimp_group_layer_get_layers (GimpProjectable *projectable);
|
||||||
|
static gint gimp_group_layer_get_opacity_at
|
||||||
|
(GimpPickable *pickable,
|
||||||
|
gint x,
|
||||||
|
gint y);
|
||||||
|
|
||||||
|
|
||||||
static void gimp_group_layer_child_add (GimpContainer *container,
|
static void gimp_group_layer_child_add (GimpContainer *container,
|
||||||
GimpLayer *child,
|
GimpLayer *child,
|
||||||
@ -168,7 +174,10 @@ static void gimp_group_layer_proj_update (GimpProjection *proj,
|
|||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (GimpGroupLayer, gimp_group_layer, GIMP_TYPE_LAYER,
|
G_DEFINE_TYPE_WITH_CODE (GimpGroupLayer, gimp_group_layer, GIMP_TYPE_LAYER,
|
||||||
G_IMPLEMENT_INTERFACE (GIMP_TYPE_PROJECTABLE,
|
G_IMPLEMENT_INTERFACE (GIMP_TYPE_PROJECTABLE,
|
||||||
gimp_projectable_iface_init))
|
gimp_projectable_iface_init)
|
||||||
|
G_IMPLEMENT_INTERFACE (GIMP_TYPE_PICKABLE,
|
||||||
|
gimp_pickable_iface_init))
|
||||||
|
|
||||||
|
|
||||||
#define parent_class gimp_group_layer_parent_class
|
#define parent_class gimp_group_layer_parent_class
|
||||||
|
|
||||||
@ -229,6 +238,12 @@ gimp_projectable_iface_init (GimpProjectableInterface *iface)
|
|||||||
iface->get_channels = NULL;
|
iface->get_channels = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_pickable_iface_init (GimpPickableInterface *iface)
|
||||||
|
{
|
||||||
|
iface->get_opacity_at = gimp_group_layer_get_opacity_at;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_group_layer_init (GimpGroupLayer *group)
|
gimp_group_layer_init (GimpGroupLayer *group)
|
||||||
{
|
{
|
||||||
@ -871,6 +886,15 @@ gimp_group_layer_get_layers (GimpProjectable *projectable)
|
|||||||
return gimp_item_stack_get_item_iter (GIMP_ITEM_STACK (private->children));
|
return gimp_item_stack_get_item_iter (GIMP_ITEM_STACK (private->children));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gint
|
||||||
|
gimp_group_layer_get_opacity_at (GimpPickable *pickable,
|
||||||
|
gint x,
|
||||||
|
gint y)
|
||||||
|
{
|
||||||
|
/* Only consider child layers as having content */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* public functions */
|
/* public functions */
|
||||||
|
|
||||||
|
@ -133,8 +133,7 @@ gimp_image_pick_text_layer (const GimpImage *image,
|
|||||||
|
|
||||||
return GIMP_TEXT_LAYER (layer);
|
return GIMP_TEXT_LAYER (layer);
|
||||||
}
|
}
|
||||||
else if (! GIMP_IS_GROUP_LAYER (layer) &&
|
else if (gimp_pickable_get_opacity_at (GIMP_PICKABLE (layer),
|
||||||
gimp_pickable_get_opacity_at (GIMP_PICKABLE (layer),
|
|
||||||
x - off_x, y - off_y) > 63)
|
x - off_x, y - off_y) > 63)
|
||||||
{
|
{
|
||||||
/* a normal layer covers any possible text layers below,
|
/* a normal layer covers any possible text layers below,
|
||||||
|
Reference in New Issue
Block a user