~ubuntu-branches/ubuntu/utopic/blender/utopic-proposed

« back to all changes in this revision

Viewing changes to intern/ghost/intern/GHOST_SystemSDL.cpp

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2014-02-19 11:24:23 UTC
  • mfrom: (14.2.23 sid)
  • Revision ID: package-import@ubuntu.com-20140219112423-rkmaz2m7ha06d4tk
Tags: 2.69-3ubuntu1
* Merge with Debian; remaining changes:
  - Configure without OpenImageIO on armhf, as it is not available on
    Ubuntu.

Show diffs side-by-side

added added

removed removed

Lines of Context:
276
276
}
277
277
#undef GXMAP
278
278
 
 
279
/**
 
280
 * Events don't always have valid windows,
 
281
 * but GHOST needs a window _always_. fallback to the GL window.
 
282
 */
 
283
static SDL_Window *SDL_GetWindowFromID_fallback(Uint32 id)
 
284
{
 
285
        SDL_Window *sdl_win = SDL_GetWindowFromID(id);
 
286
        if (sdl_win == NULL) {
 
287
                sdl_win = SDL_GL_GetCurrentWindow();
 
288
        }
 
289
        return sdl_win;
 
290
}
279
291
 
280
292
void
281
293
GHOST_SystemSDL::processEvent(SDL_Event *sdl_event)
286
298
                case SDL_WINDOWEVENT:
287
299
                {
288
300
                        SDL_WindowEvent &sdl_sub_evt = sdl_event->window;
289
 
                        GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID(sdl_sub_evt.windowID));
 
301
                        GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID));
290
302
                        //assert(window != NULL); // can be NULL on close window.
291
303
 
292
304
                        switch (sdl_sub_evt.event) {
318
330
                case SDL_MOUSEMOTION:
319
331
                {
320
332
                        SDL_MouseMotionEvent &sdl_sub_evt = sdl_event->motion;
321
 
                        SDL_Window *sdl_win = SDL_GetWindowFromID(sdl_sub_evt.windowID);
 
333
                        SDL_Window *sdl_win = SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID);
322
334
                        GHOST_WindowSDL *window = findGhostWindow(sdl_win);
323
335
                        assert(window != NULL);
324
336
 
379
391
                        GHOST_TButtonMask gbmask = GHOST_kButtonMaskLeft;
380
392
                        GHOST_TEventType type = (sdl_sub_evt.state == SDL_PRESSED) ? GHOST_kEventButtonDown : GHOST_kEventButtonUp;
381
393
 
382
 
                        GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID(sdl_sub_evt.windowID));
 
394
                        GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID));
383
395
                        assert(window != NULL);
384
396
 
385
397
                        /* process rest of normal mouse buttons */
403
415
                case SDL_MOUSEWHEEL:
404
416
                {
405
417
                        SDL_MouseWheelEvent &sdl_sub_evt = sdl_event->wheel;
406
 
                        GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID(sdl_sub_evt.windowID));
 
418
                        GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID));
407
419
                        assert(window != NULL);
408
420
                        g_event = new GHOST_EventWheel(getMilliSeconds(), window, sdl_sub_evt.y);
409
421
                }
415
427
                        SDL_Keycode sym = sdl_sub_evt.keysym.sym;
416
428
                        GHOST_TEventType type = (sdl_sub_evt.state == SDL_PRESSED) ? GHOST_kEventKeyDown : GHOST_kEventKeyUp;
417
429
 
418
 
                        GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID(sdl_sub_evt.windowID));
 
430
                        GHOST_WindowSDL *window = findGhostWindow(SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID));
419
431
                        assert(window != NULL);
420
432
 
421
433
                        GHOST_TKey gkey = convertSDLKey(sdl_sub_evt.keysym.scancode);
532
544
                (*w_start)->validate();
533
545
 
534
546
                if (g_event) {
535
 
                        printf("Expose events pushed\n");
 
547
                        //printf("Expose events pushed\n");
536
548
                        pushEvent(g_event);
537
549
                        anyProcessed = true;
538
550
                }