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(&ltree->items, foreach, customdata);
+       return layertree_iterate_list(&ltree->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;
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to