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:
Diffstat (limited to 'source/blender/windowmanager/intern/wm_event_query.c')
-rw-r--r--source/blender/windowmanager/intern/wm_event_query.c152
1 files changed, 87 insertions, 65 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_query.c b/source/blender/windowmanager/intern/wm_event_query.c
index 304d7f73eb1..ee13e1832ed 100644
--- a/source/blender/windowmanager/intern/wm_event_query.c
+++ b/source/blender/windowmanager/intern/wm_event_query.c
@@ -47,12 +47,7 @@ static void event_ids_from_type_and_value(const short type,
RNA_enum_identifier(rna_enum_event_type_items, type, r_type_id);
/* Value. */
- if (ISTWEAK(type)) {
- RNA_enum_identifier(rna_enum_event_value_tweak_items, val, r_val_id);
- }
- else {
- RNA_enum_identifier(rna_enum_event_value_all_items, val, r_val_id);
- }
+ RNA_enum_identifier(rna_enum_event_value_items, val, r_val_id);
}
void WM_event_print(const wmEvent *event)
@@ -80,12 +75,12 @@ void WM_event_print(const wmEvent *event)
prev_type_id,
event->prev_val,
prev_val_id,
- event->shift,
- event->ctrl,
- event->alt,
- event->oskey,
+ (event->modifier & KM_SHIFT) != 0,
+ (event->modifier & KM_CTRL) != 0,
+ (event->modifier & KM_ALT) != 0,
+ (event->modifier & KM_OSKEY) != 0,
event->keymodifier,
- event->is_repeat,
+ (event->flag & WM_EVENT_IS_REPEAT) != 0,
event->xy[0],
event->xy[1],
event->ascii,
@@ -129,24 +124,6 @@ void WM_event_print(const wmEvent *event)
/** \name Event Modifier/Type Queries
* \{ */
-int WM_event_modifier_flag(const wmEvent *event)
-{
- int flag = 0;
- if (event->ctrl) {
- flag |= KM_CTRL;
- }
- if (event->alt) {
- flag |= KM_ALT;
- }
- if (event->shift) {
- flag |= KM_SHIFT;
- }
- if (event->oskey) {
- flag |= KM_OSKEY;
- }
- return flag;
-}
-
bool WM_event_type_mask_test(const int event_type, const enum eEventType_Mask mask)
{
/* Keyboard. */
@@ -178,13 +155,6 @@ bool WM_event_type_mask_test(const int event_type, const enum eEventType_Mask ma
}
}
- /* Tweak. */
- if (mask & EVT_TYPE_MASK_TWEAK) {
- if (ISTWEAK(event_type)) {
- return true;
- }
- }
-
/* Action Zone. */
if (mask & EVT_TYPE_MASK_ACTIONZONE) {
if (IS_EVENT_ACTIONZONE(event_type)) {
@@ -201,34 +171,30 @@ bool WM_event_type_mask_test(const int event_type, const enum eEventType_Mask ma
/** \name Event Motion Queries
* \{ */
-bool WM_event_is_modal_tweak_exit(const wmEvent *event, int tweak_event)
+bool WM_event_is_modal_drag_exit(const wmEvent *event,
+ const short init_event_type,
+ const short init_event_val)
{
- /* if the release-confirm userpref setting is enabled,
- * tweak events can be canceled when mouse is released
- */
+ /* If the release-confirm preference setting is enabled,
+ * drag events can be canceled when mouse is released. */
if (U.flag & USER_RELEASECONFIRM) {
/* option on, so can exit with km-release */
if (event->val == KM_RELEASE) {
- switch (tweak_event) {
- case EVT_TWEAK_L:
- case EVT_TWEAK_M:
- case EVT_TWEAK_R:
- return 1;
+ if ((init_event_val == KM_CLICK_DRAG) && (event->type == init_event_type)) {
+ return 1;
}
}
else {
- /* if the initial event wasn't a tweak event then
- * ignore USER_RELEASECONFIRM setting: see T26756. */
- if (ELEM(tweak_event, EVT_TWEAK_L, EVT_TWEAK_M, EVT_TWEAK_R) == 0) {
+ /* If the initial event wasn't a drag event then
+ * ignore #USER_RELEASECONFIRM setting: see T26756. */
+ if (init_event_val != KM_CLICK_DRAG) {
return 1;
}
}
}
else {
- /* this is fine as long as not doing km-release, otherwise
- * some items (i.e. markers) being tweaked may end up getting
- * dropped all over
- */
+ /* This is fine as long as not doing km-release, otherwise some items (i.e. markers)
+ * being tweaked may end up getting dropped all over. */
if (event->val != KM_RELEASE) {
return 1;
}
@@ -249,7 +215,7 @@ bool WM_event_is_last_mousemove(const wmEvent *event)
bool WM_event_is_mouse_drag(const wmEvent *event)
{
- return ISTWEAK(event->type) || (ISMOUSE_BUTTON(event->type) && (event->val == KM_CLICK_DRAG));
+ return (ISMOUSE_BUTTON(event->type) && (event->val == KM_CLICK_DRAG));
}
bool WM_event_is_mouse_drag_or_press(const wmEvent *event)
@@ -258,6 +224,68 @@ bool WM_event_is_mouse_drag_or_press(const wmEvent *event)
(ISMOUSE_BUTTON(event->type) && (event->val == KM_PRESS));
}
+int WM_event_drag_direction(const wmEvent *event)
+{
+ const int delta[2] = {
+ event->xy[0] - event->prev_click_xy[0],
+ event->xy[1] - event->prev_click_xy[1],
+ };
+
+ int theta = round_fl_to_int(4.0f * atan2f((float)delta[1], (float)delta[0]) / (float)M_PI);
+ int val = KM_DIRECTION_W;
+
+ if (theta == 0) {
+ val = KM_DIRECTION_E;
+ }
+ else if (theta == 1) {
+ val = KM_DIRECTION_NE;
+ }
+ else if (theta == 2) {
+ val = KM_DIRECTION_N;
+ }
+ else if (theta == 3) {
+ val = KM_DIRECTION_NW;
+ }
+ else if (theta == -1) {
+ val = KM_DIRECTION_SE;
+ }
+ else if (theta == -2) {
+ val = KM_DIRECTION_S;
+ }
+ else if (theta == -3) {
+ val = KM_DIRECTION_SW;
+ }
+
+#if 0
+ /* debug */
+ if (val == 1) {
+ printf("tweak north\n");
+ }
+ if (val == 2) {
+ printf("tweak north-east\n");
+ }
+ if (val == 3) {
+ printf("tweak east\n");
+ }
+ if (val == 4) {
+ printf("tweak south-east\n");
+ }
+ if (val == 5) {
+ printf("tweak south\n");
+ }
+ if (val == 6) {
+ printf("tweak south-west\n");
+ }
+ if (val == 7) {
+ printf("tweak west\n");
+ }
+ if (val == 8) {
+ printf("tweak north-west\n");
+ }
+#endif
+ return val;
+}
+
bool WM_cursor_test_motion_and_update(const int mval[2])
{
static int mval_prev[2] = {-1, -1};
@@ -278,8 +306,8 @@ bool WM_cursor_test_motion_and_update(const int mval[2])
int WM_event_drag_threshold(const struct wmEvent *event)
{
int drag_threshold;
- if (ISMOUSE(event->prev_type)) {
- BLI_assert(event->prev_type != MOUSEMOVE);
+ if (ISMOUSE(event->prev_click_type)) {
+ BLI_assert(event->prev_click_type != MOUSEMOVE);
/* Using the previous type is important is we want to check the last pressed/released button,
* The `event->type` would include #MOUSEMOVE which is always the case when dragging
* and does not help us know which threshold to use. */
@@ -331,12 +359,6 @@ int WM_userdef_event_map(int kmitype)
int WM_userdef_event_type_from_keymap_type(int kmitype)
{
switch (kmitype) {
- case EVT_TWEAK_L:
- return LEFTMOUSE;
- case EVT_TWEAK_M:
- return MIDDLEMOUSE;
- case EVT_TWEAK_R:
- return RIGHTMOUSE;
case WHEELOUTMOUSE:
return (U.uiflag & USER_WHEELZOOMDIR) ? WHEELUPMOUSE : WHEELDOWNMOUSE;
case WHEELINMOUSE:
@@ -458,7 +480,7 @@ int WM_event_absolute_delta_x(const struct wmEvent *event)
{
int dx = event->xy[0] - event->prev_xy[0];
- if (!event->is_direction_inverted) {
+ if ((event->flag & WM_EVENT_SCROLL_INVERT) == 0) {
dx = -dx;
}
@@ -469,7 +491,7 @@ int WM_event_absolute_delta_y(const struct wmEvent *event)
{
int dy = event->xy[1] - event->prev_xy[1];
- if (!event->is_direction_inverted) {
+ if ((event->flag & WM_EVENT_SCROLL_INVERT) == 0) {
dy = -dy;
}
@@ -491,8 +513,8 @@ int WM_event_absolute_delta_y(const struct wmEvent *event)
*/
bool WM_event_is_ime_switch(const struct wmEvent *event)
{
- return event->val == KM_PRESS && event->type == EVT_SPACEKEY &&
- (event->ctrl || event->oskey || event->alt);
+ return (event->val == KM_PRESS) && (event->type == EVT_SPACEKEY) &&
+ (event->modifier & (KM_CTRL | KM_OSKEY | KM_ALT));
}
#endif