Changeset View
Changeset View
Standalone View
Standalone View
source/blender/windowmanager/intern/wm_event_system.c
| Show First 20 Lines • Show All 174 Lines • ▼ Show 20 Lines | if (event->customdatafree) { | ||||
| MEM_freeN(event->customdata); | MEM_freeN(event->customdata); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| MEM_freeN(event); | MEM_freeN(event); | ||||
| } | } | ||||
| static void wm_event_free_last(wmWindow *win) | |||||
| { | |||||
| wmEvent *event = BLI_poptail(&win->queue); | |||||
| if (event != NULL) { | |||||
| wm_event_free(event); | |||||
| } | |||||
| } | |||||
| void wm_event_free_all(wmWindow *win) | void wm_event_free_all(wmWindow *win) | ||||
| { | { | ||||
| wmEvent *event; | wmEvent *event; | ||||
| while ((event = BLI_pophead(&win->queue))) { | while ((event = BLI_pophead(&win->queue))) { | ||||
| wm_event_free(event); | wm_event_free(event); | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 4,110 Lines • ▼ Show 20 Lines | static wmEvent *wm_event_add_mousemove(wmWindow *win, const wmEvent *event) | ||||
| if (event_last == NULL) { | if (event_last == NULL) { | ||||
| event_last = win->eventstate; | event_last = win->eventstate; | ||||
| } | } | ||||
| copy_v2_v2_int(&event_new->prevx, &event_last->x); | copy_v2_v2_int(&event_new->prevx, &event_last->x); | ||||
| return event_new; | return event_new; | ||||
| } | } | ||||
| static wmEvent *wm_event_add_trackpad(wmWindow *win, const wmEvent *event, int deltax, int deltay) | |||||
| { | |||||
| /* 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. */ | |||||
| wmEvent *event_last = win->queue.last; | |||||
| if (event_last && event_last->type == event->type) { | |||||
| deltax += event_last->x - event_last->prevx; | |||||
| deltay += event_last->y - event_last->prevy; | |||||
| wm_event_free_last(win); | |||||
| } | |||||
| /* Set prevx/prevy, the delta is computed from this in operators. */ | |||||
| wmEvent *event_new = wm_event_add(win, event); | |||||
| event_new->prevx = event_new->x - deltax; | |||||
| event_new->prevy = event_new->y - deltay; | |||||
| return event_new; | |||||
| } | |||||
| /* Windows store own event queues, no bContext here. */ | /* Windows store own event queues, no bContext here. */ | ||||
| /* Time is in 1000s of seconds, from Ghost. */ | /* Time is in 1000s of seconds, from Ghost. */ | ||||
| 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) | ||||
| { | { | ||||
| if (UNLIKELY(G.f & G_FLAG_EVENT_SIMULATE)) { | if (UNLIKELY(G.f & G_FLAG_EVENT_SIMULATE)) { | ||||
| return; | return; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | case GHOST_kEventTrackpad: { | ||||
| event.type = MOUSEPAN; | event.type = MOUSEPAN; | ||||
| break; | break; | ||||
| } | } | ||||
| event.x = evt->x = pd->x; | event.x = evt->x = pd->x; | ||||
| event.y = evt->y = pd->y; | event.y = evt->y = pd->y; | ||||
| event.val = KM_NOTHING; | event.val = KM_NOTHING; | ||||
| /* Use prevx/prevy so we can calculate the delta later. */ | |||||
| event.prevx = event.x - pd->deltaX; | |||||
| event.prevy = event.y - (-pd->deltaY); | |||||
| /* 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(win, &event); | wm_event_add_trackpad(win, &event, pd->deltaX, -pd->deltaY); | ||||
| 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 740 Lines • Show Last 20 Lines | |||||