Commit: 0b964ad7f0f8096c9d23bbca4f74adee9e5e5d0b
Author: Julian Eisel
Date:   Sat Aug 6 03:18:15 2016 +0200
Branches: temp_localview_split
https://developer.blender.org/rB0b964ad7f0f8096c9d23bbca4f74adee9e5e5d0b

Some more tweaks for local view checks

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

M       source/blender/editors/screen/screen_context.c
M       source/blender/editors/space_view3d/view3d_view.c
M       source/blender/editors/transform/transform_manipulator.c

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

diff --git a/source/blender/editors/screen/screen_context.c 
b/source/blender/editors/screen/screen_context.c
index f005a6b..4f379c4 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -117,10 +117,9 @@ int ed_screen_context(const bContext *C, const char 
*member, bContextDataResult
        base = BASACT;
 #endif
 
-/* helper to check if base is visible considering layer and local view */
-#define LAYER_AND_LOCALVIEW_CHECK(localviews, base, lay) \
-       (BKE_localview_is_valid(localviews) ? \
-            BKE_localview_info_cmp(localviews, base->object->localview) : 
(base->lay & lay))
+/* helper to check for local view if needed */
+#define LOCALVIEW_CHECK(localviews, base) \
+       (!BKE_localview_is_valid(localviews) || 
BKE_localview_info_cmp(localviews, base->object->localview))
 
        if (CTX_data_dir(member)) {
                CTX_data_dir_set(result, screen_context_dir);
@@ -136,8 +135,8 @@ int ed_screen_context(const bContext *C, const char 
*member, bContextDataResult
                const bool visible_objects = CTX_data_equals(member, 
"visible_objects");
 
                for (base = scene->base.first; base; base = base->next) {
-                       if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 
0) {
-                               if (LAYER_AND_LOCALVIEW_CHECK(localviews, base, 
lay)) {
+                       if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 
0 && (base->lay & lay)) {
+                               if (LOCALVIEW_CHECK(localviews, base)) {
                                        if (visible_objects)
                                                CTX_data_id_list_add(result, 
&base->object->id);
                                        else
@@ -154,8 +153,8 @@ int ed_screen_context(const bContext *C, const char 
*member, bContextDataResult
                const bool selectable_objects = CTX_data_equals(member, 
"selectable_objects");
 
                for (base = scene->base.first; base; base = base->next) {
-                       if ((base->object->restrictflag & (OB_RESTRICT_VIEW | 
OB_RESTRICT_SELECT)) == 0) {
-                               if (LAYER_AND_LOCALVIEW_CHECK(localviews, base, 
lay)) {
+                       if ((base->object->restrictflag & (OB_RESTRICT_VIEW | 
OB_RESTRICT_SELECT)) == 0 && (base->lay & lay)) {
+                               if (LOCALVIEW_CHECK(localviews, base)) {
                                        if (selectable_objects)
                                                CTX_data_id_list_add(result, 
&base->object->id);
                                        else
@@ -172,8 +171,8 @@ int ed_screen_context(const bContext *C, const char 
*member, bContextDataResult
                const bool selected_objects = CTX_data_equals(member, 
"selected_objects");
 
                for (base = scene->base.first; base; base = base->next) {
-                       if ((base->flag & SELECT)) {
-                               if (LAYER_AND_LOCALVIEW_CHECK(localviews, base, 
lay)) {
+                       if ((base->flag & SELECT) && (base->lay & lay)) {
+                               if (LOCALVIEW_CHECK(localviews, base)) {
                                        if (selected_objects)
                                                CTX_data_id_list_add(result, 
&base->object->id);
                                        else
@@ -190,8 +189,8 @@ int ed_screen_context(const bContext *C, const char 
*member, bContextDataResult
                const bool selected_editable_objects = CTX_data_equals(member, 
"selected_editable_objects");
 
                for (base = scene->base.first; base; base = base->next) {
-                       if ((base->flag & SELECT) && 
(base->object->restrictflag & OB_RESTRICT_VIEW) == 0) {
-                               if (LAYER_AND_LOCALVIEW_CHECK(localviews, base, 
lay)) {
+                       if ((base->flag & SELECT) && 
(base->object->restrictflag & OB_RESTRICT_VIEW) == 0 && (base->lay & lay)) {
+                               if (LOCALVIEW_CHECK(localviews, base)) {
                                        if (0 == 
BKE_object_is_libdata(base->object)) {
                                                if (selected_editable_objects)
                                                        
CTX_data_id_list_add(result, &base->object->id);
@@ -211,8 +210,8 @@ int ed_screen_context(const bContext *C, const char 
*member, bContextDataResult
 
                /* Visible + Editable, but not necessarily selected */
                for (base = scene->base.first; base; base = base->next) {
-                       if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 
0) {
-                               if (LAYER_AND_LOCALVIEW_CHECK(localviews, base, 
lay)) {
+                       if ((base->object->restrictflag & OB_RESTRICT_VIEW) == 
0 && (base->lay & lay)) {
+                               if (LOCALVIEW_CHECK(localviews, base)) {
                                        if (0 == 
BKE_object_is_libdata(base->object)) {
                                                if (editable_objects)
                                                        
CTX_data_id_list_add(result, &base->object->id);
@@ -638,7 +637,7 @@ int ed_screen_context(const bContext *C, const char 
*member, bContextDataResult
                return 0; /* not found */
        }
 
-#undef LAYER_AND_LOCALVIEW_CHECK
+#undef LOCALVIEW_CHECK
 
        return -1; /* found but not available */
 }
diff --git a/source/blender/editors/space_view3d/view3d_view.c 
b/source/blender/editors/space_view3d/view3d_view.c
index dd99fe4..e851f12 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -1060,7 +1060,7 @@ static void view3d_select_loop(ViewContext *vc, Scene 
*scene, View3D *v3d, ARegi
 
                v3d->xray = true;  /* otherwise it postpones drawing */
                for (base = scene->base.first; base; base = base->next) {
-                       if (base->lay & v3d->lay && 
BKE_localview_is_object_visible(v3d, base->object)) {
+                       if ((base->lay & v3d->lay) && 
BKE_localview_is_object_visible(v3d, base->object)) {
                                if ((base->object->restrictflag & 
OB_RESTRICT_SELECT) ||
                                    (use_obedit_skip && (scene->obedit->data == 
base->object->data)))
                                {
diff --git a/source/blender/editors/transform/transform_manipulator.c 
b/source/blender/editors/transform/transform_manipulator.c
index 52e27f7..f0d2bb1 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -341,7 +341,7 @@ static int calc_manipulator_stats(const bContext *C)
        }
        else if (obedit) {
                ob = obedit;
-               if (v3d->localviewd ? !BKE_localview_is_object_visible(v3d, ob) 
: (ob->lay & v3d->lay) == 0)
+               if ((ob->lay & v3d->lay) == 0 || 
!BKE_localview_is_object_visible(v3d, ob))
                        return 0;
 
                if (obedit->type == OB_MESH) {
@@ -526,7 +526,7 @@ static int calc_manipulator_stats(const bContext *C)
                int mode = TFM_ROTATION; // mislead counting bones... bah. We 
don't know the manipulator mode, could be mixed
                bool ok = false;
 
-               if (v3d->localviewd ? !BKE_localview_is_object_visible(v3d, ob) 
: (ob->lay & v3d->lay) == 0)
+               if ((ob->lay & v3d->lay) == 0 || 
!BKE_localview_is_object_visible(v3d, ob))
                        return 0;
 
                if ((v3d->around == V3D_AROUND_ACTIVE) && (pchan = 
BKE_pose_channel_active(ob))) {

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

Reply via email to