diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-10-04 02:24:35 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-10-04 02:37:18 +0300 |
commit | 55f62b94f861b3284ae813fd4d0ca9f1458f7ae5 (patch) | |
tree | 2de9959c24d5e999677a36feea2b4d8402a177a1 | |
parent | 971ab57c7df0b0ecdc948bc47a9bc133e35fb94f (diff) |
DRW: minor tweaks to mode checking
Avoid accessing object mode via the view layer active object
when drawing since it's done everywhere we store the active object mode
in the draw-context.
-rw-r--r-- | source/blender/draw/intern/draw_view.c | 11 | ||||
-rw-r--r-- | source/blender/draw/modes/object_mode.c | 20 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_object_enums.h | 2 |
3 files changed, 10 insertions, 23 deletions
diff --git a/source/blender/draw/intern/draw_view.c b/source/blender/draw/intern/draw_view.c index a20460db356..d77620bc47b 100644 --- a/source/blender/draw/intern/draw_view.c +++ b/source/blender/draw/intern/draw_view.c @@ -136,17 +136,16 @@ void DRW_draw_background(void) static bool is_cursor_visible(const DRWContextState *draw_ctx, Scene *scene, ViewLayer *view_layer) { - Object *ob = OBACT(view_layer); View3D *v3d = draw_ctx->v3d; if ((v3d->flag2 & V3D_RENDER_OVERRIDE) || (v3d->overlay.flag & V3D_OVERLAY_HIDE_CURSOR)) { return false; } /* don't draw cursor in paint modes, but with a few exceptions */ - if (ob && draw_ctx->object_mode & OB_MODE_ALL_PAINT) { + if (draw_ctx->object_mode & OB_MODE_ALL_PAINT) { /* exception: object is in weight paint and has deforming armature in pose mode */ if (draw_ctx->object_mode & OB_MODE_WEIGHT_PAINT) { - if (BKE_object_pose_armature_get(ob) != NULL) { + if (BKE_object_pose_armature_get(draw_ctx->obact) != NULL) { return true; } } @@ -164,10 +163,8 @@ static bool is_cursor_visible(const DRWContextState *draw_ctx, Scene *scene, Vie /* no exception met? then don't draw cursor! */ return false; } - - /* grease pencil hide always in some modes */ - if ((ob) && (ob->mode == OB_MODE_GPENCIL_WEIGHT)) - { + else if (draw_ctx->object_mode & OB_MODE_GPENCIL_WEIGHT) { + /* grease pencil hide always in some modes */ return false; } diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c index f18125af005..2df2ad57073 100644 --- a/source/blender/draw/modes/object_mode.c +++ b/source/blender/draw/modes/object_mode.c @@ -2373,16 +2373,6 @@ static void DRW_shgroup_object_center(OBJECT_StorageList *stl, Object *ob, ViewL if (v3d->overlay.flag & V3D_OVERLAY_HIDE_OBJECT_ORIGINS) { return; } - - /* grease pencil in some modes hide always */ - if ((OBACT(view_layer)) && - ((OBACT(view_layer)->mode == OB_MODE_GPENCIL_PAINT) || - (OBACT(view_layer)->mode == OB_MODE_GPENCIL_SCULPT) || - (OBACT(view_layer)->mode == OB_MODE_GPENCIL_WEIGHT))) - { - return; - } - const bool is_library = ob->id.us > 1 || ID_IS_LINKED(ob); DRWShadingGroup *shgroup; @@ -2762,13 +2752,11 @@ static void OBJECT_cache_populate(void *vedata, Object *ob) DRW_shgroup_empty(sgl, ob, view_layer); break; case OB_GPENCIL: - /* in all modes except object mode hide always */ - if ((OBACT(view_layer)) && - (OBACT(view_layer)->mode != OB_MODE_OBJECT)) - { + if (hide_object_extra) { break; } - if (hide_object_extra) { + /* in all modes except object mode hide always */ + if (draw_ctx->object_mode != OB_MODE_OBJECT) { break; } DRW_shgroup_gpencil(sgl, ob, view_layer); @@ -2816,7 +2804,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob) /* don't show object extras in set's */ if ((ob->base_flag & (BASE_FROM_SET | BASE_FROMDUPLI)) == 0) { - if ((draw_ctx->object_mode & OB_MODE_ALL_PAINT) == 0) { + if ((draw_ctx->object_mode & (OB_MODE_ALL_PAINT | OB_MODE_ALL_PAINT_GPENCIL)) == 0) { DRW_shgroup_object_center(stl, ob, view_layer, v3d); } diff --git a/source/blender/makesdna/DNA_object_enums.h b/source/blender/makesdna/DNA_object_enums.h index 01228376174..8a7016ccd13 100644 --- a/source/blender/makesdna/DNA_object_enums.h +++ b/source/blender/makesdna/DNA_object_enums.h @@ -46,6 +46,8 @@ typedef enum eObjectMode { /* Any mode where the brush system is used. */ #define OB_MODE_ALL_PAINT (OB_MODE_SCULPT | OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT) +#define OB_MODE_ALL_PAINT_GPENCIL (OB_MODE_GPENCIL_PAINT | OB_MODE_GPENCIL_SCULPT | OB_MODE_GPENCIL_WEIGHT) + /* Any mode that uses Object.sculpt. */ #define OB_MODE_ALL_SCULPT (OB_MODE_SCULPT | OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT) |