Changeset 316


Ignore:
Timestamp:
Jan 5, 2004, 7:17:20 PM (16 years ago)
Author:
Sam Hocevar
Message:
  • src/io.c: + caca_get_event() and caca_wait_event() now accept a mask as an argument

in order to select events.

Location:
libcaca/trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/examples/aafire.c

    r305 r316  
    237237  gentable ();
    238238#ifdef LIBCACA
    239   while (!(event = caca_get_event() & CACA_EVENT_KEY_PRESS))
     239  while (!(event = caca_get_event(CACA_EVENT_KEY_PRESS)))
    240240#else
    241241  while (!(event = aa_getevent (context, 0)) || event == AA_RESIZE)
  • libcaca/trunk/examples/cacaview.c

    r314 r316  
    109109        int wh = caca_get_height();
    110110
    111         int event, new_status = 0, new_help = 0;
    112 
    113         while((event = caca_get_event()))
    114         {
    115             switch(event)
     111        unsigned int event, new_status = 0, new_help = 0;
     112
     113        while((event = caca_get_event(CACA_EVENT_KEY_PRESS)))
     114        {
     115            unsigned int key = event & 0x00ffffff;
     116
     117            switch(key)
    116118            {
    117             case CACA_EVENT_KEY_PRESS | 'n':
    118             case CACA_EVENT_KEY_PRESS | 'N':
     119            case 'n':
     120            case 'N':
    119121                if(items) current = (current + 1) % items;
    120122                reload = 1;
    121123                break;
    122             case CACA_EVENT_KEY_PRESS | 'p':
    123             case CACA_EVENT_KEY_PRESS | 'P':
     124            case 'p':
     125            case 'P':
    124126                if(items) current = (items + current - 1) % items;
    125127                reload = 1;
    126128                break;
    127             case CACA_EVENT_KEY_PRESS | 'f':
    128             case CACA_EVENT_KEY_PRESS | 'F':
     129            case 'f':
     130            case 'F':
    129131                fullscreen = ~fullscreen;
    130132                update = 1;
    131133                break;
    132             case CACA_EVENT_KEY_PRESS | 'b':
     134            case 'b':
    133135                i = 1 + caca_get_feature(CACA_BACKGROUND);
    134136                if(i > CACA_BACKGROUND_MAX) i = CACA_BACKGROUND_MIN;
     
    137139                update = 1;
    138140                break;
    139             case CACA_EVENT_KEY_PRESS | 'B':
     141            case 'B':
    140142                i = -1 + caca_get_feature(CACA_BACKGROUND);
    141143                if(i < CACA_BACKGROUND_MIN) i = CACA_BACKGROUND_MAX;
     
    144146                update = 1;
    145147                break;
    146             case CACA_EVENT_KEY_PRESS | 'a':
     148            case 'a':
    147149                i = 1 + caca_get_feature(CACA_ANTIALIASING);
    148150                if(i > CACA_ANTIALIASING_MAX) i = CACA_ANTIALIASING_MIN;
     
    151153                update = 1;
    152154                break;
    153             case CACA_EVENT_KEY_PRESS | 'A':
     155            case 'A':
    154156                i = -1 + caca_get_feature(CACA_ANTIALIASING);
    155157                if(i < CACA_ANTIALIASING_MIN) i = CACA_ANTIALIASING_MAX;
     
    158160                update = 1;
    159161                break;
    160             case CACA_EVENT_KEY_PRESS | 'd':
     162            case 'd':
    161163                i = 1 + caca_get_feature(CACA_DITHERING);
    162164                if(i > CACA_DITHERING_MAX) i = CACA_DITHERING_MIN;
     
    165167                update = 1;
    166168                break;
    167             case CACA_EVENT_KEY_PRESS | 'D':
     169            case 'D':
    168170                i = -1 + caca_get_feature(CACA_DITHERING);
    169171                if(i < CACA_DITHERING_MIN) i = CACA_DITHERING_MAX;
     
    172174                update = 1;
    173175                break;
    174             case CACA_EVENT_KEY_PRESS | '+':
     176            case '+':
    175177                zoom++;
    176178                if(zoom > 48) zoom = 48; else update = 1;
    177179                break;
    178             case CACA_EVENT_KEY_PRESS | '-':
     180            case '-':
    179181                zoom--;
    180182                if(zoom < -48) zoom = -48; else update = 1;
    181183                break;
    182             case CACA_EVENT_KEY_PRESS | 'x':
    183             case CACA_EVENT_KEY_PRESS | 'X':
     184            case 'x':
     185            case 'X':
    184186                zoom = 0;
    185187                update = 1;
    186188                break;
    187             case CACA_EVENT_KEY_PRESS | 'k':
    188             case CACA_EVENT_KEY_PRESS | 'K':
    189             case CACA_EVENT_KEY_PRESS | CACA_KEY_UP:
     189            case 'k':
     190            case 'K':
     191            case CACA_KEY_UP:
    190192                if(zoom > 0) y -= 1 + h / (2 + zoom) / 8;
    191193                update = 1;
    192194                break;
    193             case CACA_EVENT_KEY_PRESS | 'j':
    194             case CACA_EVENT_KEY_PRESS | 'J':
    195             case CACA_EVENT_KEY_PRESS | CACA_KEY_DOWN:
     195            case 'j':
     196            case 'J':
     197            case CACA_KEY_DOWN:
    196198                if(zoom > 0) y += 1 + h / (2 + zoom) / 8;
    197199                update = 1;
    198200                break;
    199             case CACA_EVENT_KEY_PRESS | 'h':
    200             case CACA_EVENT_KEY_PRESS | 'H':
    201             case CACA_EVENT_KEY_PRESS | CACA_KEY_LEFT:
     201            case 'h':
     202            case 'H':
     203            case CACA_KEY_LEFT:
    202204                if(zoom > 0) x -= 1 + w / (2 + zoom) / 8;
    203205                update = 1;
    204206                break;
    205             case CACA_EVENT_KEY_PRESS | 'l':
    206             case CACA_EVENT_KEY_PRESS | 'L':
    207             case CACA_EVENT_KEY_PRESS | CACA_KEY_RIGHT:
     207            case 'l':
     208            case 'L':
     209            case CACA_KEY_RIGHT:
    208210                if(zoom > 0) x += 1 + w / (2 + zoom) / 8;
    209211                update = 1;
    210212                break;
    211             case CACA_EVENT_KEY_PRESS | '?':
     213            case '?':
    212214                new_help = !help;
    213215                update = 1;
    214216                break;
    215             case CACA_EVENT_KEY_PRESS | 'q':
    216             case CACA_EVENT_KEY_PRESS | 'Q':
     217            case 'q':
     218            case 'Q':
    217219                quit = 1;
    218220                break;
  • libcaca/trunk/examples/demo.c

    r287 r316  
    7575        int event;
    7676
    77         while((event = caca_get_event()))
     77        while((event = caca_get_event(CACA_EVENT_ANY)))
    7878        {
    7979            if(demo && (event & CACA_EVENT_KEY_PRESS))
  • libcaca/trunk/examples/spritedit.c

    r268 r316  
    5959        int event;
    6060
    61         while((event = caca_get_event()))
     61        while((event = caca_get_event(CACA_EVENT_KEY_PRESS)))
    6262        {
    63             if(event & CACA_EVENT_KEY_PRESS)
    64                 switch(event & 0xff)
    65                 {
    66                 case 0:
    67                     break;
    68                 case 'q':
    69                     quit = 1;
    70                     break;
    71                 case '-':
    72                     if(frame > 0)
    73                         frame--;
    74                     break;
    75                 case '+':
    76                     if(frame < caca_get_sprite_frames(sprite) - 1)
    77                         frame++;
    78                     break;
    79                 }
     63            switch(event & 0x00ffffff)
     64            {
     65            case 0:
     66                break;
     67            case 'q':
     68                quit = 1;
     69                break;
     70            case '-':
     71                if(frame > 0)
     72                    frame--;
     73                break;
     74            case '+':
     75                if(frame < caca_get_sprite_frames(sprite) - 1)
     76                    frame++;
     77                break;
     78            }
    8079        }
    8180
  • libcaca/trunk/src/caca.h

    r305 r316  
    181181    CACA_EVENT_MOUSE_PRESS =   0x04000000, /**< A mouse button was pressed. */
    182182    CACA_EVENT_MOUSE_RELEASE = 0x08000000, /**< A mouse button was released. */
    183     CACA_EVENT_MOUSE_MOTION =  0x10000000  /**< The mouse was moved. */
     183    CACA_EVENT_MOUSE_MOTION =  0x10000000, /**< The mouse was moved. */
     184    CACA_EVENT_ANY =           0xff000000  /**< Bitmask for any event. */
    184185};
    185186
     
    237238 *
    238239 *  @{ */
    239 unsigned int caca_get_event(void);
    240 unsigned int caca_wait_event(void);
     240unsigned int caca_get_event(unsigned int);
     241unsigned int caca_wait_event(unsigned int);
    241242/*  @} */
    242243
  • libcaca/trunk/src/io.c

    r314 r316  
    5454#include "caca_internals.h"
    5555
     56static unsigned int _get_next_event(void);
    5657static void _push_key(unsigned int);
    5758static unsigned int _pop_key(void);
     
    6465/** \brief Get the next mouse or keyboard input event.
    6566 *
    66  *  This function polls the event queue for mouse or keyboard events and
    67  *  returns the event. It is non-blocking and returns zero if no event is
     67 *  This function polls the event queue for mouse or keyboard events matching
     68 *  the event mask and returns the first matching event. Non-matching events
     69 *  are discarded. It is non-blocking and returns zero if no more events are
    6870 *  pending in the queue. See also caca_wait_event() for a blocking version
    6971 *  of this function.
    7072 *
    71  * \return The next event in the queue, or 0 if no event is pending.
    72  */
    73 unsigned int caca_get_event(void)
     73 * \param event_mask Bitmask of requested events.
     74 * \return The next matching event in the queue, or 0 if no event is pending.
     75 */
     76unsigned int caca_get_event(unsigned int event_mask)
     77{
     78    for( ; ; )
     79    {
     80        unsigned int event = _get_next_event();
     81
     82        if(!event || event & event_mask)
     83            return event;
     84    }
     85}
     86
     87/** \brief Wait for the next mouse or keyboard input event.
     88 *
     89 *  This function returns the first mouse or keyboard event in the queue
     90 *  that matches the event mask. If no event is pending, it blocks until a
     91 *  matching event is received. See also caca_get_event() for a non-blocking
     92 *  version of this function.
     93 *
     94 *  \param event_mask Bitmask of requested events.
     95 *  \return The next event in the queue.
     96 */
     97unsigned int caca_wait_event(unsigned int event_mask)
     98{
     99    for( ; ; )
     100    {
     101        unsigned int event = _get_next_event();
     102
     103        if(event & event_mask)
     104            return event;
     105
     106        usleep(1000);
     107    }
     108}
     109
     110/*
     111 * XXX: The following functions are local.
     112 */
     113
     114static unsigned int _get_next_event(void)
    74115{
    75116    unsigned int event = 0;
    76117
    77118#if defined(USE_X11)
     119    /* The X11 event check routine */
    78120    if(_caca_driver == CACA_DRIVER_X11)
    79121    {
     
    89131            KeySym keysym;
    90132
     133            /* Check for mouse motion events */
    91134            if(xevent.type == MotionNotify)
    92135            {
     
    108151            }
    109152
     153            /* Check for mouse press and release events */
    110154            if(xevent.type == ButtonPress)
    111155                return CACA_EVENT_MOUSE_PRESS | 1;
     
    114158                return CACA_EVENT_MOUSE_RELEASE | 1;
    115159
     160            /* Check for key press and release events */
    116161            if(xevent.type == KeyPress)
    117162                event |= CACA_EVENT_KEY_PRESS;
     
    119164                event |= CACA_EVENT_KEY_RELEASE;
    120165            else
    121                 return 0;
     166                continue;
    122167
    123168            if(XLookupString(&xevent.xkey, &key, 1, NULL, NULL))
     
    176221            getmouse(&mevent);
    177222            _push_key(CACA_EVENT_MOUSE_PRESS | 1);
    178             return CACA_EVENT_MOUSE_MOTION
    179                     | (mevent.x << 12) | (mevent.y << 0);
     223            return CACA_EVENT_MOUSE_MOTION | (mevent.x << 12) | mevent.y;
    180224        }
    181225
     
    278322}
    279323
    280 /** \brief Wait for the next mouse or keyboard input event.
    281  *
    282  *  This function returns the first mouse or keyboard event in the queue. If
    283  *  no event is pending, it blocks until an event is received. See also
    284  *  caca_get_event() for a non-blocking version of this function.
    285  *
    286  *  \return The next event in the queue.
    287  */
    288 unsigned int caca_wait_event(void)
    289 {
    290     for( ; ; )
    291     {
    292         unsigned int event = caca_get_event();
    293 
    294         if(event)
    295             return event;
    296 
    297         usleep(1000);
    298     }
    299 }
    300 
    301 /*
    302  * XXX: The following functions are local.
    303  */
    304 
    305324static void _push_key(unsigned int key)
    306325{
  • libcaca/trunk/test/dithering.c

    r297 r316  
    129129    caca_refresh();
    130130
    131     while((caca_get_event() & 0xff000000) != CACA_EVENT_KEY_PRESS);
     131    while(!caca_get_event(CACA_EVENT_KEY_PRESS));
    132132
    133133    caca_end();
  • libcaca/trunk/test/hsv.c

    r307 r316  
    5757    caca_refresh();
    5858
    59     while((caca_get_event() & 0xff000000) != CACA_EVENT_KEY_PRESS);
     59    while(!caca_get_event(CACA_EVENT_KEY_PRESS));
    6060
    6161    caca_end();
Note: See TracChangeset for help on using the changeset viewer.