Changeset View
Changeset View
Standalone View
Standalone View
source/blender/windowmanager/intern/wm_event_system.c
| Show First 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
| if (event_last == NULL) { | if (event_last == NULL) { | ||||
| event_last = win->eventstate; | event_last = win->eventstate; | ||||
| } | } | ||||
| copy_v2_v2_int(event_new->prev_xy, event_last->xy); | copy_v2_v2_int(event_new->prev_xy, event_last->xy); | ||||
| return event_new; | return event_new; | ||||
| } | } | ||||
| static wmEvent *wm_event_add_trackpad(wmWindow *win, const wmEvent *event, int deltax, int deltay) | static wmEvent *wm_event_add_trackpad( | ||||
| wmWindow *win, const wmEvent *event, int deltax, int deltay, float factor) | |||||
| { | { | ||||
| /* Ignore in between trackpad events for performance, we only need high accuracy | /* Ignore in between trackpad events for performance, we only need high accuracy | ||||
| * for painting with mouse moves, for navigation using the accumulated value is ok. */ | * for painting with mouse moves, for navigation using the accumulated value is ok. */ | ||||
| wmEvent *event_last = win->event_queue.last; | wmEvent *event_last = win->event_queue.last; | ||||
| if (event_last && event_last->type == event->type) { | if (event_last && event_last->type == event->type) { | ||||
| deltax += event_last->xy[0] - event_last->prev_xy[0]; | deltax += event_last->xy[0] - event_last->prev_xy[0]; | ||||
| deltay += event_last->xy[1] - event_last->prev_xy[1]; | deltay += event_last->xy[1] - event_last->prev_xy[1]; | ||||
| factor += event_last->factor; | |||||
| wm_event_free_last(win); | wm_event_free_last(win); | ||||
| } | } | ||||
| /* Set prev_xy, the delta is computed from this in operators. */ | /* Set prev_xy, the delta is computed from this in operators. */ | ||||
| wmEvent *event_new = wm_event_add(win, event); | wmEvent *event_new = wm_event_add(win, event); | ||||
| event_new->prev_xy[0] = event_new->xy[0] - deltax; | event_new->prev_xy[0] = event_new->xy[0] - deltax; | ||||
| event_new->prev_xy[1] = event_new->xy[1] - deltay; | event_new->prev_xy[1] = event_new->xy[1] - deltay; | ||||
| event_new->factor = factor; | |||||
| return event_new; | return event_new; | ||||
| } | } | ||||
| /** | /** | ||||
| * Windows store own event queues #wmWindow.event_queue (no #bContext here). | * Windows store own event queues #wmWindow.event_queue (no #bContext here). | ||||
| */ | */ | ||||
| void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, void *customdata) | void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, void *customdata) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 88 Lines • ▼ Show 20 Lines | |||||
| break; | break; | ||||
| } | } | ||||
| case GHOST_kEventTrackpad: { | case GHOST_kEventTrackpad: { | ||||
| GHOST_TEventTrackpadData *pd = customdata; | GHOST_TEventTrackpadData *pd = customdata; | ||||
| switch (pd->subtype) { | switch (pd->subtype) { | ||||
| case GHOST_kTrackpadEventMagnify: | case GHOST_kTrackpadEventMagnify: | ||||
| event.type = MOUSEZOOM; | event.type = MOUSEZOOM; | ||||
| pd->deltaX = -pd->deltaX; | pd->deltaX = -(pd->factor * 125.0 + 0.1); /* deprecated */ | ||||
| pd->deltaY = -pd->deltaY; | |||||
| break; | break; | ||||
| case GHOST_kTrackpadEventSmartMagnify: | case GHOST_kTrackpadEventSmartMagnify: | ||||
| event.type = MOUSESMARTZOOM; | event.type = MOUSESMARTZOOM; | ||||
| break; | break; | ||||
| case GHOST_kTrackpadEventRotate: | case GHOST_kTrackpadEventRotate: | ||||
| event.type = MOUSEROTATE; | event.type = MOUSEROTATE; | ||||
| pd->deltaX = pd->factor * -5.0; /* deprecated */ | |||||
| break; | break; | ||||
| case GHOST_kTrackpadEventScroll: | case GHOST_kTrackpadEventScroll: | ||||
| default: | default: | ||||
| event.type = MOUSEPAN; | event.type = MOUSEPAN; | ||||
| break; | break; | ||||
| } | } | ||||
| event.xy[0] = event_state->xy[0] = pd->x; | event.xy[0] = event_state->xy[0] = pd->x; | ||||
| event.xy[1] = event_state->xy[1] = pd->y; | event.xy[1] = event_state->xy[1] = pd->y; | ||||
| event.val = KM_NOTHING; | event.val = KM_NOTHING; | ||||
| /* The direction is inverted from the device due to system preferences. */ | /* The direction is inverted from the device due to system preferences. */ | ||||
| event.is_direction_inverted = pd->isDirectionInverted; | event.is_direction_inverted = pd->isDirectionInverted; | ||||
| wm_event_add_trackpad(win, &event, pd->deltaX, -pd->deltaY); | wm_event_add_trackpad(win, &event, pd->deltaX, -pd->deltaY, pd->factor); | ||||
| break; | break; | ||||
| } | } | ||||
| /* Mouse button. */ | /* Mouse button. */ | ||||
| case GHOST_kEventButtonDown: | case GHOST_kEventButtonDown: | ||||
| case GHOST_kEventButtonUp: { | case GHOST_kEventButtonUp: { | ||||
| GHOST_TEventButtonData *bd = customdata; | GHOST_TEventButtonData *bd = customdata; | ||||
| /* Get value and type from Ghost. */ | /* Get value and type from Ghost. */ | ||||
| ▲ Show 20 Lines • Show All 92 Lines • Show Last 20 Lines | |||||