workarond for outliner group object selection trick - which is so slow it had to...
authorCampbell Barton <ideasman42@gmail.com>
Wed, 20 Jun 2012 23:21:36 +0000 (23:21 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 20 Jun 2012 23:21:36 +0000 (23:21 +0000)
source/blender/editors/space_outliner/outliner_draw.c

index f0ecaf3ab2c74eed3398e85006c0cbdd79291199..2f5e32c61d10cc2b33ac5e4f4fb4b7342010c487 100644 (file)
@@ -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;