void mouse_update( void ) #endif { static int btn_state = 0; unsigned char mousebuf[60]; /* max. events: 20 (PS/2) or 15 (other) */ ssize_t xoff = 0, yoff = 0; int btn_changed = 0, btn_new = btn_state, btn_mod = btn_state; if( mouse_fd == -1 ) return; while( 1 ) { ssize_t available; const unsigned char *i; available = read( mouse_fd, &mousebuf, sizeof( mousebuf ) ); if( available <= 0 ) break; if( !ui_mouse_grabbed ) continue; for( i = mousebuf; i < mousebuf + available; i += packet_size ) { btn_changed |= btn_mod ^= btn_new = i[0] & 7; btn_changed |= btn_mod ^= btn_new = i[0] & 7; xoff += i[1]; if( i[0] & 16 ) xoff -= 256; yoff += i[2]; if( i[0] & 32 ) yoff -= 256; } } btn_state = btn_new; if( btn_changed & 1 ) ui_mouse_button( 1, btn_new & 1 ); if( btn_changed & 2 ) ui_mouse_button( 3, btn_new & 2 ); if( xoff || yoff ) ui_mouse_motion( xoff, -yoff ); }
static void mouse_update_gpm( void ) { Gpm_Event event; int db; static int oldbuttons = 0; if( gpmfd < 0 ) { static int t = 0; if (!t) fprintf (stderr, "gpm not there?\n"); t = 1; return; } for (;;) { struct pollfd ufd = { gpmfd, POLLIN | POLLPRI }; if( poll( &ufd, 1, 0 ) < 1 ) break; gpm_getevent( &event ); if( !ui_mouse_grabbed ) continue; if( event.dx | event.dy ) ui_mouse_motion( event.dx, event.dy ); db = event.buttons ^ oldbuttons; if( db ) { oldbuttons = event.buttons; if( db & GPM_B_LEFT ) ui_mouse_button( 1, event.buttons & GPM_B_LEFT ); if( db & GPM_B_RIGHT ) ui_mouse_button( 3, event.buttons & GPM_B_RIGHT ); } } }
int ui_event(void) { XEvent event; XFlush( display ); while( XEventsQueued( display, QueuedAlready ) ) { XNextEvent( display, &event ); switch(event.type) { case ConfigureNotify: xdisplay_configure_notify(event.xconfigure.width, event.xconfigure.height); break; case Expose: xdisplay_area( event.xexpose.x, event.xexpose.y, event.xexpose.width, event.xexpose.height ); break; case ButtonPress: ui_mouse_button( event.xbutton.button, 1 ); break; case ButtonRelease: ui_mouse_button( event.xbutton.button, 0 ); break; case MotionNotify: if( ui_mouse_grabbed ) { ui_mouse_motion( event.xmotion.x - 128, event.xmotion.y - 128 ); if( event.xmotion.x != 128 || event.xmotion.y != 128 ) XWarpPointer( display, None, xui_mainWindow, 0, 0, 0, 0, 128, 128 ); } break; case FocusOut: keyboard_release_all(); ui_mouse_suspend(); break; case FocusIn: ui_mouse_resume(); break; case KeyPress: xkeyboard_keypress(&(event.xkey)); break; case KeyRelease: xkeyboard_keyrelease(&(event.xkey)); break; case ClientMessage: if( event.xclient.format == 32 && event.xclient.data.l[0] == delete_window_atom ) { fuse_emulation_pause(); menu_file_exit(0); fuse_emulation_unpause(); } break; } } return 0; }
//--------------------------------------------------------------------------- // windowMouse //--------------------------------------------------------------------------- void windowMouse( MPKWindow *w, MPKEvent *event ) { XEvent *ev = event->x; if(ev->type == ButtonPress) { ui_mouse_down(event->mouse.xref, event->mouse.yref); } if( event->button.left ) { ui_mouse_motion(event->mouse.x, event->mouse.y); } }
int ui_event(void) { XEvent event; while(XCheckMaskEvent(display,~NoEventMask,&event)) { switch(event.type) { case ConfigureNotify: xdisplay_configure_notify(event.xconfigure.width, event.xconfigure.height); break; case Expose: xdisplay_area( event.xexpose.x, event.xexpose.y, event.xexpose.width, event.xexpose.height ); break; case ButtonPress: ui_mouse_button( event.xbutton.button, 1 ); break; case ButtonRelease: ui_mouse_button( event.xbutton.button, 0 ); break; case MotionNotify: if( ui_mouse_grabbed ) { ui_mouse_motion( event.xmotion.x - 128, event.xmotion.y - 128 ); if( event.xmotion.x != 128 || event.xmotion.y != 128 ) XWarpPointer( display, None, xui_mainWindow, 0, 0, 0, 0, 128, 128 ); } break; case FocusOut: keyboard_release_all(); ui_mouse_suspend(); break; case FocusIn: ui_mouse_resume(); break; case KeyPress: xkeyboard_keypress(&(event.xkey)); break; case KeyRelease: xkeyboard_keyrelease(&(event.xkey)); break; case ClientMessage: if( event.xclient.data.l[0] == delete_window_atom ) fuse_exiting = 1; break; } } return 0; }
int ui_event( void ) { SDL_Event event; while ( SDL_PollEvent( &event ) ) { switch ( event.type ) { case SDL_KEYDOWN: sdlkeyboard_keypress( &(event.key) ); break; case SDL_KEYUP: sdlkeyboard_keyrelease( &(event.key) ); break; case SDL_MOUSEBUTTONDOWN: ui_mouse_button( event.button.button, 1 ); break; case SDL_MOUSEBUTTONUP: ui_mouse_button( event.button.button, 0 ); break; case SDL_MOUSEMOTION: if( ui_mouse_grabbed ) { ui_mouse_motion( event.motion.x - 128, event.motion.y - 128 ); if( event.motion.x != 128 || event.motion.y != 128 ) SDL_WarpMouse( 128, 128 ); } break; #if defined USE_JOYSTICK && !defined HAVE_JSW_H case SDL_JOYBUTTONDOWN: sdljoystick_buttonpress( &(event.jbutton) ); break; case SDL_JOYBUTTONUP: sdljoystick_buttonrelease( &(event.jbutton) ); break; case SDL_JOYAXISMOTION: sdljoystick_axismove( &(event.jaxis) ); break; #endif /* if defined USE_JOYSTICK && !defined HAVE_JSW_H */ case SDL_QUIT: fuse_emulation_pause(); menu_file_exit(0); fuse_emulation_unpause(); break; case SDL_VIDEOEXPOSE: display_refresh_all(); break; case SDL_ACTIVEEVENT: if( event.active.state & SDL_APPINPUTFOCUS ) { if( event.active.gain ) ui_mouse_resume(); else ui_mouse_suspend(); } break; default: break; } } return 0; }