diff options
author | Ton Roosendaal <ton@blender.org> | 2009-02-19 22:03:53 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2009-02-19 22:03:53 +0300 |
commit | 2cb5af58a6cf8120275b37c063899b0234719da2 (patch) | |
tree | 393c3baacfed1186826e9a6acfd2bd90f04b4c7e /source/blender/windowmanager | |
parent | dd78ca15c74ad16905c5ac4d4460aab502e1031e (diff) |
2.5
- Mesh Rip back (Vkey). For those who keep wondering how
it works: just put mouse cursor somewhere close to the
selection, press V and mouse mouse away from it. Feels
like real rip!
- Made extrude sorta work, no menu/options yet though.
But it does transform!
- Added an short event->mval[2] with region coords,
easier coding for the guys :)
- Fill operator standard delivers 'beauty' now
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/WM_types.h | 3 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 17 |
2 files changed, 17 insertions, 3 deletions
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index d67a31f9e42..4dc62985f53 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -66,7 +66,8 @@ typedef struct wmEvent { short type; /* event code itself (short, is also in keymap) */ short val; /* press, release, scrollvalue */ - short x, y; /* mouse pointer position */ + short x, y; /* mouse pointer position, screen coord */ + short mval[2]; /* region mouse position, name convention pre 2.5 :) */ short prevx, prevy; /* previous mouse pointer position */ short unicode; /* future, ghost? */ char ascii; /* from ghost */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 9fe97f307c5..6eb71d3d314 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -322,6 +322,16 @@ static void wm_operator_print(wmOperator *op) MEM_freeN(buf); } +static void wm_region_mouse_co(bContext *C, wmEvent *event) +{ + ARegion *ar= CTX_wm_region(C); + if(ar) { + /* compatibility convention */ + event->mval[0]= event->x - ar->winrct.xmin; + event->mval[1]= event->y - ar->winrct.ymin; + } +} + static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerRNA *properties) { wmWindowManager *wm= CTX_wm_manager(C); @@ -333,8 +343,10 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, P if((G.f & G_DEBUG) && event && event->type!=MOUSEMOVE) printf("handle evt %d win %d op %s\n", event?event->type:0, CTX_wm_screen(C)->subwinactive, ot->idname); - if(op->type->invoke && event) - retval= (*op->type->invoke)(C, op, event); + if(op->type->invoke && event) { + wm_region_mouse_co(C, event); + retval= op->type->invoke(C, op, event); + } else if(op->type->exec) retval= op->type->exec(C, op); else @@ -636,6 +648,7 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand wm_handler_op_context(C, handler); + wm_region_mouse_co(C, event); retval= ot->modal(C, op, event); /* putting back screen context, reval can pass trough after modal failures! */ |