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