// Test the ncurses mouse API //gcc -o mouse-test mouse-test.c -I~/working-copies/ncurses-snapshots/include ~/working-copies/ncurses-snapshots/lib/libncursesw.a #include #include #include #define BUTTON_NUM(X) \ (BUTTON##X##_PRESSED | BUTTON##X##_RELEASED | \ BUTTON##X##_CLICKED | BUTTON##X##_DOUBLE_CLICKED | BUTTON##X##_TRIPLE_CLICKED) #define BUTTON_EVENT(X) \ (BUTTON1_##X | BUTTON2_##X | BUTTON3_##X | BUTTON4_##X | BUTTON5_##X) int main(void) { initscr(); raw(); noecho(); scrollok(stdscr, TRUE); keypad(stdscr, TRUE); mouseinterval(0); mousemask(BUTTON_EVENT(PRESSED) | BUTTON_EVENT(RELEASED) /*| REPORT_MOUSE_POSITION*/, NULL); // mousemask(ALL_MOUSE_EVENTS, NULL); for (;;) { MEVENT event; int c = wgetch(stdscr); if (c == '\e') break; if (c != KEY_MOUSE) continue; while (getmouse(&event) == OK) { printw("EVENT: 0x%016X == %02d [%c%c%c%c%c%c]\n", event.bstate, ffs(event.bstate)-1, event.bstate & BUTTON_NUM(4) ? 'U' : ' ', event.bstate & BUTTON_NUM(5) ? 'D' : ' ', event.bstate & BUTTON_EVENT(PRESSED) ? 'P' : ' ', event.bstate & BUTTON_EVENT(RELEASED) ? 'R' : ' ', event.bstate & BUTTON_EVENT(CLICKED) ? 'C' : ' ', event.bstate & REPORT_MOUSE_POSITION ? 'M' : ' '); } } endwin(); return 0; }