[Bf-blender-cvs] [debd33c] soc-2016-layer_manager: Fix layer selection broken with collapsed groups

Julian Eisel noreply at git.blender.org
Thu Jun 30 20:53:41 CEST 2016


Commit: debd33c014f2f67274318b5ecefcedcf30e97f78
Author: Julian Eisel
Date:   Thu Jun 30 20:51:48 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rBdebd33c014f2f67274318b5ecefcedcf30e97f78

Fix layer selection broken with collapsed groups

===================================================================

M	source/blender/editors/space_layers/layers_intern.h
M	source/blender/editors/space_layers/layers_util.c

===================================================================

diff --git a/source/blender/editors/space_layers/layers_intern.h b/source/blender/editors/space_layers/layers_intern.h
index 738e69c..69bed17 100644
--- a/source/blender/editors/space_layers/layers_intern.h
+++ b/source/blender/editors/space_layers/layers_intern.h
@@ -43,6 +43,7 @@ void       layers_tilehash_delete(SpaceLayers *slayer);
 LayerTile *layers_tile_add(const struct SpaceLayers *slayer, struct LayerTreeItem *litem);
 void       layers_tile_remove(const struct SpaceLayers *slayer, LayerTile *tile, const bool remove_children);
 LayerTile *layers_tile_find_at_coordinate(struct SpaceLayers *slayer, const int co[2]);
+bool layers_tile_is_visible(SpaceLayers *slayer, LayerTile *tile);
 bool layers_any_selected(struct SpaceLayers *slayer);
 
 /* layers_ops.c */
diff --git a/source/blender/editors/space_layers/layers_util.c b/source/blender/editors/space_layers/layers_util.c
index f52e3f5..cc8dd89 100644
--- a/source/blender/editors/space_layers/layers_util.c
+++ b/source/blender/editors/space_layers/layers_util.c
@@ -111,6 +111,9 @@ LayerTile *layers_tile_find_at_coordinate(SpaceLayers *slayer, const int co[2])
 	BKE_LAYERTREE_ITER_START(slayer->act_tree, 0, i, litem)
 	{
 		LayerTile *tile = BLI_ghash_lookup(slayer->tiles, litem);
+		if (!layers_tile_is_visible(slayer, tile))
+			continue;
+
 		if (BLI_rcti_isect_y(&tile->rect, co[1])) {
 			return tile;
 		}
@@ -121,6 +124,21 @@ LayerTile *layers_tile_find_at_coordinate(SpaceLayers *slayer, const int co[2])
 	return NULL;
 }
 
+bool layers_tile_is_visible(SpaceLayers *slayer, LayerTile *tile)
+{
+	/* avoid ghash loockup */
+	if (!tile->litem->parent)
+		return true;
+
+	for (LayerTreeItem *parent = tile->litem->parent; parent; parent = parent->parent) {
+		LayerTile *parent_tile = BLI_ghash_lookup(slayer->tiles, parent);
+		if (parent_tile->flag & LAYERTILE_CLOSED) {
+			return false;
+		}
+	}
+	return true;
+}
+
 bool layers_any_selected(SpaceLayers *slayer)
 {
 	BKE_LAYERTREE_ITER_START(slayer->act_tree, 0, i, litem)




More information about the Bf-blender-cvs mailing list