Changeset 541 for libcaca/trunk


Ignore:
Timestamp:
Mar 7, 2006, 11:37:59 AM (15 years ago)
Author:
Sam Hocevar
Message:
  • Got rid of static variables in the event code.
Location:
libcaca/trunk/caca
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/caca.c

    r540 r541  
    8383    kk->timer.last_usec = 0;
    8484    kk->lastticks = 0;
     85
     86    kk->mouse_x = kk->qq->width / 2;
     87    kk->mouse_y = kk->qq->height / 2;
    8588
    8689    kk->resize = 0;
  • libcaca/trunk/caca/caca_internals.h

    r540 r541  
    4646#endif
    4747
     48#if !defined(_DOXYGEN_SKIP_ME)
     49#   define EVENTBUF_LEN 10
     50#endif
     51
    4852/* Graphics driver */
    4953enum caca_driver
     
    114118    } driver;
    115119
    116     unsigned int width, height;
     120    //unsigned int width, height;
     121    unsigned int mouse_x, mouse_y;
    117122
    118123    int resize;
     
    125130    struct events
    126131    {
     132#if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO)
     133        unsigned int buf[EVENTBUF_LEN];
     134        int queue;
     135#endif
    127136#if defined(USE_SLANG) || defined(USE_NCURSES)
    128137        struct caca_timer key_timer;
  • libcaca/trunk/caca/event.c

    r540 r541  
    5656#include "caca_internals.h"
    5757
    58 static unsigned int _get_next_event(caca_t *kk);
    59 static unsigned int _lowlevel_event(caca_t *kk);
     58static unsigned int _get_next_event(caca_t *);
     59static unsigned int _lowlevel_event(caca_t *);
    6060#if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO)
    61 static void _push_event(unsigned int);
    62 static unsigned int _pop_event(void);
    63 #endif
    64 
    65 #if !defined(_DOXYGEN_SKIP_ME)
    66 #define EVENTBUF_LEN 10
    67 #endif
    68 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO)
    69 static unsigned int eventbuf[EVENTBUF_LEN];
    70 static int events = 0;
    71 #endif
    72 
    73 static unsigned int mouse_x = 0, mouse_y = 0;
     61static void _push_event(caca_t *, unsigned int);
     62static unsigned int _pop_event(caca_t *);
     63#endif
    7464
    7565#if !defined(_DOXYGEN_SKIP_ME)
     
    145135unsigned int caca_get_mouse_x(caca_t *kk)
    146136{
    147     if(mouse_x >= kk->qq->width)
    148         mouse_x = kk->qq->width - 1;
    149 
    150     return mouse_x;
     137    if(kk->mouse_x >= kk->qq->width)
     138        kk->mouse_x = kk->qq->width - 1;
     139
     140    return kk->mouse_x;
    151141}
    152142
     
    162152unsigned int caca_get_mouse_y(caca_t *kk)
    163153{
    164     if(mouse_y >= kk->qq->height)
    165         mouse_y = kk->qq->height - 1;
    166 
    167     return mouse_y;
     154    if(kk->mouse_y >= kk->qq->height)
     155        kk->mouse_y = kk->qq->height - 1;
     156
     157    return kk->mouse_y;
    168158}
    169159
     
    201191           && kk->events.autorepeat_ticks > AUTOREPEAT_RATE)
    202192    {
    203         _push_event(event);
     193        _push_event(kk, event);
    204194        kk->events.autorepeat_ticks -= AUTOREPEAT_RATE;
    205195        return CACA_EVENT_KEY_PRESS | kk->events.last_key;
     
    220210               || (event & CACA_EVENT_KEY_PRESS)))
    221211    {
    222         _push_event(event);
     212        _push_event(kk, event);
    223213        event = CACA_EVENT_KEY_RELEASE | kk->events.last_key;
    224214        kk->events.last_key = 0;
     
    243233
    244234#if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO)
    245     event = _pop_event();
     235    event = _pop_event(kk);
    246236
    247237    if(event)
     
    307297                    newy = kk->qq->height - 1;
    308298
    309                 if(mouse_x == newx && mouse_y == newy)
     299                if(kk->mouse_x == newx && kk->mouse_y == newy)
    310300                    continue;
    311301
    312                 mouse_x = newx;
    313                 mouse_y = newy;
    314 
    315                 return CACA_EVENT_MOUSE_MOTION | (mouse_x << 12) | mouse_y;
     302                kk->mouse_x = newx;
     303                kk->mouse_y = newy;
     304
     305                return CACA_EVENT_MOUSE_MOTION | (kk->mouse_x << 12) | kk->mouse_y;
    316306            }
    317307
     
    395385            {
    396386                case BUTTON1_PRESSED:
    397                     _push_event(CACA_EVENT_MOUSE_PRESS | 1);
     387                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
    398388                    break;
    399389                case BUTTON1_RELEASED:
    400                     _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
     390                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
    401391                    break;
    402392                case BUTTON1_CLICKED:
    403                     _push_event(CACA_EVENT_MOUSE_PRESS | 1);
    404                     _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
     393                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
     394                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
    405395                    break;
    406396                case BUTTON1_DOUBLE_CLICKED:
    407                     _push_event(CACA_EVENT_MOUSE_PRESS | 1);
    408                     _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
    409                     _push_event(CACA_EVENT_MOUSE_PRESS | 1);
    410                     _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
     397                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
     398                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
     399                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
     400                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
    411401                    break;
    412402                case BUTTON1_TRIPLE_CLICKED:
    413                     _push_event(CACA_EVENT_MOUSE_PRESS | 1);
    414                     _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
    415                     _push_event(CACA_EVENT_MOUSE_PRESS | 1);
    416                     _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
    417                     _push_event(CACA_EVENT_MOUSE_PRESS | 1);
    418                     _push_event(CACA_EVENT_MOUSE_RELEASE | 1);
     403                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
     404                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
     405                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
     406                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
     407                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
     408                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
    419409                    break;
    420410                case BUTTON1_RESERVED_EVENT:
     
    422412
    423413                case BUTTON2_PRESSED:
    424                     _push_event(CACA_EVENT_MOUSE_PRESS | 2);
     414                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
    425415                    break;
    426416                case BUTTON2_RELEASED:
    427                     _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
     417                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
    428418                    break;
    429419                case BUTTON2_CLICKED:
    430                     _push_event(CACA_EVENT_MOUSE_PRESS | 2);
    431                     _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
     420                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
     421                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
    432422                    break;
    433423                case BUTTON2_DOUBLE_CLICKED:
    434                     _push_event(CACA_EVENT_MOUSE_PRESS | 2);
    435                     _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
    436                     _push_event(CACA_EVENT_MOUSE_PRESS | 2);
    437                     _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
     424                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
     425                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
     426                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
     427                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
    438428                    break;
    439429                case BUTTON2_TRIPLE_CLICKED:
    440                     _push_event(CACA_EVENT_MOUSE_PRESS | 2);
    441                     _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
    442                     _push_event(CACA_EVENT_MOUSE_PRESS | 2);
    443                     _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
    444                     _push_event(CACA_EVENT_MOUSE_PRESS | 2);
    445                     _push_event(CACA_EVENT_MOUSE_RELEASE | 2);
     430                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
     431                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
     432                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
     433                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
     434                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
     435                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
    446436                    break;
    447437                case BUTTON2_RESERVED_EVENT:
     
    449439
    450440                case BUTTON3_PRESSED:
    451                     _push_event(CACA_EVENT_MOUSE_PRESS | 3);
     441                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
    452442                    break;
    453443                case BUTTON3_RELEASED:
    454                     _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
     444                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
    455445                    break;
    456446                case BUTTON3_CLICKED:
    457                     _push_event(CACA_EVENT_MOUSE_PRESS | 3);
    458                     _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
     447                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
     448                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
    459449                    break;
    460450                case BUTTON3_DOUBLE_CLICKED:
    461                     _push_event(CACA_EVENT_MOUSE_PRESS | 3);
    462                     _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
    463                     _push_event(CACA_EVENT_MOUSE_PRESS | 3);
    464                     _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
     451                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
     452                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
     453                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
     454                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
    465455                    break;
    466456                case BUTTON3_TRIPLE_CLICKED:
    467                     _push_event(CACA_EVENT_MOUSE_PRESS | 3);
    468                     _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
    469                     _push_event(CACA_EVENT_MOUSE_PRESS | 3);
    470                     _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
    471                     _push_event(CACA_EVENT_MOUSE_PRESS | 3);
    472                     _push_event(CACA_EVENT_MOUSE_RELEASE | 3);
     457                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
     458                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
     459                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
     460                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
     461                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
     462                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
    473463                    break;
    474464                case BUTTON3_RESERVED_EVENT:
     
    476466
    477467                case BUTTON4_PRESSED:
    478                     _push_event(CACA_EVENT_MOUSE_PRESS | 4);
     468                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
    479469                    break;
    480470                case BUTTON4_RELEASED:
    481                     _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
     471                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
    482472                    break;
    483473                case BUTTON4_CLICKED:
    484                     _push_event(CACA_EVENT_MOUSE_PRESS | 4);
    485                     _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
     474                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
     475                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
    486476                    break;
    487477                case BUTTON4_DOUBLE_CLICKED:
    488                     _push_event(CACA_EVENT_MOUSE_PRESS | 4);
    489                     _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
    490                     _push_event(CACA_EVENT_MOUSE_PRESS | 4);
    491                     _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
     478                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
     479                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
     480                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
     481                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
    492482                    break;
    493483                case BUTTON4_TRIPLE_CLICKED:
    494                     _push_event(CACA_EVENT_MOUSE_PRESS | 4);
    495                     _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
    496                     _push_event(CACA_EVENT_MOUSE_PRESS | 4);
    497                     _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
    498                     _push_event(CACA_EVENT_MOUSE_PRESS | 4);
    499                     _push_event(CACA_EVENT_MOUSE_RELEASE | 4);
     484                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
     485                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
     486                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
     487                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
     488                    _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
     489                    _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
    500490                    break;
    501491                case BUTTON4_RESERVED_EVENT:
     
    506496            }
    507497
    508             if(mouse_x == (unsigned int)mevent.x &&
    509                mouse_y == (unsigned int)mevent.y)
    510                 return _pop_event();
    511 
    512             mouse_x = mevent.x;
    513             mouse_y = mevent.y;
    514 
    515             return CACA_EVENT_MOUSE_MOTION | (mouse_x << 12) | mouse_y;
     498            if(kk->mouse_x == (unsigned int)mevent.x &&
     499               kk->mouse_y == (unsigned int)mevent.y)
     500                return _pop_event(kk);
     501
     502            kk->mouse_x = mevent.x;
     503            kk->mouse_y = mevent.y;
     504
     505            return CACA_EVENT_MOUSE_MOTION | (kk->mouse_x << 12) | kk->mouse_y;
    516506        }
    517507
     
    587577            unsigned int x = SLang_getkey() - '!';
    588578            unsigned int y = SLang_getkey() - '!';
    589             _push_event(CACA_EVENT_MOUSE_PRESS | button);
    590             _push_event(CACA_EVENT_MOUSE_RELEASE | button);
    591 
    592             if(mouse_x == x && mouse_y == y)
    593                 return _pop_event();
    594 
    595             mouse_x = x;
    596             mouse_y = y;
    597 
    598             return CACA_EVENT_MOUSE_MOTION | (mouse_x << 12) | mouse_y;
     579            _push_event(kk, CACA_EVENT_MOUSE_PRESS | button);
     580            _push_event(kk, CACA_EVENT_MOUSE_RELEASE | button);
     581
     582            if(kk->mouse_x == x && kk->mouse_y == y)
     583                return _pop_event(kk);
     584
     585            kk->mouse_x = x;
     586            kk->mouse_y = y;
     587
     588            return CACA_EVENT_MOUSE_MOTION | (kk->mouse_x << 12) | kk->mouse_y;
    599589        }
    600590
     
    640630
    641631        event = getch();
    642         _push_event(CACA_EVENT_KEY_RELEASE | event);
     632        _push_event(kk, CACA_EVENT_KEY_RELEASE | event);
    643633        return CACA_EVENT_KEY_PRESS | event;
    644634    }
     
    683673                    COORD pos = rec.Event.MouseEvent.dwMousePosition;
    684674
    685                     if(mouse_x == (unsigned int)pos.X &&
    686                        mouse_y == (unsigned int)pos.Y)
     675                    if(kk->mouse_x == (unsigned int)pos.X &&
     676                       kk->mouse_y == (unsigned int)pos.Y)
    687677                        continue;
    688678
    689                     mouse_x = pos.X;
    690                     mouse_y = pos.Y;
    691 
    692                     return CACA_EVENT_MOUSE_MOTION | (mouse_x << 12) | mouse_y;
     679                    kk->mouse_x = pos.X;
     680                    kk->mouse_y = pos.Y;
     681
     682                    return CACA_EVENT_MOUSE_MOTION | (kk->mouse_x << 12) | kk->mouse_y;
    693683                }
    694684#if 0
     
    738728                kk->gl.mouse_clicked=0;
    739729            }
    740             mouse_x = kk->gl.mouse_x;
    741             mouse_y = kk->gl.mouse_y;
    742             event |= CACA_EVENT_MOUSE_MOTION | (mouse_x << 12) | mouse_y;
     730            kk->mouse_x = kk->gl.mouse_x;
     731            kk->mouse_y = kk->gl.mouse_y;
     732            event |= CACA_EVENT_MOUSE_MOTION | (kk->mouse_x << 12) | kk->mouse_y;
    743733            kk->gl.mouse_changed = 0;
    744734        }
     
    789779
    790780#if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO)
    791 static void _push_event(unsigned int event)
     781static void _push_event(caca_t *kk, unsigned int event)
    792782{
    793     if(!event || events == EVENTBUF_LEN)
     783    if(!event || kk->events.queue == EVENTBUF_LEN)
    794784        return;
    795     eventbuf[events] = event;
    796     events++;
     785    kk->events.buf[kk->events.queue] = event;
     786    kk->events.queue++;
    797787}
    798788
    799 static unsigned int _pop_event(void)
     789static unsigned int _pop_event(caca_t *kk)
    800790{
    801791    int i;
    802792    unsigned int event;
    803793
    804     if(events == 0)
     794    if(kk->events.queue == 0)
    805795        return CACA_EVENT_NONE;
    806796
    807     event = eventbuf[0];
    808     for(i = 1; i < events; i++)
    809         eventbuf[i - 1] = eventbuf[i];
    810     events--;
     797    event = kk->events.buf[0];
     798    for(i = 1; i < kk->events.queue; i++)
     799        kk->events.buf[i - 1] = kk->events.buf[i];
     800    kk->events.queue--;
    811801
    812802    return event;
Note: See TracChangeset for help on using the changeset viewer.