diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-01-14 19:59:32 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-01-14 19:59:40 +0300 |
commit | e2724abc22d53f3a1f1552a6f40af3d47f7512e4 (patch) | |
tree | afcacb15cd271ca58c9b78a0e13263d4dcf0166c /source/blender/draw/engines/overlay/overlay_engine.c | |
parent | ff430dea663521f742ff2f8f79b5d7f4978ecc04 (diff) |
Fix T72490 Collections: Exclude From View toggle causes segment violation
Diffstat (limited to 'source/blender/draw/engines/overlay/overlay_engine.c')
-rw-r--r-- | source/blender/draw/engines/overlay/overlay_engine.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c index 56b9ed8f54a..a6d1555a753 100644 --- a/source/blender/draw/engines/overlay/overlay_engine.c +++ b/source/blender/draw/engines/overlay/overlay_engine.c @@ -177,6 +177,30 @@ BLI_INLINE OVERLAY_DupliData *OVERLAY_duplidata_get(Object *ob, void *vedata, bo return NULL; } +static bool overlay_object_is_edit_mode(const OVERLAY_PrivateData *pd, const Object *ob) +{ + if ((ob->mode & OB_MODE_EDIT) && BKE_object_is_in_editmode(ob)) { + /* Also check for context mode as the object mode is not 100% reliable. (see T72490) */ + switch (ob->type) { + case OB_MESH: + return pd->ctx_mode == CTX_MODE_EDIT_MESH; + case OB_ARMATURE: + return pd->ctx_mode == CTX_MODE_EDIT_ARMATURE; + case OB_CURVE: + return pd->ctx_mode == CTX_MODE_EDIT_CURVE; + case OB_SURF: + return pd->ctx_mode == CTX_MODE_EDIT_SURFACE; + case OB_LATTICE: + return pd->ctx_mode == CTX_MODE_EDIT_LATTICE; + case OB_MBALL: + return pd->ctx_mode == CTX_MODE_EDIT_METABALL; + case OB_FONT: + return pd->ctx_mode == CTX_MODE_EDIT_TEXT; + } + } + return false; +} + static void OVERLAY_cache_populate(void *vedata, Object *ob) { OVERLAY_Data *data = vedata; @@ -185,7 +209,7 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob) const bool is_select = DRW_state_is_select(); const bool renderable = DRW_object_is_renderable(ob); const bool in_pose_mode = ob->type == OB_ARMATURE && OVERLAY_armature_is_pose_mode(ob, draw_ctx); - const bool in_edit_mode = (ob->mode & OB_MODE_EDIT) && BKE_object_is_in_editmode(ob); + const bool in_edit_mode = overlay_object_is_edit_mode(pd, ob); const bool in_particle_edit_mode = ob->mode == OB_MODE_PARTICLE_EDIT; const bool in_paint_mode = (ob == draw_ctx->obact) && (draw_ctx->object_mode & OB_MODE_ALL_PAINT); |