Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2009-01-01 21:05:12 +0300
committerTon Roosendaal <ton@blender.org>2009-01-01 21:05:12 +0300
commite2e282989e08506f199e58fe64bac41c5c594ab0 (patch)
treea3cb21c98ba7c42d7f893595b7248f8bdacc24ac /source/blender/windowmanager
parent029b0c3ecf89323b7ee943e5c09fbde4ca2fbc60 (diff)
2.5
- Put back vertex/edge/face select - Mode menu allows going in/out editmode - Tested some tweak event stuff in WM, made tweak event follow user preset for 'action' or 'select' mouse. (Wanted to try this for transform, but better get advise from Martin first :)
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/WM_api.h1
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c93
-rw-r--r--source/blender/windowmanager/wm_event_types.h9
3 files changed, 74 insertions, 29 deletions
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index e3eaca7accd..3125a21bbd2 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -94,6 +94,7 @@ struct wmEventHandler *WM_event_add_modal_handler(struct bContext *C, ListBase *
void WM_event_remove_handlers(struct bContext *C, ListBase *handlers);
void WM_event_add_mousemove(struct bContext *C);
+int WM_modal_tweak_exit(struct wmEvent *evt, int tweak_event);
void WM_event_add_notifier(struct bContext *C, unsigned int type, void *data);
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index be977530fad..96a97e95bd7 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -530,36 +530,54 @@ void WM_event_remove_handlers(bContext *C, ListBase *handlers)
}
}
-static int wm_eventmatch(wmEvent *winevent, wmKeymapItem *kmi)
+/* do userdef mappings */
+static int wm_userdef_event_map(int kmitype)
{
- int kmitype= kmi->type;
-
- /* first do userdef mappings */
- if(kmitype==SELECTMOUSE) {
- if(U.flag & USER_LMOUSESELECT)
- kmitype= LEFTMOUSE;
- else
- kmitype= RIGHTMOUSE;
- }
- else if(kmitype==ACTIONMOUSE) {
- if(U.flag & USER_LMOUSESELECT)
- kmitype= RIGHTMOUSE;
- else
- kmitype= LEFTMOUSE;
- }
- else if(kmitype==WHEELOUTMOUSE) {
- if(U.uiflag & USER_WHEELZOOMDIR)
- kmitype= WHEELUPMOUSE;
- else
- kmitype= WHEELDOWNMOUSE;
- }
- else if(kmitype==WHEELINMOUSE) {
- if(U.uiflag & USER_WHEELZOOMDIR)
- kmitype= WHEELDOWNMOUSE;
- else
- kmitype= WHEELUPMOUSE;
+ switch(kmitype) {
+ case SELECTMOUSE:
+ if(U.flag & USER_LMOUSESELECT)
+ return LEFTMOUSE;
+ else
+ return RIGHTMOUSE;
+
+ case ACTIONMOUSE:
+ if(U.flag & USER_LMOUSESELECT)
+ return RIGHTMOUSE;
+ else
+ return LEFTMOUSE;
+
+ case WHEELOUTMOUSE:
+ if(U.uiflag & USER_WHEELZOOMDIR)
+ return WHEELUPMOUSE;
+ else
+ return WHEELDOWNMOUSE;
+
+ case WHEELINMOUSE:
+ if(U.uiflag & USER_WHEELZOOMDIR)
+ return WHEELDOWNMOUSE;
+ else
+ return WHEELUPMOUSE;
+
+ case EVT_TWEAK_A:
+ if(U.flag & USER_LMOUSESELECT)
+ return EVT_TWEAK_R;
+ else
+ return EVT_TWEAK_L;
+
+ case EVT_TWEAK_S:
+ if(U.flag & USER_LMOUSESELECT)
+ return EVT_TWEAK_L;
+ else
+ return EVT_TWEAK_R;
}
+ return kmitype;
+}
+
+static int wm_eventmatch(wmEvent *winevent, wmKeymapItem *kmi)
+{
+ int kmitype= wm_userdef_event_map(kmi->type);
+
/* the matching rules */
if(winevent->type!=kmitype) return 0;
@@ -961,6 +979,27 @@ void WM_event_add_mousemove(bContext *C)
wm_event_add(window, &event);
}
+/* for modal callbacks, check configuration for how to interpret exit with tweaks */
+int WM_modal_tweak_exit(wmEvent *evt, int tweak_event)
+{
+ /* user preset?? dunno... */
+ int tweak_modal= 1;
+
+ switch(tweak_event) {
+ case EVT_TWEAK_L:
+ case EVT_TWEAK_M:
+ case EVT_TWEAK_R:
+ if(evt->val==tweak_modal)
+ return 1;
+ default:
+ /* this case is when modal callcback didnt get started with a tweak */
+ if(evt->val)
+ return 1;
+ }
+ return 0;
+}
+
+
/* ********************* ghost stuff *************** */
static int convert_key(GHOST_TKey key)
diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h
index 87dbd337d32..93b5bf02e71 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -260,12 +260,17 @@
/* **************** BLENDER GESTURE EVENTS ********************* */
#define EVT_ACTIONZONE 0x5001
-/* tweak events, for L M R mousebuttons */
+ /* tweak events, for L M R mousebuttons */
#define EVT_TWEAK_L 0x5002
#define EVT_TWEAK_M 0x5003
#define EVT_TWEAK_R 0x5004
+ /* tweak events for action or select mousebutton */
+#define EVT_TWEAK_A 0x5005
+#define EVT_TWEAK_S 0x5006
-#define EVT_GESTURE 0x5005
+
+
+#define EVT_GESTURE 0x5010
/* value of tweaks and line gestures, note, KM_ANY (-1) works for this case too */
#define EVT_GESTURE_N 1