[Bf-blender-cvs] [840612bd9d2] greasepencil-object: More compile Fixes for object->mode refactor

Joshua Leung noreply at git.blender.org
Fri Feb 9 07:32:52 CET 2018


Commit: 840612bd9d2ecff65cf14492375c8618f4c49a04
Author: Joshua Leung
Date:   Fri Feb 9 19:32:17 2018 +1300
Branches: greasepencil-object
https://developer.blender.org/rB840612bd9d2ecff65cf14492375c8618f4c49a04

More compile Fixes for object->mode refactor

TODO: I've come across some rather fishy-looking code in a few places
      that will need more careful review later

* gpencil-select.c - 1181
* object_edit.c - 1596
* view3d_select.c - 1626
* undo.c - 230

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

M	source/blender/editors/gpencil/gpencil_brush.c
M	source/blender/editors/gpencil/gpencil_paint.c
M	source/blender/editors/gpencil/gpencil_select.c
M	source/blender/editors/object/object_edit.c
M	source/blender/editors/object/object_modifier.c
M	source/blender/editors/space_outliner/outliner_select.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/editors/util/undo.c

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

diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c
index bc1a0ceba46..401e2566a78 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -194,11 +194,11 @@ static GP_BrushEdit_Settings *gpsculpt_get_settings(Scene *scene)
 }
 
 /* Get the active brush */
