test/relative_mode.markdown
author Sam Lantinga <slouken@libsdl.org>
Sun, 07 Jul 2019 09:10:56 -0700
changeset 12928 3c4a4b1077cd
parent 9337 7e5940a2cda6
permissions -rw-r--r--
Fixed bug 4710 - audio/alsa: avoid configuring hardware parameters with only a single period

Anthony Pesch

The previous code first configured the period size using snd_pcm_hw_par-
ams_set_period_size_near. Then, it further narrowed the configuration
space by calling snd_pcm_hw_params_set_buffer_size_near using a buffer
size of 2 times the _requested_ period size in order to try and get a
configuration with only 2 periods. If the configured period size was
larger than the requested size, the second call could inadvertently
narrow the configuration space to contain only a single period.

Rather than fixing the call to snd_pcm_hw_params_set_buffer_size_near
to use a size of 2 times the configured period size, the code has been
changed to use snd_pcm_hw_params_set_periods_min in order to more
clearly explain the intent.
jorgen@7105
     1
Relative mode testing
jorgen@7105
     2
=====================
jorgen@7105
     3
jorgen@7105
     4
See test program at the bottom of this file.
jorgen@7105
     5
jorgen@7105
     6
Initial tests:
jorgen@7105
     7
jorgen@7105
     8
 - When in relative mode, the mouse shouldn't be moveable outside of the window.
jorgen@7105
     9
 - When the cursor is outside the window when relative mode is enabled, mouse
jorgen@7105
    10
   clicks should not go to whatever app was under the cursor previously.
jorgen@7105
    11
 - When alt/cmd-tabbing between a relative mode app and another app, clicks when
jorgen@7105
    12
   in the relative mode app should also not go to whatever app was under the
jorgen@7105
    13
   cursor previously.
jorgen@7105
    14
jorgen@7105
    15
jorgen@7105
    16
Code
jorgen@7105
    17
====
jorgen@7105
    18
jorgen@7105
    19
    #include <SDL.h>
jorgen@7105
    20
jorgen@7105
    21
    int PollEvents()
jorgen@7105
    22
    {
jorgen@7105
    23
        SDL_Event event;
jorgen@7105
    24
        while (SDL_PollEvent(&event))
jorgen@7105
    25
        {
jorgen@7105
    26
            switch (event.type)
jorgen@7105
    27
            {
jorgen@7105
    28
                case SDL_QUIT:
jorgen@7105
    29
                    return 1;
jorgen@7105
    30
                default:
jorgen@7105
    31
                    break;
jorgen@7105
    32
            }
jorgen@7105
    33
        }
jorgen@7105
    34
jorgen@7105
    35
        return 0;
jorgen@7105
    36
    }
jorgen@7105
    37
jorgen@7105
    38
    int main(int argc, char *argv[])
jorgen@7105
    39
    {
philipp@9337
    40
        SDL_Window *win;
philipp@9337
    41
jorgen@7105
    42
        SDL_Init(SDL_INIT_VIDEO);
jorgen@7105
    43
philipp@9337
    44
        win = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, 0);
jorgen@7105
    45
        SDL_SetRelativeMouseMode(SDL_TRUE);
jorgen@7105
    46
jorgen@7105
    47
        while (1)
jorgen@7105
    48
        {
jorgen@7105
    49
            if (PollEvents())
jorgen@7105
    50
                break;
jorgen@7105
    51
        }
jorgen@7105
    52
jorgen@7105
    53
        SDL_DestroyWindow(win);
jorgen@7105
    54
jorgen@7105
    55
        SDL_Quit();
jorgen@7105
    56
jorgen@7105
    57
        return 0;
jorgen@7105
    58
    }