[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36451] branches/bmesh/blender: = bmesh version of prior trunk commit=

Joseph Eagar joeedh at gmail.com
Tue May 3 03:52:29 CEST 2011


Revision: 36451
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36451
Author:   joeedh
Date:     2011-05-03 01:52:25 +0000 (Tue, 03 May 2011)
Log Message:
-----------
=bmesh version of prior trunk commit=

Loopcut works as it did in 2.49; conceptually,
if you "drag" as you click it will slide, but 
not if you simply click.

I added a new Input user pref, for ending edge slide
on mouse up after a loop cut.  I can see ton's point on
the extra strain of click-hold-and-drag workflows. This
is might only be useful for tablet users.

Modified Paths:
--------------
    branches/bmesh/blender/release/scripts/startup/bl_ui/space_userpref.py
    branches/bmesh/blender/source/blender/editors/mesh/loopcut.c
    branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c
    branches/bmesh/blender/source/blender/editors/transform/transform.c
    branches/bmesh/blender/source/blender/editors/transform/transform_ops.c
    branches/bmesh/blender/source/blender/makesdna/DNA_userdef_types.h
    branches/bmesh/blender/source/blender/makesdna/DNA_windowmanager_types.h
    branches/bmesh/blender/source/blender/makesrna/intern/rna_userdef.c
    branches/bmesh/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/bmesh/blender/release/scripts/startup/bl_ui/space_userpref.py
===================================================================
--- branches/bmesh/blender/release/scripts/startup/bl_ui/space_userpref.py	2011-05-03 01:48:15 UTC (rev 36450)
+++ branches/bmesh/blender/release/scripts/startup/bl_ui/space_userpref.py	2011-05-03 01:52:25 UTC (rev 36451)
@@ -795,6 +795,9 @@
 
         sub.separator()
 
+        sub.label(text="Loop Cut:")
+        sub.prop(inputs, "loopcut_finish_on_release")
+        
         sub.label(text="Orbit Style:")
         sub.row().prop(inputs, "view_rotate_method", expand=True)
 

Modified: branches/bmesh/blender/source/blender/editors/mesh/loopcut.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/loopcut.c	2011-05-03 01:48:15 UTC (rev 36450)
+++ branches/bmesh/blender/source/blender/editors/mesh/loopcut.c	2011-05-03 01:52:25 UTC (rev 36451)
@@ -104,6 +104,9 @@
 
 	int extend;
 	int do_cut;
+	
+	double leftmouse_time;
+	wmTimer *timer;
 } tringselOpData;
 
 /* modal loop selection drawing callback */
@@ -337,10 +340,13 @@
 }
 
 /* called when modal loop selection is done... */
-static void ringsel_exit(bContext *UNUSED(C), wmOperator *op)
+static void ringsel_exit(bContext *C, wmOperator *op)
 {
 	tringselOpData *lcd= op->customdata;
-
+	
+	if (lcd->timer)
+		WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), lcd->timer);
+	
 	/* deactivate the extra drawing stuff in 3D-View */
 	ED_region_draw_cb_exit(lcd->ar->type, lcd->draw_handle);
 	
@@ -423,6 +429,10 @@
 	BMEdge *edge;
 	int dist = 75;
 
+	/*if we're in the cut-n-slide macro, set release_confirm based on user pref*/
+	if (op->opm)
+		RNA_boolean_set(op->next->ptr, "release_confirm", U.loopcut_finish_on_release);
+	
 	if(modifiers_isDeformedByLattice(obedit) || modifiers_isDeformedByArmature(obedit))
 		BKE_report(op->reports, RPT_WARNING, "Loop cut doesn't work well on deformed edit mesh display");
 	
@@ -448,100 +458,54 @@
 	return OPERATOR_RUNNING_MODAL;
 }
 