-static GP_EditBrush_Data *gpsculpt_get_brush(Scene *scene, Object *ob)
+static GP_EditBrush_Data *gpsculpt_get_brush(Scene *scene, bool is_weight_mode)
 {
 	GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt;
 	GP_EditBrush_Data *brush = NULL;
-	if ((ob) && (ob->mode == OB_MODE_GPENCIL_WEIGHT)) {
+	if (is_weight_mode) {
 		brush = &gset->brush[gset->weighttype];
 	}
 	else {
@@ -1136,6 +1136,9 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op)
 	Scene *scene = CTX_data_scene(C);
 	ToolSettings *ts = CTX_data_tool_settings(C);
 	Object *ob = CTX_data_active_object(C);
+	
+	WorkSpace *workspace = CTX_wm_workspace(C);
+	const bool is_weight_mode = (workspace->object_mode == OB_MODE_GPENCIL_WEIGHT);
 
 	tGP_BrushEditData *gso;
 	
@@ -1145,9 +1148,9 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op)
 	
 	/* store state */
 	gso->settings = gpsculpt_get_settings(scene);
-	gso->brush = gpsculpt_get_brush(scene, ob);
+	gso->brush = gpsculpt_get_brush(scene, is_weight_mode);
 	
-	if ((ob) && (ob->mode == OB_MODE_GPENCIL_WEIGHT)) {
+	if (is_weight_mode) {
 		gso->brush_type = gso->settings->weighttype;
 	}
 	else {
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index 8738fd11a1d..2f2b55086cf 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -2489,6 +2489,7 @@ static int gpencil_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event
 		Object *ob = CTX_data_active_object(C);
 		Scene *scene = CTX_data_scene(C);
 		WorkSpace *workspace = CTX_wm_workspace(C);
+		ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene);
 		if (ob && (ob->type == OB_GPENCIL) && ((p->gpd->flag & GP_DATA_STROKE_PAINTMODE) == 0)) {
 			/* Just set paintmode flag... */
 			p->gpd->flag |= GP_DATA_STROKE_PAINTMODE;
@@ -2496,9 +2497,10 @@ static int gpencil_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event
 			p->gpd->flag &= ~GP_DATA_STROKE_EDITMODE;
 			p->gpd->flag &= ~GP_DATA_STROKE_SCULPTMODE;
 			p->gpd->flag &= ~GP_DATA_STROKE_WEIGHTMODE;
-			ob->mode = OB_MODE_GPENCIL_PAINT;
 			/* set workspace mode */
-			BKE_workspace_object_mode_set(workspace, scene, ob->mode);
+			workspace->object_mode_restore = workspace->object_mode;
+			workspace->object_mode = OB_MODE_GPENCIL_PAINT;
+			ED_object_base_activate(C, view_layer->basact); // XXX
 			/* redraw mode on screen */
 			WM_event_add_notifier(C, NC_SCENE | ND_MODE, NULL);
 		}
diff --git a/source/blender/editors/gpencil/gpencil_select.c b/source/blender/editors/gpencil/gpencil_select.c
index f03f33ef086..2e924a7be0f 100644
--- a/source/blender/editors/gpencil/gpencil_select.c
+++ b/source/blender/editors/gpencil/gpencil_select.c
@@ -1176,20 +1176,22 @@ void GPENCIL_OT_select_lasso(wmOperatorType *ot)
 static int gpencil_select_exec(bContext *C, wmOperator *op)
 {
 	ScrArea *sa = CTX_wm_area(C);
+	bGPdata *gpd = ED_gpencil_data_get_active(C);
+	
+#if 0 // XXX: This is some weird hacked-on stuff... Needs careful review (Aligorith)
 	/* if not edit mode, can select other objects */
 	if ((sa) && (sa->spacetype == SPACE_VIEW3D)) {
-		Object *ob = CTX_data_active_object(C);
-		if ((ob) && (ob->mode != OB_MODE_GPENCIL_EDIT)) {
+		WorkSpace *workspace = CTX_wm_workspace(C);
+		if (workspace->object_mode != OB_MODE_GPENCIL_EDIT) {
 			return OPERATOR_PASS_THROUGH;
 		}
 	}
 
-	bGPdata *gpd = ED_gpencil_data_get_active(C);
 	/* if not edit mode, the event is catched but not processed */
 	if ((!gpd) || (gpd->flag & GP_DATA_STROKE_EDITMODE) == 0) {
 		return OPERATOR_CANCELLED;
 	}
-
+#endif
 	
 	/* "radius" is simply a threshold (screen space) to make it easier to test with a tolerance */
 	const float radius = 0.75f * U.widget_unit;
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 56fd67977f6..dd41cd0900a 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -1593,42 +1593,43 @@ static int object_mode_set_exec(bContext *C, wmOperator *op)
 	eObjectMode restore_mode = workspace->object_mode;
 	const bool toggle = RNA_boolean_get(op->ptr, "toggle");
 
-	/* if type is OB_GPENCIL, select mode for grease pencil strokes */	
+	/* if type is OB_GPENCIL, select mode for grease pencil strokes */
+	// XXX: Review this behaviour... something seems sketchy here (Aligorith)	
 	if ((ob) && (ob->type == OB_GPENCIL)) {
 		if ((ob->data) && (ob->data == gpd)) {
 			if (ELEM(mode, OB_MODE_OBJECT, OB_MODE_EDIT, OB_MODE_POSE)) {
-				ob->restore_mode = OB_MODE_OBJECT;
-				if (ELEM(ob->mode, OB_MODE_OBJECT, OB_MODE_EDIT, OB_MODE_GPENCIL_EDIT)) {
+				workspace->object_mode_restore = OB_MODE_OBJECT;
+				if (ELEM(workspace->object_mode, OB_MODE_OBJECT, OB_MODE_EDIT, OB_MODE_GPENCIL_EDIT)) {
 					WM_operator_name_call(C, "GPENCIL_OT_editmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
 				}
-				if (ob->mode == OB_MODE_GPENCIL_PAINT) {
+				if (workspace->object_mode == OB_MODE_GPENCIL_PAINT) {
 					WM_operator_name_call(C, "GPENCIL_OT_paintmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
 				}
-				if (ob->mode == OB_MODE_GPENCIL_SCULPT) {
+				if (workspace->object_mode == OB_MODE_GPENCIL_SCULPT) {
 					WM_operator_name_call(C, "GPENCIL_OT_sculptmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
 				}
-				if (ob->mode == OB_MODE_GPENCIL_WEIGHT) {
+				if (workspace->object_mode == OB_MODE_GPENCIL_WEIGHT) {
 					WM_operator_name_call(C, "GPENCIL_OT_weightmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
 				}
 				return OPERATOR_FINISHED;
 			}
 			if (mode == OB_MODE_GPENCIL_EDIT) {
-				ob->restore_mode = ob->mode;
+				workspace->object_mode_restore = workspace->object_mode;
 				WM_operator_name_call(C, "GPENCIL_OT_editmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
 				return OPERATOR_FINISHED;
 			}
 			if (mode == OB_MODE_GPENCIL_PAINT) {
-				ob->restore_mode = ob->mode;
+				workspace->object_mode_restore = workspace->object_mode;
 				WM_operator_name_call(C, "GPENCIL_OT_paintmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
 				return OPERATOR_FINISHED;
 			}
 			if (mode == OB_MODE_GPENCIL_SCULPT) {
-				ob->restore_mode = ob->mode;
+				workspace->object_mode_restore = workspace->object_mode;
 				WM_operator_name_call(C, "GPENCIL_OT_sculptmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
 				return OPERATOR_FINISHED;
 			}
 			if (mode == OB_MODE_GPENCIL_WEIGHT) {
-				ob->restore_mode = ob->mode;
+				workspace->object_mode_restore = workspace->object_mode;
 				WM_operator_name_call(C, "GPENCIL_OT_weightmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
 				return OPERATOR_FINISHED;
 			}
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 58da1f748e0..402acdecbf3 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -717,7 +717,7 @@ int ED_object_modifier_apply(ReportList *reports, const bContext *C, Scene *scen
 		return 0;
 	}
 	else if (ob->type == OB_GPENCIL) {
-		if (ob->mode != OB_MODE_OBJECT) {
+		if (eval_ctx.object_mode != OB_MODE_OBJECT) {
 			BKE_report(reports, RPT_ERROR, "Modifiers cannot be applied in paint, sculpt or edit mode");
 			return 0;
 		}
diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c
index 0ff61403032..81c93b0c56c 100644
--- a/source/blender/editors/space_outliner/outliner_select.c
+++ b/source/blender/editors/space_outliner/outliner_select.c
@@ -200,25 +200,30 @@ static eOLDrawState tree_element_set_active_object(
 	
 	/* set special grease pencil modes */
 	if (ob->type == OB_GPENCIL) {
+		WorkSpace *workspace = CTX_wm_workspace(C);
+		wmWindow *win = CTX_wm_window(C);
+		
 		/* set cursor */
-		if (ob->mode == OB_MODE_GPENCIL_PAINT) {
-			WM_cursor_modal_set(CTX_wm_window(C), BC_PAINTBRUSHCURSOR);
+		if (workspace->object_mode == OB_MODE_GPENCIL_PAINT) {
+			WM_cursor_modal_set(win, BC_PAINTBRUSHCURSOR);
 			ED_gpencil_toggle_brush_cursor(C, false, NULL);
 		}
-		else if (ob->mode == OB_MODE_GPENCIL_SCULPT) {
-			WM_cursor_modal_set(CTX_wm_window(C), BC_CROSSCURSOR);
+		else if (workspace->object_mode == OB_MODE_GPENCIL_SCULPT) {
+			WM_cursor_modal_set(win, BC_CROSSCURSOR);
 			ED_gpencil_toggle_brush_cursor(C, true, NULL);
 		}
-		else if (ob->mode == OB_MODE_GPENCIL_WEIGHT) {
-			WM_cursor_modal_set(CTX_wm_window(C), BC_CROSSCURSOR);
+		else if (workspace->object_mode == OB_MODE_GPENCIL_WEIGHT) {
+			WM_cursor_modal_set(win, BC_CROSSCURSOR);
 			ED_gpencil_toggle_brush_cursor(C, true, NULL);
 		}
 		else {
-			WM_cursor_modal_set(CTX_wm_window(C), CURSOR_STD);
+			WM_cursor_modal_set(win, CURSOR_STD);
 			ED_gpencil_toggle_brush_cursor(C, false, NULL);
 		}
 		/* set workspace mode */
-		BKE_workspace_object_mode_set(CTX_wm_workspace(C), scene, ob->mode);
+		workspace->object_mode_restore = workspace->object_mode;
+		workspace->object_mode = OB_MODE_GPENCIL_PAINT;
+		ED_object_base_activate(C, view_layer->basact); // XXX
 	}
 
 	if (ob != scene->obedit)
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 5284835d70c..0c424a9e674 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -1623,6 +1623,8 @@ static bool ed_object_select_pick(
 			/* Set special modes for grease pencil 
 			   The grease pencil modes are not real modes, but a hack to make the interface
 			   consistent, so need some tricks to keep UI synchronized */
+			// XXX: This stuff neeeds reviewing (Aligorith)
+#if 0
 			if (((oldbasact) && oldbasact->object->type == OB_GPENCIL) || (basact->object->type == OB_GPENCIL)) {
 				/* set cursor */
 				if

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list