From 5ec016169b80cc8205740a5b3beb12f91be3182b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 6 Feb 2018 17:28:00 +1100 Subject: Object Mode: use eval_ctx for context/screen code --- source/blender/editors/include/ED_image.h | 2 +- source/blender/editors/include/ED_uvedit.h | 5 +- source/blender/editors/interface/interface_icons.c | 10 +++- .../editors/interface/interface_templates.c | 14 +++-- source/blender/editors/physics/particle_edit.c | 17 ++++-- source/blender/editors/screen/CMakeLists.txt | 1 + source/blender/editors/screen/screen_context.c | 16 +++-- source/blender/editors/screen/screen_ops.c | 70 +++++++++++++++------- source/blender/editors/sculpt_paint/sculpt_undo.c | 7 ++- source/blender/editors/space_image/image_edit.c | 12 ++-- source/blender/editors/space_image/image_ops.c | 2 +- source/blender/editors/space_image/space_image.c | 5 +- source/blender/editors/space_view3d/drawarmature.c | 44 +++++++------- source/blender/editors/space_view3d/space_view3d.c | 9 ++- .../blender/editors/space_view3d/view3d_header.c | 14 +++-- source/blender/editors/space_view3d/view3d_snap.c | 12 ++-- source/blender/editors/space_view3d/view3d_view.c | 11 +++- source/blender/editors/util/undo.c | 39 +++++++----- source/blender/editors/uvedit/uvedit_draw.c | 12 ++-- source/blender/makesrna/intern/rna_space.c | 2 +- source/blender/nodes/CMakeLists.txt | 1 + source/blender/nodes/texture/node_texture_tree.c | 10 +++- .../blender/render/intern/source/convertblender.c | 3 +- 23 files changed, 210 insertions(+), 108 deletions(-) (limited to 'source') diff --git a/source/blender/editors/include/ED_image.h b/source/blender/editors/include/ED_image.h index 95ba6095517..cb824b3c9b7 100644 --- a/source/blender/editors/include/ED_image.h +++ b/source/blender/editors/include/ED_image.h @@ -75,7 +75,7 @@ bool ED_space_image_show_uvedit(struct SpaceImage *sima, struct Object *obedit); bool ED_space_image_paint_curve(const struct bContext *C); -bool ED_space_image_check_show_maskedit(struct ViewLayer *view_layer, struct SpaceImage *sima); +bool ED_space_image_check_show_maskedit(struct SpaceImage *sima, struct ViewLayer *view_layer); int ED_space_image_maskedit_poll(struct bContext *C); int ED_space_image_maskedit_mask_poll(struct bContext *C); diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h index 96b4004b6a6..d4c38688335 100644 --- a/source/blender/editors/include/ED_uvedit.h +++ b/source/blender/editors/include/ED_uvedit.h @@ -112,7 +112,10 @@ void ED_unwrap_lscm(struct Scene *scene, struct Object *obedit, const short sel) /* uvedit_draw.c */ void ED_image_draw_cursor(struct ARegion *ar, const float cursor[2]); -void ED_uvedit_draw_main(struct SpaceImage *sima, struct ARegion *ar, struct Scene *scene, struct ViewLayer *view_layer, struct Object *obedit, struct Object *obact, struct Depsgraph *depsgraph); +void ED_uvedit_draw_main( + struct SpaceImage *sima, const struct EvaluationContext *eval_ctx, + struct ARegion *ar, struct Scene *scene, struct ViewLayer *view_layer, + struct Object *obedit, struct Object *obact, struct Depsgraph *depsgraph); /* uvedit_buttons.c */ void ED_uvedit_buttons_register(struct ARegionType *art); diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c index d048324d35e..2941b08b7ad 100644 --- a/source/blender/editors/interface/interface_icons.c +++ b/source/blender/editors/interface/interface_icons.c @@ -61,6 +61,8 @@ #include "BIF_glutil.h" +#include "DEG_depsgraph.h" + #include "ED_datafiles.h" #include "ED_keyframes_draw.h" #include "ED_render.h" @@ -1193,6 +1195,8 @@ static int ui_id_brush_get_icon(const bContext *C, ID *id) ui_id_icon_render(C, id, true); } else { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Object *ob = CTX_data_active_object(C); SpaceImage *sima; const EnumPropertyItem *items = NULL; @@ -1203,11 +1207,11 @@ static int ui_id_brush_get_icon(const bContext *C, ID *id) * checking various context stuff here */ if (CTX_wm_view3d(C) && ob) { - if (ob->mode & OB_MODE_SCULPT) + if (eval_ctx.object_mode & OB_MODE_SCULPT) mode = OB_MODE_SCULPT; - else if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) + else if (eval_ctx.object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) mode = OB_MODE_VERTEX_PAINT; - else if (ob->mode & OB_MODE_TEXTURE_PAINT) + else if (eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT) mode = OB_MODE_TEXTURE_PAINT; } else if ((sima = CTX_wm_space_image(C)) && diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 32758b7935a..871d2df1e85 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -575,6 +575,9 @@ static void template_ID( bContext *C, uiLayout *layout, TemplateID *template_ui, StructRNA *type, int flag, const char *newop, const char *openop, const char *unlinkop) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); + uiBut *but; uiBlock *block; PointerRNA idptr; @@ -659,7 +662,7 @@ static void template_ID( (idfrom && idfrom->lib) || (!editable) || /* object in editmode - don't change data */ - (idfrom && GS(idfrom->name) == ID_OB && (((Object *)idfrom)->mode & OB_MODE_EDIT))) + (idfrom && GS(idfrom->name) == ID_OB && (eval_ctx.object_mode & OB_MODE_EDIT))) { UI_but_flag_enable(but, UI_BUT_DISABLED); } @@ -1207,7 +1210,8 @@ static int modifier_is_simulation(ModifierData *md) } static uiLayout *draw_modifier( - uiLayout *layout, Scene *scene, Object *ob, + uiLayout *layout, + const EvaluationContext *eval_ctx, Scene *scene, Object *ob, ModifierData *md, int index, int cageIndex, int lastCageIndex) { const ModifierTypeInfo *mti = modifierType_getInfo(md->type); @@ -1344,7 +1348,7 @@ static uiLayout *draw_modifier( if (md->type == eModifierType_ParticleSystem) { ParticleSystem *psys = ((ParticleSystemModifierData *)md)->psys; - if (!(ob->mode & OB_MODE_PARTICLE_EDIT)) { + if (!(eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT)) { if (ELEM(psys->part->ren_as, PART_DRAW_GR, PART_DRAW_OB)) uiItemO(row, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Convert"), ICON_NONE, "OBJECT_OT_duplicates_make_real"); @@ -1393,6 +1397,8 @@ static uiLayout *draw_modifier( uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Scene *scene = CTX_data_scene(C); Object *ob; ModifierData *md, *vmd; @@ -1423,7 +1429,7 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr) for (i = 0; vmd; i++, vmd = vmd->next) { if (md == vmd) - return draw_modifier(layout, scene, ob, md, i, cageIndex, lastCageIndex); + return draw_modifier(layout, &eval_ctx, scene, ob, md, i, cageIndex, lastCageIndex); else if (vmd->mode & eModifierMode_Virtual) i--; } diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 89dd46681cb..aeb7f0b9222 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -113,26 +113,30 @@ void update_world_cos(Object *ob, PTCacheEdit *edit); int PE_poll(bContext *C) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Scene *scene= CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); Object *ob= CTX_data_active_object(C); - if (!scene || !view_layer || !ob || !(ob->mode & OB_MODE_PARTICLE_EDIT)) + if (!scene || !view_layer || !ob || !(eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT)) { return 0; - + } return (PE_get_current(scene, view_layer, ob) != NULL); } int PE_hair_poll(bContext *C) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Scene *scene= CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); Object *ob= CTX_data_active_object(C); PTCacheEdit *edit; - if (!scene || !ob || !(ob->mode & OB_MODE_PARTICLE_EDIT)) + if (!scene || !ob || !(eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT)) { return 0; - + } edit= PE_get_current(scene, view_layer, ob); return (edit && edit->psys); @@ -317,7 +321,7 @@ PTCacheEdit *PE_create_current(const EvaluationContext *eval_ctx, Scene *scene, void PE_current_changed(const EvaluationContext *eval_ctx, Scene *scene, Object *ob) { - if (ob->mode == OB_MODE_PARTICLE_EDIT) { + if (eval_ctx->object_mode == OB_MODE_PARTICLE_EDIT) { PE_create_current(eval_ctx, scene, ob); } } @@ -2840,7 +2844,8 @@ void PARTICLE_OT_delete(wmOperatorType *ot) /*************************** mirror operator **************************/ -static void PE_mirror_x(Scene *scene, ViewLayer *view_layer, Object *ob, int tagged) +static void PE_mirror_x( + Scene *scene, ViewLayer *view_layer, Object *ob, int tagged) { Mesh *me= (Mesh *)(ob->data); ParticleSystemModifierData *psmd; diff --git a/source/blender/editors/screen/CMakeLists.txt b/source/blender/editors/screen/CMakeLists.txt index 02584a4611b..29b9971eabb 100644 --- a/source/blender/editors/screen/CMakeLists.txt +++ b/source/blender/editors/screen/CMakeLists.txt @@ -26,6 +26,7 @@ set(INC ../../blenloader ../../blentranslation ../../bmesh + ../../depsgraph ../../gpu ../../imbuf ../../makesdna diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 4c62253bef6..e4c3a051a13 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -53,6 +53,8 @@ #include "BKE_sequencer.h" #include "BKE_workspace.h" +#include "DEG_depsgraph.h" + #include "RNA_access.h" #include "ED_armature.h" @@ -84,6 +86,8 @@ const char *screen_context_dir[] = { int ed_screen_context(const bContext *C, const char *member, bContextDataResult *result) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); wmWindow *win = CTX_wm_window(C); bScreen *sc = CTX_wm_screen(C); ScrArea *sa = CTX_wm_area(C); @@ -371,31 +375,31 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } else if (CTX_data_equals(member, "sculpt_object")) { - if (obact && (obact->mode & OB_MODE_SCULPT)) + if (obact && (eval_ctx.object_mode & OB_MODE_SCULPT)) { CTX_data_id_pointer_set(result, &obact->id); - + } return 1; } else if (CTX_data_equals(member, "vertex_paint_object")) { - if (obact && (obact->mode & OB_MODE_VERTEX_PAINT)) + if (obact && (eval_ctx.object_mode & OB_MODE_VERTEX_PAINT)) CTX_data_id_pointer_set(result, &obact->id); return 1; } else if (CTX_data_equals(member, "weight_paint_object")) { - if (obact && (obact->mode & OB_MODE_WEIGHT_PAINT)) + if (obact && (eval_ctx.object_mode & OB_MODE_WEIGHT_PAINT)) CTX_data_id_pointer_set(result, &obact->id); return 1; } else if (CTX_data_equals(member, "image_paint_object")) { - if (obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) + if (obact && (eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT)) CTX_data_id_pointer_set(result, &obact->id); return 1; } else if (CTX_data_equals(member, "particle_edit_object")) { - if (obact && (obact->mode & OB_MODE_PARTICLE_EDIT)) + if (obact && (eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT)) CTX_data_id_pointer_set(result, &obact->id); return 1; diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index e1480dbe967..9167c4c3d4d 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -68,6 +68,8 @@ #include "WM_api.h" #include "WM_types.h" +#include "DEG_depsgraph.h" + #include "ED_armature.h" #include "ED_clip.h" #include "ED_image.h" @@ -150,6 +152,8 @@ int ED_operator_scene_editable(bContext *C) int ED_operator_objectmode(bContext *C) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Scene *scene = CTX_data_scene(C); Object *obact = CTX_data_active_object(C); @@ -159,7 +163,7 @@ int ED_operator_objectmode(bContext *C) return 0; /* add a check for ob->mode too? */ - if (obact && (obact->mode != OB_MODE_OBJECT)) + if (obact && (eval_ctx.object_mode != OB_MODE_OBJECT)) return 0; return 1; @@ -301,35 +305,43 @@ int ED_operator_console_active(bContext *C) return ed_spacetype_test(C, SPACE_CONSOLE); } -static int ed_object_hidden(Object *ob) +static int ed_object_hidden(const EvaluationContext *eval_ctx, Object *ob) { /* if hidden but in edit mode, we still display, can happen with animation */ - return ((ob->restrictflag & OB_RESTRICT_VIEW) && !(ob->mode & OB_MODE_EDIT)); + return ((ob->restrictflag & OB_RESTRICT_VIEW) && !(eval_ctx->object_mode & OB_MODE_EDIT)); } int ED_operator_object_active(bContext *C) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Object *ob = ED_object_active_context(C); - return ((ob != NULL) && !ed_object_hidden(ob)); + return ((ob != NULL) && !ed_object_hidden(&eval_ctx, ob)); } int ED_operator_object_active_editable(bContext *C) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Object *ob = ED_object_active_context(C); - return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(ob)); + return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(&eval_ctx, ob)); } int ED_operator_object_active_editable_mesh(bContext *C) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Object *ob = ED_object_active_context(C); - return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(ob) && + return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(&eval_ctx, ob) && (ob->type == OB_MESH) && !ID_IS_LINKED(ob->data)); } int ED_operator_object_active_editable_font(bContext *C) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Object *ob = ED_object_active_context(C); - return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(ob) && + return ((ob != NULL) && !ID_IS_LINKED(ob) && !ed_object_hidden(&eval_ctx, ob) && (ob->type == OB_FONT)); } @@ -374,11 +386,15 @@ int ED_operator_posemode_exclusive(bContext *C) { Object *obact = CTX_data_active_object(C); - if (obact && !(obact->mode & OB_MODE_EDIT)) { - Object *obpose; - if ((obpose = BKE_object_pose_armature_get(obact))) { - if (obact == obpose) { - return 1; + if (obact) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); + if ((eval_ctx.object_mode & OB_MODE_EDIT) == 0) { + Object *obpose; + if ((obpose = BKE_object_pose_armature_get(obact))) { + if (obact == obpose) { + return 1; + } } } } @@ -392,9 +408,14 @@ int ED_operator_posemode_context(bContext *C) { Object *obpose = ED_pose_object_from_context(C); - if (obpose && !(obpose->mode & OB_MODE_EDIT)) { - if (BKE_object_pose_context_check(obpose)) { - return 1; + + if (obpose) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); + if ((eval_ctx.object_mode & OB_MODE_EDIT) == 0) { + if (BKE_object_pose_context_check(obpose)) { + return 1; + } } } @@ -405,11 +426,16 @@ int ED_operator_posemode(bContext *C) { Object *obact = CTX_data_active_object(C); - if (obact && !(obact->mode & OB_MODE_EDIT)) { - Object *obpose; - if ((obpose = BKE_object_pose_armature_get(obact))) { - if ((obact == obpose) || (obact->mode & OB_MODE_WEIGHT_PAINT)) { - return 1; + + if (obact) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); + if ((eval_ctx.object_mode & OB_MODE_EDIT) == 0) { + Object *obpose; + if ((obpose = BKE_object_pose_armature_get(obact))) { + if ((obact == obpose) || (eval_ctx.object_mode & OB_MODE_WEIGHT_PAINT)) { + return 1; + } } } } @@ -529,6 +555,8 @@ int ED_operator_editmball(bContext *C) int ED_operator_mask(bContext *C) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); ScrArea *sa = CTX_wm_area(C); if (sa && sa->spacedata.first) { switch (sa->spacetype) { @@ -547,7 +575,7 @@ int ED_operator_mask(bContext *C) { SpaceImage *sima = sa->spacedata.first; ViewLayer *view_layer = CTX_data_view_layer(C); - return ED_space_image_check_show_maskedit(view_layer, sima); + return ED_space_image_check_show_maskedit(sima, view_layer); } } } diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c index 63017a0e576..19dcf7b4a44 100644 --- a/source/blender/editors/sculpt_paint/sculpt_undo.c +++ b/source/blender/editors/sculpt_paint/sculpt_undo.c @@ -334,6 +334,9 @@ static void sculpt_undo_bmesh_restore_generic(bContext *C, Object *ob, SculptSession *ss) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); + if (unode->applied) { BM_log_undo(ss->bm, ss->bm_log); unode->applied = false; @@ -368,8 +371,8 @@ static void sculpt_undo_bmesh_restore_generic(bContext *C, } /* Create empty sculpt BMesh and enable logging */ -static void sculpt_undo_bmesh_enable(Object *ob, - SculptUndoNode *unode) +static void sculpt_undo_bmesh_enable( + Object *ob, SculptUndoNode *unode) { SculptSession *ss = ob->sculpt; Mesh *me = ob->data; diff --git a/source/blender/editors/space_image/image_edit.c b/source/blender/editors/space_image/image_edit.c index 587689eda78..8db9f8fb720 100644 --- a/source/blender/editors/space_image/image_edit.c +++ b/source/blender/editors/space_image/image_edit.c @@ -44,6 +44,8 @@ #include "IMB_imbuf_types.h" +#include "DEG_depsgraph.h" + #include "ED_image.h" /* own include */ #include "ED_mesh.h" #include "ED_screen.h" @@ -321,15 +323,17 @@ bool ED_image_slot_cycle(struct Image *image, int direction) void ED_space_image_scopes_update(const struct bContext *C, struct SpaceImage *sima, struct ImBuf *ibuf, bool use_view_settings) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Scene *scene = CTX_data_scene(C); Object *ob = CTX_data_active_object(C); /* scope update can be expensive, don't update during paint modes */ if (sima->mode == SI_MODE_PAINT) return; - if (ob && ((ob->mode & (OB_MODE_TEXTURE_PAINT | OB_MODE_EDIT)) != 0)) + if (ob && ((eval_ctx.object_mode & (OB_MODE_TEXTURE_PAINT | OB_MODE_EDIT)) != 0)) { return; - + } /* We also don't update scopes of render result during render. */ if (G.is_rendering) { const Image *image = sima->image; @@ -374,7 +378,7 @@ bool ED_space_image_show_uvedit(SpaceImage *sima, Object *obedit) } /* matches clip function */ -bool ED_space_image_check_show_maskedit(ViewLayer *view_layer, SpaceImage *sima) +bool ED_space_image_check_show_maskedit(SpaceImage *sima, ViewLayer *view_layer) { /* check editmode - this is reserved for UV editing */ Object *ob = OBACT(view_layer); @@ -391,7 +395,7 @@ int ED_space_image_maskedit_poll(bContext *C) if (sima) { ViewLayer *view_layer = CTX_data_view_layer(C); - return ED_space_image_check_show_maskedit(view_layer, sima); + return ED_space_image_check_show_maskedit(sima, view_layer); } return false; diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 6c0ab33dd2c..6c8f9a12b7e 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -814,7 +814,7 @@ static int image_view_selected_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_CANCELLED; } } - else if (ED_space_image_check_show_maskedit(view_layer, sima)) { + else if (ED_space_image_check_show_maskedit(sima, view_layer)) { if (!ED_mask_selected_minmax(C, min, max)) { return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index a89ae2b869a..e20d2a620d7 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -725,6 +725,9 @@ static void image_main_region_init(wmWindowManager *wm, ARegion *ar) static void image_main_region_draw(const bContext *C, ARegion *ar) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); + /* draw entirely, view changes should be handled here */ SpaceImage *sima = CTX_wm_space_image(C); Object *obact = CTX_data_active_object(C); @@ -759,7 +762,7 @@ static void image_main_region_draw(const bContext *C, ARegion *ar) ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW); - ED_uvedit_draw_main(sima, ar, scene, view_layer, obedit, obact, depsgraph); + ED_uvedit_draw_main(sima, &eval_ctx, ar, scene, view_layer, obedit, obact, depsgraph); /* check for mask (delay draw) */ if (ED_space_image_show_uvedit(sima, obedit)) { diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 77cd64be7c1..f0adf307bda 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -2667,8 +2667,10 @@ static void ghost_poses_tag_unselected(Object *ob, short unset) * note: object should be in posemode */ static void draw_ghost_poses_range( - const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base) + const EvaluationContext *eval_ctx_init, + Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base) { + EvaluationContext eval_ctx = *eval_ctx_init; Object *ob = base->object; AnimData *adt = BKE_animdata_from_id(&ob->id); bArmature *arm = ob->data; @@ -2690,7 +2692,7 @@ static void draw_ghost_poses_range( range = (float)(end - start); /* store values */ - ob->mode &= ~OB_MODE_POSE; + eval_ctx.object_mode &= ~OB_MODE_POSE; cfrao = CFRA; flago = arm->flag; arm->flag &= ~(ARM_DRAWNAMES | ARM_DRAWAXES); @@ -2711,8 +2713,8 @@ static void draw_ghost_poses_range( UI_GetThemeColorShadeAlpha4ubv(TH_WIRE, 0, -128 - (int)(120.0f * sqrtf(colfac)), col); BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); - BKE_pose_where_is(eval_ctx, scene, ob); - draw_pose_bones(eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); + BKE_pose_where_is(&eval_ctx, scene, ob); + draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); } glDisable(GL_BLEND); if (v3d->zbuf) glEnable(GL_DEPTH_TEST); @@ -2728,16 +2730,17 @@ static void draw_ghost_poses_range( CFRA = cfrao; ob->pose = poseo; arm->flag = flago; - ob->mode |= OB_MODE_POSE; + eval_ctx.object_mode |= OB_MODE_POSE; } /* draw ghosts on keyframes in action within range * - object should be in posemode */ static void draw_ghost_poses_keys( - const struct EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, + const struct EvaluationContext *eval_ctx_init, Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base) { + EvaluationContext eval_ctx = *eval_ctx_init; Object *ob = base->object; AnimData *adt = BKE_animdata_from_id(&ob->id); bAction *act = (adt) ? adt->action : NULL; @@ -2771,7 +2774,7 @@ static void draw_ghost_poses_keys( if (range == 0) return; /* store values */ - ob->mode &= ~OB_MODE_POSE; + eval_ctx.object_mode &= ~OB_MODE_POSE; cfrao = CFRA; flago = arm->flag; arm->flag &= ~(ARM_DRAWNAMES | ARM_DRAWAXES); @@ -2794,8 +2797,8 @@ static void draw_ghost_poses_keys( CFRA = (int)ak->cfra; BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); - BKE_pose_where_is(eval_ctx, scene, ob); - draw_pose_bones(eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); + BKE_pose_where_is(&eval_ctx, scene, ob); + draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); } glDisable(GL_BLEND); if (v3d->zbuf) glEnable(GL_DEPTH_TEST); @@ -2812,16 +2815,17 @@ static void draw_ghost_poses_keys( CFRA = cfrao; ob->pose = poseo; arm->flag = flago; - ob->mode |= OB_MODE_POSE; + eval_ctx.object_mode |= OB_MODE_POSE; } /* draw ghosts around current frame * - object is supposed to be armature in posemode */ static void draw_ghost_poses( - const struct EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, + const struct EvaluationContext *eval_ctx_init, Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base) { + EvaluationContext eval_ctx = *eval_ctx_init; Object *ob = base->object; AnimData *adt = BKE_animdata_from_id(&ob->id); bArmature *arm = ob->data; @@ -2846,7 +2850,7 @@ static void draw_ghost_poses( range = (float)(arm->ghostep) * stepsize + 0.5f; /* plus half to make the for loop end correct */ /* store values */ - ob->mode &= ~OB_MODE_POSE; + eval_ctx.object_mode &= ~OB_MODE_POSE; cfrao = CFRA; actframe = BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); flago = arm->flag; @@ -2874,8 +2878,8 @@ static void draw_ghost_poses( if (CFRA != cfrao) { BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); - BKE_pose_where_is(eval_ctx, scene, ob); - draw_pose_bones(eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); + BKE_pose_where_is(&eval_ctx, scene, ob); + draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); } } @@ -2889,8 +2893,8 @@ static void draw_ghost_poses( if (CFRA != cfrao) { BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); - BKE_pose_where_is(eval_ctx, scene, ob); - draw_pose_bones(eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); + BKE_pose_where_is(&eval_ctx, scene, ob); + draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); } } } @@ -2908,7 +2912,7 @@ static void draw_ghost_poses( CFRA = cfrao; ob->pose = poseo; arm->flag = flago; - ob->mode |= OB_MODE_POSE; + eval_ctx.object_mode |= OB_MODE_POSE; } /* ********************************** Armature Drawing - Main ************************* */ @@ -2970,11 +2974,11 @@ bool draw_armature( } else #endif - if (ob->mode & OB_MODE_POSE) { + if (eval_ctx->object_mode & OB_MODE_POSE) { arm->flag |= ARM_POSEMODE; } } - else if (ob->mode & OB_MODE_POSE) { + else if (eval_ctx->object_mode & OB_MODE_POSE) { if (arm->ghosttype == ARM_GHOST_RANGE) { draw_ghost_poses_range(eval_ctx, scene, view_layer, v3d, ar, base); } @@ -2988,7 +2992,7 @@ bool draw_armature( if ((dflag & DRAW_SCENESET) == 0) { if (ob == OBACT(view_layer)) arm->flag |= ARM_POSEMODE; - else if (OBACT(view_layer) && (OBACT(view_layer)->mode & OB_MODE_WEIGHT_PAINT)) { + else if (OBACT(view_layer) && (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT)) { if (ob == modifiers_isDeformedByArmature(OBACT(view_layer))) arm->flag |= ARM_POSEMODE; } diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 24b3a9b9547..e5259a2c583 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -1386,9 +1386,10 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); if (view_layer->basact) { - Object *ob = view_layer->basact->object; + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); /* if hidden but in edit mode, we still display, can happen with animation */ - if ((view_layer->basact->flag & BASE_VISIBLED) != 0 || (ob->mode & OB_MODE_EDIT)) { + if ((view_layer->basact->flag & BASE_VISIBLED) != 0 || (eval_ctx.object_mode & OB_MODE_EDIT)) { CTX_data_pointer_set(result, &scene->id, &RNA_ObjectBase, view_layer->basact); } } @@ -1399,8 +1400,10 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes ViewLayer *view_layer = CTX_data_view_layer(C); if (view_layer->basact) { Object *ob = view_layer->basact->object; + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); /* if hidden but in edit mode, we still display, can happen with animation */ - if ((view_layer->basact->flag & BASE_VISIBLED) != 0 || (ob->mode & OB_MODE_EDIT) != 0) { + if ((view_layer->basact->flag & BASE_VISIBLED) != 0 || (eval_ctx.object_mode & OB_MODE_EDIT) != 0) { CTX_data_id_pointer_set(result, &ob->id); } } diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index a1dc2a21477..b5de08c3d11 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -276,6 +276,8 @@ void uiTemplateEditModeSelection(uiLayout *layout, struct bContext *C) void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); bScreen *screen = CTX_wm_screen(C); ScrArea *sa = CTX_wm_area(C); View3D *v3d = sa->spacedata.first; @@ -288,8 +290,10 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) bGPdata *gpd = CTX_data_gpencil_data(C); uiBlock *block; uiLayout *row; - bool is_paint = ob && !(gpd && (gpd->flag & GP_DATA_STROKE_EDITMODE)) && - ELEM(ob->mode, OB_MODE_SCULPT, OB_MODE_VERTEX_PAINT, OB_MODE_WEIGHT_PAINT, OB_MODE_TEXTURE_PAINT); + bool is_paint = ( + ob && !(gpd && (gpd->flag & GP_DATA_STROKE_EDITMODE)) && + ELEM(eval_ctx.object_mode, + OB_MODE_SCULPT, OB_MODE_VERTEX_PAINT, OB_MODE_WEIGHT_PAINT, OB_MODE_TEXTURE_PAINT)); RNA_pointer_create(&screen->id, &RNA_SpaceView3D, v3d, &v3dptr); RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &toolsptr); @@ -303,18 +307,18 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) row = uiLayoutRow(layout, true); uiItemR(row, &v3dptr, "pivot_point", UI_ITEM_R_ICON_ONLY, "", ICON_NONE); - if (!ob || ELEM(ob->mode, OB_MODE_OBJECT, OB_MODE_POSE, OB_MODE_WEIGHT_PAINT)) { + if (!ob || ELEM(eval_ctx.object_mode, OB_MODE_OBJECT, OB_MODE_POSE, OB_MODE_WEIGHT_PAINT)) { uiItemR(row, &v3dptr, "use_pivot_point_align", UI_ITEM_R_ICON_ONLY, "", ICON_NONE); } if (obedit == NULL && is_paint) { /* Manipulators aren't used in paint modes */ - if (!ELEM(ob->mode, OB_MODE_SCULPT, OB_MODE_PARTICLE_EDIT)) { + if (!ELEM(eval_ctx.object_mode, OB_MODE_SCULPT, OB_MODE_PARTICLE_EDIT)) { /* masks aren't used for sculpt and particle painting */ PointerRNA meshptr; RNA_pointer_create(ob->data, &RNA_Mesh, ob->data, &meshptr); - if (ob->mode & (OB_MODE_TEXTURE_PAINT)) { + if (eval_ctx.object_mode & (OB_MODE_TEXTURE_PAINT)) { uiItemR(layout, &meshptr, "use_paint_mask", UI_ITEM_R_ICON_ONLY, "", ICON_NONE); } else { diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 1df29201bf6..cee76925040 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -113,7 +113,7 @@ static int snap_sel_to_grid_exec(bContext *C, wmOperator *UNUSED(op)) CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { - if (ob->mode & OB_MODE_POSE) { + if (eval_ctx.object_mode & OB_MODE_POSE) { bPoseChannel *pchan; bArmature *arm = ob->data; @@ -272,7 +272,7 @@ static int snap_selected_to_location(bContext *C, const float snap_target_global ED_transverts_update_obedit(&tvs, obedit); ED_transverts_free(&tvs); } - else if (obact && (obact->mode & OB_MODE_POSE)) { + else if (obact && (eval_ctx.object_mode & OB_MODE_POSE)) { struct KeyingSet *ks = ANIM_get_keyingset_for_autokeying(scene, ANIM_KS_LOCATION_ID); bPoseChannel *pchan; @@ -554,6 +554,8 @@ static void bundle_midpoint(Scene *scene, Object *ob, float vec[3]) static bool snap_curs_to_sel_ex(bContext *C, float cursor[3]) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Object *obedit = CTX_data_edit_object(C); Scene *scene = CTX_data_scene(C); View3D *v3d = CTX_wm_view3d(C); @@ -599,7 +601,7 @@ static bool snap_curs_to_sel_ex(bContext *C, float cursor[3]) else { Object *obact = CTX_data_active_object(C); - if (obact && (obact->mode & OB_MODE_POSE)) { + if (obact && (eval_ctx.object_mode & OB_MODE_POSE)) { bArmature *arm = obact->data; bPoseChannel *pchan; for (pchan = obact->pose->chanbase.first; pchan; pchan = pchan->next) { @@ -698,10 +700,12 @@ static bool snap_calc_active_center(bContext *C, const bool select_only, float r } } else { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Object *ob = CTX_data_active_object(C); if (ob) { - if (ob->mode & OB_MODE_POSE) { + if (eval_ctx.object_mode & OB_MODE_POSE) { bPoseChannel *pchan = BKE_pose_channel_active(ob); if (pchan) { if (!select_only || (pchan->bone->flag & BONE_SELECTED)) { diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 779c2cc53d4..a0918066887 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1058,12 +1058,15 @@ int ED_view3d_view_layer_set(int lay, const int *values, int *active) static ListBase queue_back; static void game_engine_save_state(bContext *C, wmWindow *win) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Object *obact = CTX_data_active_object(C); glPushAttrib(GL_ALL_ATTRIB_BITS); - if (obact && obact->mode & OB_MODE_TEXTURE_PAINT) + if (obact && eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT) { GPU_paint_set_mipmap(1); + } queue_back = win->queue; @@ -1072,11 +1075,13 @@ static void game_engine_save_state(bContext *C, wmWindow *win) static void game_engine_restore_state(bContext *C, wmWindow *win) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Object *obact = CTX_data_active_object(C); - if (obact && obact->mode & OB_MODE_TEXTURE_PAINT) + if (obact && eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT) { GPU_paint_set_mipmap(0); - + } /* check because closing win can set to NULL */ if (win) { win->queue = queue_back; diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c index 9e28a5f84ec..b58cb9cfabe 100644 --- a/source/blender/editors/util/undo.c +++ b/source/blender/editors/util/undo.c @@ -49,6 +49,8 @@ #include "BKE_main.h" #include "BKE_screen.h" +#include "DEG_depsgraph.h" + #include "ED_armature.h" #include "ED_particle.h" #include "ED_curve.h" @@ -77,6 +79,8 @@ void ED_undo_push(bContext *C, const char *str) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Object *obedit = CTX_data_edit_object(C); Object *obact = CTX_data_active_object(C); @@ -102,12 +106,12 @@ void ED_undo_push(bContext *C, const char *str) else if (obedit->type == OB_ARMATURE) undo_push_armature(C, str); } - else if (obact && obact->mode & OB_MODE_PARTICLE_EDIT) { + else if (obact && eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT) { if (U.undosteps == 0) return; PE_undo_push(CTX_data_scene(C), CTX_data_view_layer(C), str); } - else if (obact && obact->mode & OB_MODE_SCULPT) { + else if (obact && eval_ctx.object_mode & OB_MODE_SCULPT) { /* do nothing for now */ } else { @@ -120,6 +124,8 @@ void ED_undo_push(bContext *C, const char *str) /* note: also check undo_history_exec() in bottom if you change notifiers */ static int ed_undo_step(bContext *C, int step, const char *undoname) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); wmWindowManager *wm = CTX_wm_manager(C); wmWindow *win = CTX_wm_window(C); Main *bmain = CTX_data_main(C); @@ -143,7 +149,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname) if (sa && (sa->spacetype == SPACE_IMAGE)) { SpaceImage *sima = (SpaceImage *)sa->spacedata.first; - if ((obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) { + if ((obact && (eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) { if (!ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step, undoname) && undoname) { if (U.uiflag & USER_GLOBALUNDO) { ED_viewport_render_kill_jobs(wm, bmain, true); @@ -177,13 +183,13 @@ static int ed_undo_step(bContext *C, int step, const char *undoname) * That was inconsistent with editmode, and also makes for * unecessarily tricky interaction with the other undo * systems. */ - if (obact && obact->mode & OB_MODE_TEXTURE_PAINT) { + if (obact && eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT) { ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step, undoname); } - else if (obact && obact->mode & OB_MODE_SCULPT) { + else if (obact && eval_ctx.object_mode & OB_MODE_SCULPT) { ED_undo_paint_step(C, UNDO_PAINT_MESH, step, undoname); } - else if (obact && obact->mode & OB_MODE_PARTICLE_EDIT) { + else if (obact && eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT) { if (step == 1) PE_undo(scene, view_layer); else @@ -269,6 +275,9 @@ void ED_undo_pop_op(bContext *C, wmOperator *op) /* name optionally, function used to check for operator redo panel */ bool ED_undo_is_valid(const bContext *C, const char *undoname) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); + Object *obedit = CTX_data_edit_object(C); Object *obact = CTX_data_active_object(C); ScrArea *sa = CTX_wm_area(C); @@ -276,7 +285,7 @@ bool ED_undo_is_valid(const bContext *C, const char *undoname) if (sa && sa->spacetype == SPACE_IMAGE) { SpaceImage *sima = (SpaceImage *)sa->spacedata.first; - if ((obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) { + if ((obact && (eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) { return 1; } } @@ -293,15 +302,15 @@ bool ED_undo_is_valid(const bContext *C, const char *undoname) /* if below tests fail, global undo gets executed */ - if (obact && obact->mode & OB_MODE_TEXTURE_PAINT) { + if (obact && eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT) { if (ED_undo_paint_is_valid(UNDO_PAINT_IMAGE, undoname)) return 1; } - else if (obact && obact->mode & OB_MODE_SCULPT) { + else if (obact && eval_ctx.object_mode & OB_MODE_SCULPT) { if (ED_undo_paint_is_valid(UNDO_PAINT_MESH, undoname)) return 1; } - else if (obact && obact->mode & OB_MODE_PARTICLE_EDIT) { + else if (obact && eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT) { return PE_undo_is_valid(CTX_data_scene(C), CTX_data_view_layer(C)); } @@ -497,6 +506,8 @@ enum { static int get_undo_system(bContext *C) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); Object *obact = CTX_data_active_object(C); Object *obedit = CTX_data_edit_object(C); ScrArea *sa = CTX_wm_area(C); @@ -505,7 +516,7 @@ static int get_undo_system(bContext *C) if (sa && (sa->spacetype == SPACE_IMAGE)) { SpaceImage *sima = (SpaceImage *)sa->spacedata.first; - if ((obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) { + if ((obact && (eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) { if (!ED_undo_paint_empty(UNDO_PAINT_IMAGE)) return UNDOSYSTEM_IMAPAINT; } @@ -518,13 +529,13 @@ static int get_undo_system(bContext *C) } else { if (obact) { - if (obact->mode & OB_MODE_PARTICLE_EDIT) + if (eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT) return UNDOSYSTEM_PARTICLE; - else if (obact->mode & OB_MODE_TEXTURE_PAINT) { + else if (eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT) { if (!ED_undo_paint_empty(UNDO_PAINT_IMAGE)) return UNDOSYSTEM_IMAPAINT; } - else if (obact->mode & OB_MODE_SCULPT) { + else if (eval_ctx.object_mode & OB_MODE_SCULPT) { if (!ED_undo_paint_empty(UNDO_PAINT_MESH)) return UNDOSYSTEM_SCULPT; } diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c index 45fa35766f1..6a8d13574f3 100644 --- a/source/blender/editors/uvedit/uvedit_draw.c +++ b/source/blender/editors/uvedit/uvedit_draw.c @@ -1032,7 +1032,9 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, ViewLayer *view_layer, Obje } -static void draw_uv_shadows_get(SpaceImage *sima, Object *ob, Object *obedit, bool *show_shadow, bool *show_texpaint) +static void draw_uv_shadows_get( + SpaceImage *sima, const EvaluationContext *eval_ctx, Object *ob, Object *obedit, + bool *show_shadow, bool *show_texpaint) { *show_shadow = *show_texpaint = false; @@ -1045,16 +1047,18 @@ static void draw_uv_shadows_get(SpaceImage *sima, Object *ob, Object *obedit, bo *show_shadow = EDBM_uv_check(em); } - *show_texpaint = (ob && ob->type == OB_MESH && ob->mode == OB_MODE_TEXTURE_PAINT); + *show_texpaint = (ob && ob->type == OB_MESH && eval_ctx->object_mode == OB_MODE_TEXTURE_PAINT); } -void ED_uvedit_draw_main(SpaceImage *sima, ARegion *ar, Scene *scene, ViewLayer *view_layer, Object *obedit, Object *obact, Depsgraph *depsgraph) +void ED_uvedit_draw_main( + SpaceImage *sima, const EvaluationContext *eval_ctx, + ARegion *ar, Scene *scene, ViewLayer *view_layer, Object *obedit, Object *obact, Depsgraph *depsgraph) { ToolSettings *toolsettings = scene->toolsettings; bool show_uvedit, show_uvshadow, show_texpaint_uvshadow; show_uvedit = ED_space_image_show_uvedit(sima, obedit); - draw_uv_shadows_get(sima, obact, obedit, &show_uvshadow, &show_texpaint_uvshadow); + draw_uv_shadows_get(sima, eval_ctx, obact, obedit, &show_uvshadow, &show_texpaint_uvshadow); if (show_uvedit || show_uvshadow || show_texpaint_uvshadow) { if (show_uvshadow) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index f6019747b45..7d17af4addb 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -869,7 +869,7 @@ static int rna_SpaceImageEditor_show_maskedit_get(PointerRNA *ptr) Scene *scene = ED_screen_scene_find(sc, G.main->wm.first); ViewLayer *view_layer = BKE_view_layer_context_active_PLACEHOLDER(scene); - return ED_space_image_check_show_maskedit(view_layer, sima); + return ED_space_image_check_show_maskedit(sima, view_layer); } static void rna_SpaceImageEditor_image_set(PointerRNA *ptr, PointerRNA value) diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt index 4fefad3ffdf..230918776dc 100644 --- a/source/blender/nodes/CMakeLists.txt +++ b/source/blender/nodes/CMakeLists.txt @@ -32,6 +32,7 @@ set(INC ../blenkernel ../blenlib ../blentranslation + ../depsgraph ../gpu ../imbuf ../makesdna diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c index dcae9d2345f..5eb6fcdba22 100644 --- a/source/blender/nodes/texture/node_texture_tree.c +++ b/source/blender/nodes/texture/node_texture_tree.c @@ -53,13 +53,17 @@ #include "NOD_texture.h" #include "node_texture_util.h" +#include "DEG_depsgraph.h" + #include "RNA_access.h" #include "RE_shader_ext.h" - -static void texture_get_from_context(const bContext *C, bNodeTreeType *UNUSED(treetype), bNodeTree **r_ntree, ID **r_id, ID **r_from) +static void texture_get_from_context( + const bContext *C, bNodeTreeType *UNUSED(treetype), bNodeTree **r_ntree, ID **r_id, ID **r_from) { + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); SpaceNode *snode = CTX_wm_space_node(C); Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); @@ -94,7 +98,7 @@ static void texture_get_from_context(const bContext *C, bNodeTreeType *UNUSED(tr else if (snode->texfrom == SNODE_TEX_BRUSH) { struct Brush *brush = NULL; - if (ob && (ob->mode & OB_MODE_SCULPT)) + if (ob && (eval_ctx.object_mode & OB_MODE_SCULPT)) brush = BKE_paint_brush(&scene->toolsettings->sculpt->paint); else brush = BKE_paint_brush(&scene->toolsettings->imapaint.paint); diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 19a87784ad4..245cbb96e85 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -1293,6 +1293,7 @@ static void get_particle_uvco_mcol(short from, DerivedMesh *dm, float *fuv, int } static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem *psys, int timeoffset) { + const EvaluationContext *eval_ctx = RE_GetEvalCtx(re); Object *ob= obr->ob; // Object *tob=0; Material *ma = NULL; @@ -1339,7 +1340,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem if (part->ren_as==PART_DRAW_OB || part->ren_as==PART_DRAW_GR || part->ren_as==PART_DRAW_NOT) return 1; - if ((re->r.scemode & R_VIEWPORT_PREVIEW) && (ob->mode & OB_MODE_PARTICLE_EDIT)) + if ((re->r.scemode & R_VIEWPORT_PREVIEW) && (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT)) return 0; if (part->ren_as == PART_DRAW_BB && part->bb_ob == NULL && RE_GetCamera(re) == NULL) -- cgit v1.2.3