[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