Ignore:
Timestamp:
Mar 23, 2006, 7:36:59 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Massive rework of the event handling code, as per the TODO list.
File:
1 edited

Legend:

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

    r672 r681  
    227227}
    228228
    229 static unsigned int ncurses_get_event(caca_t *kk)
    230 {
    231     unsigned int event;
     229static int ncurses_get_event(caca_t *kk, struct caca_event *ev)
     230{
    232231    int intkey;
    233232
    234233    intkey = getch();
    235234    if(intkey == ERR)
    236         return CACA_EVENT_NONE;
     235    {
     236        ev->type = CACA_EVENT_NONE;
     237        return 0;
     238    }
    237239
    238240    if(intkey < 0x100)
    239241    {
    240         return CACA_EVENT_KEY_PRESS | intkey;
     242        ev->type = CACA_EVENT_KEY_PRESS;
     243        ev->data.key.c = intkey;
     244        return 1;
    241245    }
    242246
     
    249253        {
    250254            case BUTTON1_PRESSED:
    251                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
     255                ev->data.mouse.button = 1;
     256                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    252257                break;
    253258            case BUTTON1_RELEASED:
    254                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
     259                ev->data.mouse.button = 1;
     260                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    255261                break;
    256262            case BUTTON1_CLICKED:
    257                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
    258                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
     263                ev->data.mouse.button = 1;
     264                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     265                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    259266                break;
    260267            case BUTTON1_DOUBLE_CLICKED:
    261                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
    262                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
    263                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
    264                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
     268                ev->data.mouse.button = 1;
     269                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     270                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     271                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     272                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    265273                break;
    266274            case BUTTON1_TRIPLE_CLICKED:
    267                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
    268                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
    269                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
    270                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
    271                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 1);
    272                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 1);
     275                ev->data.mouse.button = 1;
     276                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     277                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     278                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     279                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     280                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     281                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    273282                break;
    274283            case BUTTON1_RESERVED_EVENT:
     
    276285
    277286            case BUTTON2_PRESSED:
    278                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
     287                ev->data.mouse.button = 2;
     288                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    279289                break;
    280290            case BUTTON2_RELEASED:
    281                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
     291                ev->data.mouse.button = 2;
     292                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    282293                break;
    283294            case BUTTON2_CLICKED:
    284                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
    285                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
     295                ev->data.mouse.button = 2;
     296                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     297                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    286298                break;
    287299            case BUTTON2_DOUBLE_CLICKED:
    288                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
    289                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
    290                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
    291                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
     300                ev->data.mouse.button = 2;
     301                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     302                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     303                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     304                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    292305                break;
    293306            case BUTTON2_TRIPLE_CLICKED:
    294                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
    295                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
    296                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
    297                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
    298                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 2);
    299                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 2);
     307                ev->data.mouse.button = 2;
     308                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     309                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     310                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     311                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     312                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     313                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    300314                break;
    301315            case BUTTON2_RESERVED_EVENT:
     
    303317
    304318            case BUTTON3_PRESSED:
    305                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
     319                ev->data.mouse.button = 3;
     320                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    306321                break;
    307322            case BUTTON3_RELEASED:
    308                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
     323                ev->data.mouse.button = 3;
     324                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    309325                break;
    310326            case BUTTON3_CLICKED:
    311                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
    312                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
     327                ev->data.mouse.button = 3;
     328                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     329                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    313330                break;
    314331            case BUTTON3_DOUBLE_CLICKED:
    315                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
    316                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
    317                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
    318                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
     332                ev->data.mouse.button = 3;
     333                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     334                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     335                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     336                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    319337                break;
    320338            case BUTTON3_TRIPLE_CLICKED:
    321                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
    322                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
    323                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
    324                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
    325                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 3);
    326                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 3);
     339                ev->data.mouse.button = 3;
     340                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     341                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     342                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     343                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     344                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     345                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    327346                break;
    328347            case BUTTON3_RESERVED_EVENT:
     
    330349
    331350            case BUTTON4_PRESSED:
    332                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
     351                ev->data.mouse.button = 4;
     352                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    333353                break;
    334354            case BUTTON4_RELEASED:
    335                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
     355                ev->data.mouse.button = 4;
     356                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    336357                break;
    337358            case BUTTON4_CLICKED:
    338                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
    339                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
     359                ev->data.mouse.button = 4;
     360                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     361                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    340362                break;
    341363            case BUTTON4_DOUBLE_CLICKED:
    342                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
    343                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
    344                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
    345                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
     364                ev->data.mouse.button = 4;
     365                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     366                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     367                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     368                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    346369                break;
    347370            case BUTTON4_TRIPLE_CLICKED:
    348                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
    349                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
    350                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
    351                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
    352                 _push_event(kk, CACA_EVENT_MOUSE_PRESS | 4);
    353                 _push_event(kk, CACA_EVENT_MOUSE_RELEASE | 4);
     371                ev->data.mouse.button = 4;
     372                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     373                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     374                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     375                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     376                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     377                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    354378                break;
    355379            case BUTTON4_RESERVED_EVENT:
     
    362386        if(kk->mouse.x == (unsigned int)mevent.x &&
    363387           kk->mouse.y == (unsigned int)mevent.y)
    364             return _pop_event(kk);
     388            return _pop_event(kk, ev);
    365389
    366390        kk->mouse.x = mevent.x;
    367391        kk->mouse.y = mevent.y;
    368392
    369         return CACA_EVENT_MOUSE_MOTION | (kk->mouse.x << 12) | kk->mouse.y;
    370     }
    371 
    372     event = CACA_EVENT_KEY_PRESS;
     393        ev->type = CACA_EVENT_MOUSE_MOTION;
     394        ev->data.mouse.x = kk->mouse.x;
     395        ev->data.mouse.y = kk->mouse.y;
     396        return 1;
     397    }
    373398
    374399    switch(intkey)
    375400    {
    376         case KEY_UP: return event | CACA_KEY_UP;
    377         case KEY_DOWN: return event | CACA_KEY_DOWN;
    378         case KEY_LEFT: return event | CACA_KEY_LEFT;
    379         case KEY_RIGHT: return event | CACA_KEY_RIGHT;
    380 
    381         case KEY_IC: return event | CACA_KEY_INSERT;
    382         case KEY_DC: return event | CACA_KEY_DELETE;
    383         case KEY_HOME: return event | CACA_KEY_HOME;
    384         case KEY_END: return event | CACA_KEY_END;
    385         case KEY_PPAGE: return event | CACA_KEY_PAGEUP;
    386         case KEY_NPAGE: return event | CACA_KEY_PAGEDOWN;
    387 
    388         case KEY_F(1): return event | CACA_KEY_F1;
    389         case KEY_F(2): return event | CACA_KEY_F2;
    390         case KEY_F(3): return event | CACA_KEY_F3;
    391         case KEY_F(4): return event | CACA_KEY_F4;
    392         case KEY_F(5): return event | CACA_KEY_F5;
    393         case KEY_F(6): return event | CACA_KEY_F6;
    394         case KEY_F(7): return event | CACA_KEY_F7;
    395         case KEY_F(8): return event | CACA_KEY_F8;
    396         case KEY_F(9): return event | CACA_KEY_F9;
    397         case KEY_F(10): return event | CACA_KEY_F10;
    398         case KEY_F(11): return event | CACA_KEY_F11;
    399         case KEY_F(12): return event | CACA_KEY_F12;
    400     }
    401 
    402     return CACA_EVENT_NONE;
     401        case KEY_UP: ev->data.key.c = CACA_KEY_UP; break;
     402        case KEY_DOWN: ev->data.key.c = CACA_KEY_DOWN; break;
     403        case KEY_LEFT: ev->data.key.c = CACA_KEY_LEFT; break;
     404        case KEY_RIGHT: ev->data.key.c = CACA_KEY_RIGHT; break;
     405
     406        case KEY_IC: ev->data.key.c = CACA_KEY_INSERT; break;
     407        case KEY_DC: ev->data.key.c = CACA_KEY_DELETE; break;
     408        case KEY_HOME: ev->data.key.c = CACA_KEY_HOME; break;
     409        case KEY_END: ev->data.key.c = CACA_KEY_END; break;
     410        case KEY_PPAGE: ev->data.key.c = CACA_KEY_PAGEUP; break;
     411        case KEY_NPAGE: ev->data.key.c = CACA_KEY_PAGEDOWN; break;
     412
     413        case KEY_F(1): ev->data.key.c = CACA_KEY_F1; break;
     414        case KEY_F(2): ev->data.key.c = CACA_KEY_F2; break;
     415        case KEY_F(3): ev->data.key.c = CACA_KEY_F3; break;
     416        case KEY_F(4): ev->data.key.c = CACA_KEY_F4; break;
     417        case KEY_F(5): ev->data.key.c = CACA_KEY_F5; break;
     418        case KEY_F(6): ev->data.key.c = CACA_KEY_F6; break;
     419        case KEY_F(7): ev->data.key.c = CACA_KEY_F7; break;
     420        case KEY_F(8): ev->data.key.c = CACA_KEY_F8; break;
     421        case KEY_F(9): ev->data.key.c = CACA_KEY_F9; break;
     422        case KEY_F(10): ev->data.key.c = CACA_KEY_F10; break;
     423        case KEY_F(11): ev->data.key.c = CACA_KEY_F11; break;
     424        case KEY_F(12): ev->data.key.c = CACA_KEY_F12; break;
     425
     426        default: ev->type = CACA_EVENT_NONE; return 0;
     427    }
     428
     429    ev->type = CACA_EVENT_KEY_PRESS;
     430    ev->data.key.ucs4 = 0;
     431    ev->data.key.utf8[0] = '\0';
     432    return 1;
    403433}
    404434
Note: See TracChangeset for help on using the changeset viewer.