[Bf-blender-cvs] [bb6b967] soc-2016-layer_manager: Make active layer a scene level property

Julian Eisel noreply at git.blender.org
Sat Jul 9 10:05:46 CEST 2016


Commit: bb6b967e0f3f9cf2ff92f4a4bd803580e3135cbf
Author: Julian Eisel
Date:   Fri Jul 8 23:50:32 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rBbb6b967e0f3f9cf2ff92f4a4bd803580e3135cbf

Make active layer a scene level property

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

M	source/blender/editors/space_layers/layers_ops.c
M	source/blender/editors/space_layers/space_layers.c
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesdna/DNA_space_types.h

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

diff --git a/source/blender/editors/space_layers/layers_ops.c b/source/blender/editors/space_layers/layers_ops.c
index c0145cf..8b75969 100644
--- a/source/blender/editors/space_layers/layers_ops.c
+++ b/source/blender/editors/space_layers/layers_ops.c
@@ -526,7 +526,7 @@ BLI_INLINE void layer_selection_set(SpaceLayers *slayer, LayerTile *tile, const
 {
 	if (enable) {
 		(tile->flag |= LAYERTILE_SELECTED);
-		slayer->active_item = tile->litem->index;
+		slayer->act_tree->active_layer = tile->litem;
 	}
 	else {
 		tile->flag &= ~LAYERTILE_SELECTED;
@@ -590,7 +590,7 @@ static int layer_select_invoke(bContext *C, wmOperator *op, const wmEvent *event
 			layers_selection_set_all(slayer, false);
 		}
 		if (extend) {
-			if (fill && layers_select_fill(slayer, slayer->active_item, tile->litem->index)) {
+			if (fill && layers_select_fill(slayer, slayer->act_tree->active_layer->index, tile->litem->index)) {
 				/* skip */
 			}
 			else {
@@ -662,16 +662,15 @@ static int layer_objects_assign_invoke(bContext *C, wmOperator *UNUSED(op), cons
 	Scene *scene = CTX_data_scene(C);
 	SpaceLayers *slayer = CTX_wm_space_layers(C);
 
-	if (slayer->active_item == -1)
+	if (!slayer->act_tree->active_layer)
 		return OPERATOR_CANCELLED;
 
-	LayerTreeItem *active = slayer->act_tree->items_all[slayer->active_item];
 	for (Base *base = scene->base.first; base; base = base->next) {
 		if (base->flag & SELECT) {
 			if (base->layer) {
 				BKE_objectlayer_base_unassign(base);
 			}
-			BKE_objectlayer_base_assign(base, active, false);
+			BKE_objectlayer_base_assign(base, slayer->act_tree->active_layer, false);
 		}
 	}
 
diff --git a/source/blender/editors/space_layers/space_layers.c b/source/blender/editors/space_layers/space_layers.c
index 9a3b788..2d98b33 100644
--- a/source/blender/editors/space_layers/space_layers.c
+++ b/source/blender/editors/space_layers/space_layers.c
@@ -57,7 +57,6 @@ static SpaceLink *layers_new(const bContext *C)
 
 	slayer = MEM_callocN(sizeof(SpaceLayers), __func__);
 	slayer->spacetype = SPACE_LAYERS;
-	slayer->active_item = -1;
 	layers_data_refresh(scene, slayer);
 
 	/* header */
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 09377c3..d601911 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -95,6 +95,9 @@ typedef struct LayerTree {
 	 * it's quite easy to break it. It could be supported but might lower performance a bit (maybe uber-picky).
 	 * XXX Check if this can be made safer */
 	struct LayerTreeItem **items_all;
+
+	/* The currently active layer of this tree */
+	struct LayerTreeItem *active_layer;
 } LayerTree;
 
 /**
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 5c4b8fe..1653a02 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -1384,11 +1384,8 @@ typedef struct SpaceLayers {
 	 * Use to get the LayerTile from a LayerTreeItem or for iterating over layer tree where order doesn't matter. */
 	struct GHash *tiles;
 
-	/* LayerTree.items_all index of last selected LayerTreeItem */
-	int active_item;
-
 	/* filtering (unused still) */
-	short filterflag, pad2;
+	short filterflag, pad2[3];
 	char filter_str[64]; /* MAX_NAME */
 } SpaceLayers;




More information about the Bf-blender-cvs mailing list