[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