Ignore:
Timestamp:
Mar 8, 2006, 10:28:41 AM (15 years ago)
Author:
Sam Hocevar
Message:
  • Split event.c into the appropriate driver_*.c files.
File:
1 edited

Legend:

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

    r540 r548  
    217217}
    218218
     219static unsigned int win32_get_event(caca_t *kk)
     220{
     221    INPUT_RECORD rec;
     222    DWORD num;
     223
     224    for( ; ; )
     225    {
     226        GetNumberOfConsoleInputEvents(kk->win32.hin, &num);
     227        if(num == 0)
     228            break;
     229
     230        ReadConsoleInput(kk->win32.hin, &rec, 1, &num);
     231        if(rec.EventType == KEY_EVENT)
     232        {
     233            unsigned int event;
     234
     235            if(rec.Event.KeyEvent.bKeyDown)
     236                event = CACA_EVENT_KEY_PRESS;
     237            else
     238                event = CACA_EVENT_KEY_RELEASE;
     239
     240            if(rec.Event.KeyEvent.uChar.AsciiChar)
     241                return event | rec.Event.KeyEvent.uChar.AsciiChar;
     242        }
     243
     244        if(rec.EventType == MOUSE_EVENT)
     245        {
     246            if(rec.Event.MouseEvent.dwEventFlags == 0)
     247            {
     248                if(rec.Event.MouseEvent.dwButtonState & 0x01)
     249                    return CACA_EVENT_MOUSE_PRESS | 0x000001;
     250
     251                if(rec.Event.MouseEvent.dwButtonState & 0x02)
     252                    return CACA_EVENT_MOUSE_PRESS | 0x000002;
     253            }
     254            else if(rec.Event.MouseEvent.dwEventFlags == MOUSE_MOVED)
     255            {
     256                COORD pos = rec.Event.MouseEvent.dwMousePosition;
     257
     258                if(kk->mouse_x == (unsigned int)pos.X &&
     259                   kk->mouse_y == (unsigned int)pos.Y)
     260                    continue;
     261
     262                kk->mouse_x = pos.X;
     263                kk->mouse_y = pos.Y;
     264
     265                return CACA_EVENT_MOUSE_MOTION | (kk->mouse_x << 12) | kk->mouse_y;
     266            }
     267#if 0
     268            else if(rec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
     269            {
     270                cout << rec.Event.MouseEvent.dwMousePosition.X << "," <<
     271                        rec.Event.MouseEvent.dwMousePosition.Y << "  " << flush;
     272            }
     273            else if(rec.Event.MouseEvent.dwEventFlags == MOUSE_WHEELED)
     274            {
     275                SetConsoleCursorPosition(hOut,
     276                                         WheelWhere);
     277                if(rec.Event.MouseEvent.dwButtonState & 0xFF000000)
     278                    cout << "Down" << flush;
     279                else
     280                    cout << "Up  " << flush;
     281            }
     282#endif
     283        }
     284
     285        /* Unknown event */
     286        return CACA_EVENT_NONE;
     287    }
     288
     289    /* No event */
     290    return CACA_EVENT_NONE;
     291}
     292
    219293/*
    220294 * Driver initialisation
     
    232306    kk->driver.display = win32_display;
    233307    kk->driver.handle_resize = win32_handle_resize;
     308    kk->driver.get_event = win32_get_event;
    234309}
    235310
Note: See TracChangeset for help on using the changeset viewer.