[Bf-blender-cvs] [949e56dff1e] master: Fix screen split preview refresh issues

Campbell Barton noreply at git.blender.org
Sat Jan 20 14:34:13 CET 2018


Commit: 949e56dff1eef37565aee07af03b6040e67ab21d
Author: Campbell Barton
Date:   Sun Jan 21 00:39:06 2018 +1100
Branches: master
https://developer.blender.org/rB949e56dff1eef37565aee07af03b6040e67ab21d

Fix screen split preview refresh issues

Switching direction didn't refresh, also cursors were flipped.

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

M	source/blender/editors/screen/screen_ops.c

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

diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index c4be0a2259f..e43f95f788b 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -1586,6 +1586,12 @@ static void area_split_exit(bContext *C, wmOperator *op)
 	removedouble_scredges(CTX_wm_screen(C));
 }
 
+static void area_split_preview_update_cursor(bContext *C, wmOperator *op)
+{
+	wmWindow *win = CTX_wm_window(C);
+	int dir = RNA_enum_get(op->ptr, "direction");
+	WM_cursor_set(win, (dir == 'v') ? CURSOR_X_MOVE : CURSOR_Y_MOVE);
+}
 
 /* UI callback, adds new handler */
 static int area_split_invoke(bContext *C, wmOperator *op, const wmEvent *event)
@@ -1683,7 +1689,8 @@ static int area_split_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 		sd->draw_callback = WM_draw_cb_activate(win, area_split_draw_cb, op);
 		/* add temp handler for edge move or cancel */
 		WM_event_add_modal_handler(C, op);
-		
+		area_split_preview_update_cursor(C, op);
+
 		return OPERATOR_RUNNING_MODAL;
 		
 	}
@@ -1726,14 +1733,15 @@ static void area_split_cancel(bContext *C, wmOperator *op)
 static int area_split_modal(bContext *C, wmOperator *op, const wmEvent *event)
 {
 	sAreaSplitData *sd = (sAreaSplitData *)op->customdata;
-	float fac;
-	int dir;
-	
+	PropertyRNA *prop_dir = RNA_struct_find_property(op->ptr, "direction");
+	bool update_factor = false;
+
 	/* execute the events */
 	switch (event->type) {
 		case MOUSEMOVE:
-			dir = RNA_enum_get(op->ptr, "direction");
-			
+		{
+			const int dir = RNA_property_enum_get(op->ptr, prop_dir);
+
 			sd->delta = (dir == 'v') ? event->x - sd->origval : event->y - sd->origval;
 			if (sd->previewmode == 0)
 				area_move_apply_do(C, sd->delta, sd->origval, dir, sd->bigger, sd->smaller, sd->do_snap);
@@ -1743,39 +1751,17 @@ static int area_split_modal(bContext *C, wmOperator *op, const wmEvent *event)
 				}
 				/* area context not set */
 				sd->sarea = BKE_screen_find_area_xy(CTX_wm_screen(C), SPACE_TYPE_ANY, event->x, event->y);
-				
+
 				if (sd->sarea) {
 					ED_area_tag_redraw(sd->sarea);
-					if (dir == 'v') {
-						sd->origsize = sd->sarea->winx;
-						sd->origmin = sd->sarea->totrct.xmin;
-					}
-					else {
-						sd->origsize = sd->sarea->winy;
-						sd->origmin = sd->sarea->totrct.ymin;
-					}
-
-					if (sd->do_snap) {
-						ScrArea *sa = sd->sarea;
-						sa->v1->editflag = sa->v2->editflag = sa->v3->editflag = sa->v4->editflag = 1;
-
-						int snap_loc = area_snap_calc_location(
-						        CTX_wm_screen(C), sd->delta, sd->origval, dir, sd->origmin + sd->origsize, -sd->origmin);
-
-						sa->v1->editflag = sa->v2->editflag = sa->v3->editflag = sa->v4->editflag = 0;
-						fac = snap_loc - sd->origmin;
-					}
-					else {
-						fac = (dir == 'v') ? event->x - sd->origmin : event->y - sd->origmin;
-					}
-					RNA_float_set(op->ptr, "factor", fac / (float)sd->origsize);
+					update_factor = true;
 				}
-				
+
 				CTX_wm_window(C)->screen->do_draw = true;
 
 			}
 			break;
-			
+		}
 		case LEFTMOUSE:
 			if (sd->previewmode) {
 				area_split_apply(C, op);
@@ -1793,22 +1779,17 @@ static int area_split_modal(bContext *C, wmOperator *op, const wmEvent *event)
 		case MIDDLEMOUSE:
 		case TABKEY:
 			if (sd->previewmode == 0) {
+				/* pass */
 			}
 			else {
-				dir = RNA_enum_get(op->ptr, "direction");
-				
 				if (event->val == KM_PRESS) {
 					if (sd->sarea) {
+						int dir = RNA_property_enum_get(op->ptr, prop_dir);
+						RNA_property_enum_set(op->ptr, prop_dir, (dir == 'v') ? 'h' : 'v');
+						area_split_preview_update_cursor(C, op);
+						update_factor = true;
+
 						ED_area_tag_redraw(sd->sarea);
-						
-						if (dir == 'v') {
-							RNA_enum_set(op->ptr, "direction", 'h');
-							WM_cursor_set(CTX_wm_window(C), CURSOR_X_MOVE);
-						}
-						else {
-							RNA_enum_set(op->ptr, "direction", 'v');
-							WM_cursor_set(CTX_wm_window(C), CURSOR_Y_MOVE);
-						}
 					}
 				}
 			}
@@ -1822,9 +1803,39 @@ static int area_split_modal(bContext *C, wmOperator *op, const wmEvent *event)
 
 		case LEFTCTRLKEY:
 			sd->do_snap = event->val == KM_PRESS;
+			update_factor = true;
 			break;
 	}
-	
+
+	if (update_factor) {
+		const int dir = RNA_property_enum_get(op->ptr, prop_dir);
+		float fac;
+
+		if (dir == 'v') {
+			sd->origsize = sd->sarea->winx;
+			sd->origmin = sd->sarea->totrct.xmin;
+		}
+		else {
+			sd->origsize = sd->sarea->winy;
+			sd->origmin = sd->sarea->totrct.ymin;
+		}
+
+		if (sd->do_snap) {
+			ScrArea *sa = sd->sarea;
+			sa->v1->editflag = sa->v2->editflag = sa->v3->editflag = sa->v4->editflag = 1;
+
+			int snap_loc = area_snap_calc_location(
+			        CTX_wm_screen(C), sd->delta, sd->origval, dir, sd->origmin + sd->origsize, -sd->origmin);
+
+			sa->v1->editflag = sa->v2->editflag = sa->v3->editflag = sa->v4->editflag = 0;
+			fac = snap_loc - sd->origmin;
+		}
+		else {
+			fac = (dir == 'v') ? event->x - sd->origmin : event->y - sd->origmin;
+		}
+		RNA_float_set(op->ptr, "factor", fac / (float)sd->origsize);
+	}
+
 	return OPERATOR_RUNNING_MODAL;
 }



More information about the Bf-blender-cvs mailing list