From d4d4f2d511f5ee0482223367f32b76d7bd8d7d60 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 20 Jun 2012 23:21:36 +0000 Subject: [PATCH] workarond for outliner group object selection trick - which is so slow it had to be disabled. Now use the first object of the group, which isn't great but is at least usable. --- .../editors/space_outliner/outliner_draw.c | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c index f0ecaf3ab2c..2f5e32c61d1 100644 --- a/source/blender/editors/space_outliner/outliner_draw.c +++ b/source/blender/editors/space_outliner/outliner_draw.c @@ -202,26 +202,39 @@ static int group_restrict_flag(Group *gr, int flag) { GroupObject *gob; +#ifdef USE_GROUP_SELECT for (gob = gr->gobject.first; gob; gob = gob->next) { if ((gob->ob->restrictflag & flag) == 0) return 0; } - return 1; +#else + /* weak but fast */ + if ((gob = gr->gobject.first)) + if ((gob->ob->restrictflag & flag) == 0) + return 0; + return 1; +#endif } -#ifdef USE_GROUP_SELECT static int group_select_flag(Group *gr) { GroupObject *gob; +#ifdef USE_GROUP_SELECT for (gob = gr->gobject.first; gob; gob = gob->next) if ((gob->ob->flag & SELECT)) return 1; return 0; -} +#else + /* weak but fast */ + if ((gob = gr->gobject.first)) + if (gob->ob->flag & SELECT) + return 1; + return 0; #endif +} void restrictbutton_gr_restrict_flag(void *poin, void *poin2, int flag) { @@ -428,25 +441,15 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar uiBlockSetEmboss(block, UI_EMBOSSN); -#ifndef USE_GROUP_SELECT - restrict_bool = FALSE; -#endif - -#ifdef USE_GROUP_SELECT restrict_bool = group_restrict_flag(gr, OB_RESTRICT_VIEW); -#endif bt = uiDefIconBut(block, ICONTOG, 0, restrict_bool ? ICON_RESTRICT_VIEW_ON : ICON_RESTRICT_VIEW_OFF, (int)ar->v2d.cur.xmax - OL_TOG_RESTRICT_VIEWX, (int)te->ys, UI_UNIT_X - 1, UI_UNIT_Y - 1, NULL, 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View"); uiButSetFunc(bt, restrictbutton_gr_restrict_view, scene, gr); -#ifdef USE_GROUP_SELECT restrict_bool = group_restrict_flag(gr, OB_RESTRICT_SELECT); -#endif bt = uiDefIconBut(block, ICONTOG, 0, restrict_bool ? ICON_RESTRICT_SELECT_ON : ICON_RESTRICT_SELECT_OFF, (int)ar->v2d.cur.xmax - OL_TOG_RESTRICT_SELECTX, (int)te->ys, UI_UNIT_X - 1, UI_UNIT_Y - 1, NULL, 0, 0, 0, 0, "Restrict/Allow selection in the 3D View"); uiButSetFunc(bt, restrictbutton_gr_restrict_select, scene, gr); -#ifdef USE_GROUP_SELECT restrict_bool = group_restrict_flag(gr, OB_RESTRICT_RENDER); -#endif bt = uiDefIconBut(block, ICONTOG, 0, restrict_bool ? ICON_RESTRICT_RENDER_ON : ICON_RESTRICT_RENDER_OFF, (int)ar->v2d.cur.xmax - OL_TOG_RESTRICT_RENDERX, (int)te->ys, UI_UNIT_X - 1, UI_UNIT_Y - 1, NULL, 0, 0, 0, 0, "Restrict/Allow renderability"); uiButSetFunc(bt, restrictbutton_gr_restrict_render, scene, gr); @@ -1289,7 +1292,6 @@ static void outliner_draw_tree_element(bContext *C, uiBlock *block, Scene *scene } } else if (te->idcode == ID_GR) { -#ifdef USE_GROUP_SELECT Group *gr = (Group *)tselem->id; if (group_select_flag(gr)) { char col[4]; @@ -1299,7 +1301,6 @@ static void outliner_draw_tree_element(bContext *C, uiBlock *block, Scene *scene active = 2; } -#endif } else if (te->idcode == ID_OB) { Object *ob = (Object *)tselem->id;