[Bf-blender-cvs] [8a410572c29] temp-object-multi-mode: Merge branch '28' into temp-object-multi-mode

Campbell Barton noreply at git.blender.org
Sat Apr 7 11:53:54 CEST 2018


Commit: 8a410572c295243649d66c8834b87d4e7d7b33ce
Author: Campbell Barton
Date:   Sat Apr 7 10:57:26 2018 +0200
Branches: temp-object-multi-mode
https://developer.blender.org/rB8a410572c295243649d66c8834b87d4e7d7b33ce

Merge branch '28' into temp-object-multi-mode

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



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

diff --cc source/blender/blenkernel/BKE_object.h
index 7596a33afa7,c5eefedcfad..63a89ffb34c
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@@ -83,11 -81,9 +81,11 @@@ void BKE_object_make_proxy(struct Objec
  void BKE_object_copy_proxy_drivers(struct Object *ob, struct Object *target);
  
  bool BKE_object_exists_check(struct Object *obtest);
 -bool BKE_object_is_in_editmode(struct Object *ob);
 +bool BKE_object_is_in_editmode(const struct Object *ob);
  bool BKE_object_is_in_editmode_vgroup(struct Object *ob);
 +bool BKE_object_is_in_editmode_and_selected(const struct Object *ob);
- bool BKE_object_is_in_wpaint_select_vert(const struct Object *ob, eObjectMode object_mode);
+ bool BKE_object_is_in_wpaint_select_vert(const struct Object *ob);
 +bool BKE_object_has_mode_data(const struct Object *ob, eObjectMode object_mode);
  
  typedef enum eObjectVisibilityCheck {
  	OB_VISIBILITY_CHECK_FOR_VIEWPORT,
diff --cc source/blender/blenkernel/intern/object_update.c
index 199e91a3dd9,de2002624c0..e6ec7e7cce3
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@@ -172,15 -172,7 +172,15 @@@ void BKE_object_handle_data_update
  	switch (ob->type) {
  		case OB_MESH:
  		{
 +#if 0
- 			BMEditMesh *em = (eval_ctx->object_mode & OB_MODE_EDIT) ? BKE_editmesh_from_object(ob) : NULL;
+ 			BMEditMesh *em = (ob->mode & OB_MODE_EDIT) ? BKE_editmesh_from_object(ob) : NULL;
 +#else
- 			BMEditMesh *em = (eval_ctx->object_mode & OB_MODE_EDIT) ? ((Mesh *)ob->data)->edit_btmesh : NULL;
++			BMEditMesh *em = (ob->mode & OB_MODE_EDIT) ? ((Mesh *)ob->data)->edit_btmesh : NULL;
 +			if (em && em->ob != ob) {
 +				em = NULL;
 +			}
 +#endif
 +
  			uint64_t data_mask = scene->customdata_mask | CD_MASK_BAREMESH;
  #ifdef WITH_FREESTYLE
  			/* make sure Freestyle edge/face marks appear in DM for render (see T40315) */
diff --cc source/blender/editors/include/ED_object.h
index 48b029d106d,ebd9313f7c5..19189191b3b
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@@ -125,12 -124,9 +124,12 @@@ void ED_object_parent(struct Object *ob
  #define EM_WAITCURSOR   4
  #define EM_DO_UNDO      8
  #define EM_IGNORE_LAYER 16
 +#define EM_NO_CONTEXT 32
  void ED_object_editmode_exit_ex(
-         struct bContext *C, struct WorkSpace *workspace, struct Scene *scene, struct Object *obedit, int flag);
+         struct bContext *C, struct Scene *scene, struct Object *obedit, int flag);
  void ED_object_editmode_exit(struct bContext *C, int flag);
 +
- void ED_object_editmode_enter_ex(struct WorkSpace *workspace, struct Scene *scene, struct Object *ob, int flag);
++void ED_object_editmode_enter_ex(struct Scene *scene, struct Object *ob, int flag);
  void ED_object_editmode_enter(struct bContext *C, int flag);
  bool ED_object_editmode_load(struct Object *obedit);
  
diff --cc source/blender/editors/include/ED_uvedit.h
index 0a6f9345078,2a5ad494643..2b619fa12e6
--- a/source/blender/editors/include/ED_uvedit.h
+++ b/source/blender/editors/include/ED_uvedit.h
@@@ -132,9 -129,9 +132,9 @@@ void ED_unwrap_lscm(struct Scene *scene
  
  /* uvedit_draw.c */
  void ED_image_draw_cursor(
 -struct ARegion *ar, const float cursor[2]);
 +       struct ARegion *ar, const float cursor[2]);
  void ED_uvedit_draw_main(
-         struct SpaceImage *sima, const struct EvaluationContext *eval_ctx,
+         struct SpaceImage *sima,
          struct ARegion *ar, struct Scene *scene, struct ViewLayer *view_layer,
          struct Object *obedit, struct Object *obact, struct Depsgraph *depsgraph);
  
diff --cc source/blender/editors/object/object_edit.c
index 23cb7667847,9306213581e..19e9eb1d6f4
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@@ -275,9 -274,12 +275,9 @@@ bool ED_object_editmode_load(Object *ob
   * - Only in exceptional cases should #EM_DO_UNDO NOT be in the flag.
   * - If #EM_FREEDATA isn't in the flag, use ED_object_editmode_load directly.
   */
- void ED_object_editmode_exit_ex(bContext *C, WorkSpace *workspace, Scene *scene, Object *obedit, int flag)
+ void ED_object_editmode_exit_ex(bContext *C, Scene *scene, Object *obedit, int flag)
  {
  	BLI_assert(C || !(flag & EM_DO_UNDO));
 -	/* Note! only in exceptional cases should 'EM_DO_UNDO' NOT be in the flag */
 -	/* Note! if 'EM_FREEDATA' isn't in the flag, use ED_object_editmode_load directly */
 -	ViewLayer *view_layer = CTX_data_view_layer(C);
  	const bool freedata = (flag & EM_FREEDATA) != 0;
  
  	if (flag & EM_WAITCURSOR) waitcursor(1);
@@@ -285,7 -287,9 +285,9 @@@
  	if (ED_object_editmode_load_ex(G.main, obedit, freedata) == false) {
  		/* in rare cases (background mode) its possible active object
  		 * is flagged for editmode, without 'obedit' being set [#35489] */
- 		workspace->object_mode &= ~OB_MODE_EDIT;
 -		if (UNLIKELY(view_layer->basact && (view_layer->basact->object->mode & OB_MODE_EDIT))) {
 -			view_layer->basact->object->mode &= ~OB_MODE_EDIT;
++		if (UNLIKELY(obedit && obedit->mode & OB_MODE_EDIT)) {
++			obedit->mode &= ~OB_MODE_EDIT;
+ 		}
  		if (flag & EM_WAITCURSOR) waitcursor(0);
  		return;
  	}
@@@ -313,36 -315,43 +313,33 @@@
  		if (flag & EM_DO_UNDO)
  			ED_undo_push(C, "Editmode");
  
 -		WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene);
 +		if (C != NULL) {
 +			WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene);
 +		}
 +		else {
 +			WM_main_add_notifier(NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene);
 +		}
- 	}
 +
- 	ED_workspace_object_mode_sync_from_object(G.main->wm.first, workspace, obedit);
  
- 	if (flag & EM_WAITCURSOR) waitcursor(0);
+ 		obedit->mode &= ~OB_MODE_EDIT;
+ 	}
  
- 	/* This way we ensure scene's obedit is copied into all CoW scenes.  */
- 	DEG_id_tag_update(&scene->id, 0);
+ 	if (flag & EM_WAITCURSOR) waitcursor(0);
 -
 -	/* This way we ensure scene's obedit is copied into all CoW scenes.  */
 -	DEG_id_tag_update(&scene->id, 0);
  }
  
  void ED_object_editmode_exit(bContext *C, int flag)
  {
- 	WorkSpace *workspace = CTX_wm_workspace(C);
  	Scene *scene = CTX_data_scene(C);
  	Object *obedit = CTX_data_edit_object(C);
- 	ED_object_editmode_exit_ex(C, workspace, scene, obedit, flag);
+ 	ED_object_editmode_exit_ex(C, scene, obedit, flag);
  }
  
- void ED_object_editmode_enter_ex(WorkSpace *workspace, Scene *scene, Object *ob, int flag)
 -void ED_object_editmode_enter(bContext *C, int flag)
++void ED_object_editmode_enter_ex(Scene *scene, Object *ob, int flag)
  {
 -	Scene *scene = CTX_data_scene(C);
 -	ViewLayer *view_layer = CTX_data_view_layer(C);
 -	Object *ob;
  	bool ok = false;
  
 -	if (ID_IS_LINKED(scene)) return;
 -
 -	if ((flag & EM_IGNORE_LAYER) == 0) {
 -		ob = CTX_data_active_object(C); /* active layer checked here for view3d */
 -
 -		if (ob == NULL) return;
 -	}
 -	else {
 -		ob = view_layer->basact->object;
 -	}
 -
  	if (ELEM(NULL, ob, ob->data)) return;
 +	if (ID_IS_LINKED(ob)) return;
  
  	/* this checks actual object->data, for cases when other scenes have it in editmode context */
  	if (BKE_object_is_in_editmode(ob))
@@@ -355,6 -364,15 +352,10 @@@
  
  	if (flag & EM_WAITCURSOR) waitcursor(1);
  
+ 	ob->restore_mode = ob->mode;
+ 
 -	/* note, when switching scenes the object can have editmode data but
 -	 * not be scene->obedit: bug 22954, this avoids calling self eternally */
 -	if ((ob->restore_mode & OB_MODE_EDIT) == 0)
 -		ED_object_mode_toggle(C, ob->mode);
 -
+ 	ob->mode = OB_MODE_EDIT;
+ 
  	if (ob->type == OB_MESH) {
  		BMEditMesh *em;
  		ok = 1;
@@@ -420,38 -438,16 +421,35 @@@
  
  	if (ok) {
  		DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
 -		/* This way we ensure scene's obedit is copied into all CoW scenes.  */
 -		DEG_id_tag_update(&scene->id, 0);
  	}
  	else {
 -		ob->mode &= ~OB_MODE_EDIT;
 -		WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene);
 +		if ((flag & EM_NO_CONTEXT) == 0) {
- 			workspace->object_mode &= ~OB_MODE_EDIT;
++			ob->mode &= ~OB_MODE_EDIT;
 +		}
 +		WM_main_add_notifier(NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene);
  	}
  
- 	ED_workspace_object_mode_sync_from_object(G.main->wm.first, workspace, ob);
- 
 -	if (flag & EM_DO_UNDO) ED_undo_push(C, "Enter Editmode");
  	if (flag & EM_WAITCURSOR) waitcursor(0);
 +	BLI_assert((flag & EM_DO_UNDO) == 0);
 +}
 +
 +void ED_object_editmode_enter(bContext *C, int flag)
 +{
- 	WorkSpace *workspace = CTX_wm_workspace(C);
 +	Scene *scene = CTX_data_scene(C);
 +	ViewLayer *view_layer = CTX_data_view_layer(C);
 +	Object *ob;
 +
 +	if ((flag & EM_IGNORE_LAYER) == 0) {
 +		ob = CTX_data_active_object(C); /* active layer checked here for view3d */
 +	}
 +	else {
 +		ob = view_layer->basact->object;
 +	}
 +	if (ob == NULL) return;
 +	if (ID_IS_LINKED(ob)) return;
 +
- 	ED_object_editmode_enter_ex(workspace, scene, ob, flag & ~EM_DO_UNDO);
++	ED_object_editmode_enter_ex(scene, ob, flag & ~EM_DO_UNDO);
 +	if (flag & EM_DO_UNDO) ED_undo_push(C, "Enter Editmode");
  }
  
  static int editmode_toggle_exec(bContext *C, wmOperator *op)
@@@ -459,43 -455,18 +457,32 @@@
  	const int mode_flag = OB_MODE_EDIT;
  	const bool is_mode_set = (CTX_data_edit_object(C) != NULL);
  	Scene *scene =  CTX_data_scene(C);
++	ViewLayer *view_layer = CTX_data_view_layer(C);
++	Object *obact = OBACT(view_layer);
  
  	if (!is_mode_set) {
- 		if (!ED_object_mode_compat_set(C, workspace, mode_flag, op->reports)) {
 -		Object *ob = CTX_data_active_object(C);
 -		if (!ED_object_mode_compat_set(C, ob, mode_flag, op->reports)) {
++		if (!ED_object_mode_compat_set(C, obact, mode_flag, op->reports)) {
  			return OPERATOR_CANCELLED;
  		}
  	}
  
 -	if (!is_mode_set)
 +	if (!is_mode_set) {
- 		Object *obact = view_layer->basact->object;
- 
- 		workspace->object_mode_restore = workspace->object_mode;
- 
- 		/* note, when switching scenes the object can have editmode data but
- 		 * not be scene->obedit: bug 22954, this avoids calling self eternally */
- 		if ((workspace->object_mode_restore & OB_MODE_EDIT) == 0) {
- 			ED_object_mode_toggle(C, workspace->object_mode);
- 		}
- 		workspace->object_mode = OB_MODE_EDIT;
- 
  		ED_object_editmode_enter(C, EM_WAITCURSOR);
- 		if (works

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list