[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