-static int ringsel_modal (bContext *C, wmOperator *op, wmEvent *event)
+static int loopcut_modal (bContext *C, wmOperator *op, wmEvent *event)
 {
 	int cuts= RNA_int_get(op->ptr,"number_cuts");
 	tringselOpData *lcd= op->customdata;
 
 	view3d_operator_needs_opengl(C);
 
-
 	switch (event->type) {
-		case LEFTMOUSE: /* abort */ // XXX hardcoded
-			ED_region_tag_redraw(lcd->ar);
-			ringsel_exit(C, op);
-
-			return OPERATOR_FINISHED;
 		case RETKEY:
-		case RIGHTMOUSE: /* confirm */ // XXX hardcoded
-			if (event->val == KM_PRESS) {
+		case LEFTMOUSE: /* confirm */ // XXX hardcoded
+			if (event->val == KM_RELEASE) {
 				/* finish */
 				ED_region_tag_redraw(lcd->ar);
 				
 				ringsel_finish(C, op);
 				ringsel_exit(C, op);
-				ED_area_headerprint(CTX_wm_area(C), NULL);
 				
-				return OPERATOR_FINISHED;
-			}
-			
-			ED_region_tag_redraw(lcd->ar);
-			break;
-		case ESCKEY:
-			if (event->val == KM_RELEASE) {
-				/* cancel */
-				ED_region_tag_redraw(lcd->ar);
 				ED_area_headerprint(CTX_wm_area(C), NULL);
 				
-				return ringcut_cancel(C, op);
+				return OPERATOR_FINISHED|OPERATOR_ABORT_MACRO;
+			} else {
+				lcd->timer = WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER2, 0.12);
 			}
 			
 			ED_region_tag_redraw(lcd->ar);
 			break;
-		case MOUSEMOVE: { /* mouse moved somewhere to select another loop */
-			int dist = 75;
-			BMEdge *edge;
-
-			lcd->vc.mval[0] = event->mval[0];
-			lcd->vc.mval[1] = event->mval[1];
-			edge = EDBM_findnearestedge(&lcd->vc, &dist);
-
-			if (edge != lcd->eed) {
-				lcd->eed = edge;
-				ringsel_find_edge(lcd, cuts);
-			}
-
+		case TIMER2: 
+			/* finish */
 			ED_region_tag_redraw(lcd->ar);
-			break;
-		}			
-	}
-	
-	/* keep going until the user confirms */
-	return OPERATOR_RUNNING_MODAL;
-}
-
-static int loopcut_modal (bContext *C, wmOperator *op, wmEvent *event)
-{
-	int cuts= RNA_int_get(op->ptr,"number_cuts");
-	tringselOpData *lcd= op->customdata;
-
-	view3d_operator_needs_opengl(C);
-
-
-	switch (event->type) {
-		case RETKEY:
-		case LEFTMOUSE: /* confirm */ // XXX hardcoded
-			if (event->val == KM_RELEASE) {
-				/* finish */
-				ED_region_tag_redraw(lcd->ar);
-				
-				ringsel_finish(C, op);
-				ringsel_exit(C, op);
-				
-				return OPERATOR_FINISHED;
-			}
 			
-			ED_region_tag_redraw(lcd->ar);
-			break;
+			ringsel_finish(C, op);
+			ringsel_exit(C, op);
+			
+			ED_area_headerprint(CTX_wm_area(C), NULL);
+
+			return OPERATOR_FINISHED;
+		
 		case RIGHTMOUSE: /* abort */ // XXX hardcoded
 			ED_region_tag_redraw(lcd->ar);
 			ringsel_exit(C, op);
+			ED_area_headerprint(CTX_wm_area(C), NULL);
 
 			return OPERATOR_FINISHED;
 		case ESCKEY:
 			if (event->val == KM_RELEASE) {
 				/* cancel */
 				ED_region_tag_redraw(lcd->ar);
+				ED_area_headerprint(CTX_wm_area(C), NULL);
 				
 				return ringcut_cancel(C, op);
 			}

Modified: branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c	2011-05-03 01:48:15 UTC (rev 36450)
+++ branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c	2011-05-03 01:52:25 UTC (rev 36451)
@@ -184,8 +184,10 @@
 	ot= WM_operatortype_append_macro("MESH_OT_loopcut_slide", "Loop Cut and Slide", OPTYPE_UNDO|OPTYPE_REGISTER);
 	ot->description = "Cut mesh loop and slide it";
 	WM_operatortype_macro_define(ot, "MESH_OT_loopcut");
-	WM_operatortype_macro_define(ot, "TRANSFORM_OT_edge_slide");
-
+	otmacro = WM_operatortype_macro_define(ot, "TRANSFORM_OT_edge_slide");
+	
+	RNA_boolean_set(otmacro->ptr, "launch_event", LEFTMOUSE);
+	
 	ot= WM_operatortype_append_macro("MESH_OT_duplicate_move", "Add Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER);
 	ot->description = "Duplicate mesh and move";
 	WM_operatortype_macro_define(ot, "MESH_OT_duplicate");

Modified: branches/bmesh/blender/source/blender/editors/transform/transform.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/transform/transform.c	2011-05-03 01:48:15 UTC (rev 36450)
+++ branches/bmesh/blender/source/blender/editors/transform/transform.c	2011-05-03 01:52:25 UTC (rev 36451)
@@ -1522,6 +1522,8 @@
 	t->mode = mode;
 
 	t->launch_event = event ? event->type : -1;
+	if (RNA_property_is_set(op->ptr, "launch_event"))
+		t->launch_event = RNA_int_get(op->ptr, "launch_event");
 
 	if (t->launch_event == EVT_TWEAK_R)
 	{

Modified: branches/bmesh/blender/source/blender/editors/transform/transform_ops.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/transform/transform_ops.c	2011-05-03 01:48:15 UTC (rev 36450)
+++ branches/bmesh/blender/source/blender/editors/transform/transform_ops.c	2011-05-03 01:52:25 UTC (rev 36451)
@@ -499,6 +499,8 @@
 	// Add confirm method all the time. At the end because it's not really that important and should be hidden only in log, not in keymap edit
 	/*prop =*/ RNA_def_boolean(ot->srna, "release_confirm", 0, "Confirm on Release", "Always confirm operation when releasing button");
 	//RNA_def_property_flag(prop, PROP_HIDDEN);
+
+	RNA_def_int(ot->srna, "launch_event", -1, 0, INT_MAX, "", "", -1, INT_MAX);
 }
 
 void TRANSFORM_OT_translate(struct wmOperatorType *ot)

Modified: branches/bmesh/blender/source/blender/makesdna/DNA_userdef_types.h
===================================================================
--- branches/bmesh/blender/source/blender/makesdna/DNA_userdef_types.h	2011-05-03 01:48:15 UTC (rev 36450)
+++ branches/bmesh/blender/source/blender/makesdna/DNA_userdef_types.h	2011-05-03 01:52:25 UTC (rev 36451)
@@ -392,7 +392,7 @@
 	struct ColorBand coba_weight;	/* from texture.h */
 
 	float sculpt_paint_overlay_col[3];
-	int pad3;
+	int loopcut_finish_on_release;
 
 	char author[80];	/* author name for file formats supporting it */
 } UserDef;

Modified: branches/bmesh/blender/source/blender/makesdna/DNA_windowmanager_types.h
===================================================================
--- branches/bmesh/blender/source/blender/makesdna/DNA_windowmanager_types.h	2011-05-03 01:48:15 UTC (rev 36450)
+++ branches/bmesh/blender/source/blender/makesdna/DNA_windowmanager_types.h	2011-05-03 01:52:25 UTC (rev 36451)
@@ -313,6 +313,7 @@
 #define OPERATOR_PASS_THROUGH	8
 /* in case operator got executed outside WM code... like via fileselect */
 #define OPERATOR_HANDLED		16
+#define OPERATOR_ABORT_MACRO	32
 
 /* wmOperator flag */
 #define OP_GRAB_POINTER			1

Modified: branches/bmesh/blender/source/blender/makesrna/intern/rna_userdef.c
===================================================================
--- branches/bmesh/blender/source/blender/makesrna/intern/rna_userdef.c	2011-05-03 01:48:15 UTC (rev 36450)
+++ branches/bmesh/blender/source/blender/makesrna/intern/rna_userdef.c	2011-05-03 01:52:25 UTC (rev 36451)
@@ -2679,6 +2679,10 @@
 	RNA_def_property_enum_bitflag_sdna(prop, NULL, "uiflag");
 	RNA_def_property_enum_items(prop, view_zoom_axes);
 	RNA_def_property_ui_text(prop, "Zoom Axis", "Axis of mouse movement to zoom in or out on");
+
+	prop= RNA_def_property(srna, "loopcut_finish_on_release", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "loopcut_finish_on_release", 1);
+	RNA_def_property_ui_text(prop, "End Loopcut Slide On Release", "End Loopcut Slide On Mouse Release, a 'click-drag-and-hold' workflow");
 	
 	prop= RNA_def_property(srna, "invert_mouse_wheel_zoom", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ZOOM_INVERT);

Modified: branches/bmesh/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- branches/bmesh/blender/source/blender/windowmanager/intern/wm_operators.c	2011-05-03 01:48:15 UTC (rev 36450)
+++ branches/bmesh/blender/source/blender/windowmanager/intern/wm_operators.c	2011-05-03 01:52:25 UTC (rev 36451)
@@ -213,7 +213,7 @@
 		if(opm->type->exec) {
 			retval= opm->type->exec(C, opm);
 		
-			if (retval & OPERATOR_FINISHED) {
+			if ((retval & OPERATOR_FINISHED) && !(retval & OPERATOR_ABORT_MACRO)) {
 				MacroData *md = op->customdata;
 				md->retval = OPERATOR_FINISHED; /* keep in mind that at least one operator finished */
 			} else {
@@ -238,7 +238,7 @@
 
 		BLI_movelisttolist(&op->reports->list, &opm->reports->list);
 		

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list