Changeset 781 for trunk


Ignore:
Timestamp:
Jun 14, 2011, 1:54:47 AM (10 years ago)
Author:
sam
Message:

sdl: fix touchscreen event handling by first applying mouse moves, then
button changes.

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/input.cpp

    r735 r781  
    113113    data->mouse = coord;
    114114
    115     WorldEntity *best = NULL;
     115    WorldEntity *top = NULL;
    116116
    117117    for (int n = 0; n < data->nentities; n++)
     
    123123            continue;
    124124
    125         if (!best || best->bbox[1].z < data->entities[n]->bbox[1].z)
    126             best = data->entities[n];
     125        if (!top || top->bbox[1].z < data->entities[n]->bbox[1].z)
     126            top = data->entities[n];
    127127    }
    128128
    129129    for (int n = 0; n < data->nentities; n++)
    130130    {
    131         if (data->entities[n] == best)
     131        if (data->entities[n] == top)
    132132        {
    133             data->entities[n]->mousepos = (vec2i)((vec3i)coord - best->bbox[0]);
    134             if (best != data->lastfocus)
     133            data->entities[n]->mousepos = (vec2i)((vec3i)coord - top->bbox[0]);
     134            if (top != data->lastfocus)
    135135                data->entities[n]->pressed = data->buttons;
    136136            else
     
    147147    }
    148148
    149     data->lastfocus = best;
     149    data->lastfocus = top;
    150150}
    151151
  • trunk/src/sdlinput.cpp

    r755 r781  
    3030
    3131private:
    32     int mx, my;
     32    static vec2i GetMousePos();
    3333};
    3434
     
    4242    SDL_Init(SDL_INIT_TIMER);
    4343
    44     SDL_GetMouseState(&data->mx, &data->my);
    45 
    4644    gamegroup = GAMEGROUP_BEFORE;
    4745}
     
    5250
    5351    /* Handle mouse input */
    54     vec2i mouse;
    55     if (SDL_GetAppState() & SDL_APPMOUSEFOCUS)
    56     {
    57         SDL_GetMouseState(&mouse.x, &mouse.y);
    58         mouse.y = Video::GetSize().y - 1 - mouse.y;
    59     }
    60     else
    61         mouse.x = mouse.y = -1;
     52    vec2i mouse = SdlInputData::GetMousePos();;
    6253    Input::SetMousePos(mouse);
    6354
     
    6657    while (SDL_PollEvent(&event))
    6758    {
    68         if (event.type == SDL_QUIT)
     59        switch (event.type)
     60        {
     61        case SDL_QUIT:
    6962            Ticker::Shutdown();
     63            break;
    7064#if 0
    71         else if (event.type == SDL_KEYDOWN)
     65        case SDL_KEYDOWN:
    7266            Input::KeyPressed(event.key.keysym.sym, deltams);
     67            break;
    7368#endif
    74         else if (event.type == SDL_MOUSEBUTTONDOWN)
    75             Input::SetMouseButton(event.button.button - 1);
    76         else if (event.type == SDL_MOUSEBUTTONUP)
    77             Input::UnsetMouseButton(event.button.button - 1);
     69        case SDL_MOUSEBUTTONDOWN:
     70        case SDL_MOUSEBUTTONUP:
     71        {
     72            vec2i newmouse = SdlInputData::GetMousePos();
     73            if (newmouse != mouse)
     74                Input::SetMousePos(mouse = newmouse);
     75            if (event.type == SDL_MOUSEBUTTONDOWN)
     76                Input::SetMouseButton(event.button.button - 1);
     77            else
     78                Input::UnsetMouseButton(event.button.button - 1);
     79            break;
     80        }
     81        }
    7882    }
    7983
     
    9296}
    9397
     98vec2i SdlInputData::GetMousePos()
     99{
     100    vec2i ret(-1, -1);
     101
     102    if (SDL_GetAppState() & SDL_APPMOUSEFOCUS)
     103    {
     104        SDL_GetMouseState(&ret.x, &ret.y);
     105        ret.y = Video::GetSize().y - 1 - ret.y;
     106    }
     107    return ret;
     108}
     109
    94110} /* namespace lol */
    95111
Note: See TracChangeset for help on using the changeset viewer.