[Bf-blender-cvs] [6282b33] soc-2016-layer_manager: Invert layer drawing order: Top to bottom instead of bottom to top
Julian Eisel
noreply at git.blender.org
Sat Jun 4 20:17:06 CEST 2016
Commit: 6282b3335ffc67a1d9fb4499ed634600d52256f3
Author: Julian Eisel
Date: Sat Jun 4 20:15:36 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rB6282b3335ffc67a1d9fb4499ed634600d52256f3
Invert layer drawing order: Top to bottom instead of bottom to top
Convention in Blender is to use top to bottom, not the other way around.
===================================================================
M source/blender/blenkernel/BKE_layer.h
M source/blender/blenkernel/intern/layer.c
M source/blender/editors/space_layers/layers_draw.c
M source/blender/editors/space_layers/layers_ops.c
M source/blender/editors/space_layers/layers_util.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 8f9795c..1596ec6 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -55,7 +55,7 @@ typedef enum eLayerTree_Type {
LayerTree *BKE_layertree_new(const eLayerTree_Type type);
void BKE_layertree_delete(LayerTree *ltree);
-bool BKE_layertree_iterate(const LayerTree *ltree, LayerTreeIterFunc foreach, void *customdata);
+bool BKE_layertree_iterate(const LayerTree *ltree, LayerTreeIterFunc foreach, void *customdata, const bool inverse);
int BKE_layertree_get_totitems(const LayerTree *ltree);
/* -------------------------------------------------------------------- */
@@ -79,7 +79,9 @@ void BKE_layeritem_remove(LayerTreeItem *litem, const bool remove_children);
void BKE_layeritem_group_assign(LayerTreeItem *group, LayerTreeItem *item);
-bool BKE_layeritem_iterate_childs(LayerTreeItem *litem, LayerTreeIterFunc foreach, void *customdata);
+bool BKE_layeritem_iterate_childs(
+ LayerTreeItem *litem, LayerTreeIterFunc foreach, void *customdata,
+ const bool inverse);
#endif /* __BKE_LAYER_H__ */
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 31be0c8..d78aa7a 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -74,12 +74,17 @@ void BKE_layertree_delete(LayerTree *ltree)
* Iterate over \a itemlist and all of its children, wrapped by #BKE_layertree_iterate.
* \note Recursive
*/
-static bool layertree_iterate_list(const ListBase *itemlist, LayerTreeIterFunc foreach, void *customdata)
+static bool layertree_iterate_list(
+ const ListBase *itemlist, LayerTreeIterFunc foreach, void *customdata,
+ const bool inverse)
{
- for (LayerTreeItem *litem = itemlist->first, *litem_next; litem; litem = litem_next) {
- litem_next = litem->next; /* in case list order is changed in callback */
+ for (LayerTreeItem *litem = (inverse ? itemlist->last : itemlist->first), *litem_next;
+ litem;
+ litem = litem_next)
+ {
+ litem_next = inverse ? litem->prev : litem->next; /* in case list order is changed in callback */
if (foreach(litem, customdata) == false || /* execute callback for current item */
- layertree_iterate_list(&litem->childs, foreach, customdata) == false) /* iterate over childs */
+ layertree_iterate_list(&litem->childs, foreach, customdata, inverse) == false) /* iterate over childs */
{
return false;
}
@@ -94,9 +99,9 @@ static bool layertree_iterate_list(const ListBase *itemlist, LayerTreeIterFunc f
* \param foreach: Callback that can return false to stop the iteration.
* \return if the iteration has been stopped because of a callback returning false.
*/
-bool BKE_layertree_iterate(const LayerTree *ltree, LayerTreeIterFunc foreach, void *customdata)
+bool BKE_layertree_iterate(const LayerTree *ltree, LayerTreeIterFunc foreach, void *customdata, const bool inverse)
{
- return layertree_iterate_list(<ree->items, foreach, customdata);
+ return layertree_iterate_list(<ree->items, foreach, customdata, inverse);
}
int BKE_layertree_get_totitems(const LayerTree *ltree)
@@ -198,9 +203,11 @@ void BKE_layeritem_group_assign(LayerTreeItem *group, LayerTreeItem *item)
* \param foreach: Callback that can return false to stop the iteration.
* \return if the iteration has been stopped because of a callback returning false.
*/
-bool BKE_layeritem_iterate_childs(LayerTreeItem *litem, LayerTreeIterFunc foreach, void *customdata)
+bool BKE_layeritem_iterate_childs(
+ LayerTreeItem *litem, LayerTreeIterFunc foreach, void *customdata,
+ const bool inverse)
{
- return layertree_iterate_list(&litem->childs, foreach, customdata);
+ return layertree_iterate_list(&litem->childs, foreach, customdata, inverse);
}
/** \} */ /* Layer Tree Item */
diff --git a/source/blender/editors/space_layers/layers_draw.c b/source/blender/editors/space_layers/layers_draw.c
index aaf55ef..8da2dad 100644
--- a/source/blender/editors/space_layers/layers_draw.c
+++ b/source/blender/editors/space_layers/layers_draw.c
@@ -164,7 +164,7 @@ void layers_tiles_draw(const bContext *C, ARegion *ar)
TileDrawInfo drawinfo = {C, ar, slayer, block, UI_style_get_dpi()};
/* draw tiles */
- BKE_layertree_iterate(slayer->act_tree, layer_tile_draw_cb, &drawinfo);
+ BKE_layertree_iterate(slayer->act_tree, layer_tile_draw_cb, &drawinfo, true);
/* fill remaining space with empty boxes */
const float tot_fill_tiles = (-ar->v2d.cur.ymin - drawinfo.size_y) / LAYERTILE_HEADER_HEIGHT + 1;
diff --git a/source/blender/editors/space_layers/layers_ops.c b/source/blender/editors/space_layers/layers_ops.c
index e444520..8e7cbc4 100644
--- a/source/blender/editors/space_layers/layers_ops.c
+++ b/source/blender/editors/space_layers/layers_ops.c
@@ -154,7 +154,7 @@ static int layer_group_add_invoke(bContext *C, wmOperator *UNUSED(op), const wmE
/* Add selected items to group */
GroupAddSelectedData gadata = {slayer, new_group};
- BKE_layertree_iterate(slayer->act_tree, layer_group_add_selected_cb, &gadata);
+ BKE_layertree_iterate(slayer->act_tree, layer_group_add_selected_cb, &gadata, true);
WM_event_add_notifier(C, NC_SCENE | ND_LAYER, NULL);
return OPERATOR_FINISHED;
@@ -247,7 +247,7 @@ static bool layer_select_cb(LayerTreeItem *litem, void *customdata)
static void layers_selection_set_all(SpaceLayers *slayer, const bool enable)
{
LayerSelectData sdata = {slayer, -1, -1, enable};
- BKE_layertree_iterate(slayer->act_tree, layer_select_cb, &sdata);
+ BKE_layertree_iterate(slayer->act_tree, layer_select_cb, &sdata, true);
}
/**
@@ -263,7 +263,7 @@ static bool layers_select_fill(SpaceLayers *slayer, const int from, const int to
if (min < 0 || min == max)
return false;
- BKE_layertree_iterate(slayer->act_tree, layer_select_cb, &sdata);
+ BKE_layertree_iterate(slayer->act_tree, layer_select_cb, &sdata, true);
return true;
}
diff --git a/source/blender/editors/space_layers/layers_util.c b/source/blender/editors/space_layers/layers_util.c
index be50876..f210165 100644
--- a/source/blender/editors/space_layers/layers_util.c
+++ b/source/blender/editors/space_layers/layers_util.c
@@ -58,7 +58,7 @@ void layers_data_refresh(const Scene *scene, SpaceLayers *slayer)
layers_tilehash_delete(slayer);
}
slayer->tiles = BLI_ghash_ptr_new_ex("Layer tiles hash", BKE_layertree_get_totitems(slayer->act_tree));
- BKE_layertree_iterate(slayer->act_tree, layers_tile_recreate_cb, slayer);
+ BKE_layertree_iterate(slayer->act_tree, layers_tile_recreate_cb, slayer, true);
slayer->flag &= ~SL_LAYERDATA_REFRESH;
}
@@ -95,7 +95,7 @@ void layers_tile_remove(const SpaceLayers *slayer, LayerTile *tile, const bool r
{
/* remove tiles of children first */
if (remove_children) {
- BKE_layeritem_iterate_childs(tile->litem, layer_tile_remove_children_cb, (void *)slayer);
+ BKE_layeritem_iterate_childs(tile->litem, layer_tile_remove_children_cb, (void *)slayer, true);
}
/* remove tile */
BLI_ghash_remove(slayer->tiles, tile->litem, NULL, MEM_freeN);
@@ -142,7 +142,7 @@ LayerTile *layers_tile_find_at_coordinate(
int *r_tile_idx)
{
LayerIsectCheckData idata = {slayer, &ar->v2d, co[0], co[1]};
- BKE_layertree_iterate(slayer->act_tree, layers_tile_find_at_coordinate_cb, &idata);
+ BKE_layertree_iterate(slayer->act_tree, layers_tile_find_at_coordinate_cb, &idata, true);
/* return values */
if (r_tile_idx) {
@@ -166,5 +166,5 @@ static bool layers_has_selected_cb(LayerTreeItem *litem, void *customdata)
bool layers_any_selected(SpaceLayers *slayer, const LayerTree *ltree)
{
/* returns false if iterator was stopped because layers_has_selected_cb found a selected tile */
- return BKE_layertree_iterate(ltree, layers_has_selected_cb, slayer) == false;
+ return BKE_layertree_iterate(ltree, layers_has_selected_cb, slayer, true) == false;
}
More information about the Bf-blender-cvs
mailing list