src/video/dga/SDL_dgaevents.c
author Sam Lantinga <slouken@lokigames.com>
Thu, 26 Apr 2001 16:45:43 +0000
changeset 0 74212992fb08
child 101 825b2fa28e2e
permissions -rw-r--r--
Initial revision
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997, 1998, 1999, 2000, 2001  Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Library General Public
     7     License as published by the Free Software Foundation; either
     8     version 2 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Library General Public License for more details.
    14 
    15     You should have received a copy of the GNU Library General Public
    16     License along with this library; if not, write to the Free
    17     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    18 
    19     Sam Lantinga
    20     slouken@devolution.com
    21 */
    22 
    23 #ifdef SAVE_RCSID
    24 static char rcsid =
    25  "@(#) $Id$";
    26 #endif
    27 
    28 /* Handle the event stream, converting DGA events into SDL events */
    29 
    30 #include <stdio.h>
    31 #include <X11/Xlib.h>
    32 #include <X11/extensions/xf86dga.h>
    33 
    34 #include "SDL_sysvideo.h"
    35 #include "SDL_events_c.h"
    36 #include "SDL_dgavideo.h"
    37 #include "SDL_dgaevents_c.h"
    38 
    39 /* Heheh we're using X11 event code */
    40 extern int X11_Pending(Display *display);
    41 extern void X11_InitKeymap(void);
    42 extern SDL_keysym *X11_TranslateKey(Display *display, XKeyEvent *xkey,
    43 				    KeyCode kc, SDL_keysym *keysym);
    44 
    45 static int DGA_DispatchEvent(_THIS)
    46 {
    47 	int posted;
    48 	XDGAEvent xevent;
    49 
    50 	XNextEvent(DGA_Display, (XEvent *)&xevent);
    51 
    52 	posted = 0;
    53 	xevent.type -= DGA_event_base;
    54 	switch (xevent.type) {
    55 
    56 	    /* Mouse motion? */
    57 	    case MotionNotify: {
    58 		if ( SDL_VideoSurface ) {
    59 			posted = SDL_PrivateMouseMotion(0, 1,
    60 					xevent.xmotion.dx, xevent.xmotion.dy);
    61 		}
    62 	    }
    63 	    break;
    64 
    65 	    /* Mouse button press? */
    66 	    case ButtonPress: {
    67 		posted = SDL_PrivateMouseButton(SDL_PRESSED, 
    68 					xevent.xbutton.button, 0, 0);
    69 	    }
    70 	    break;
    71 
    72 	    /* Mouse button release? */
    73 	    case ButtonRelease: {
    74 		posted = SDL_PrivateMouseButton(SDL_RELEASED, 
    75 					xevent.xbutton.button, 0, 0);
    76 	    }
    77 	    break;
    78 
    79 	    /* Key press or release? */
    80 	    case KeyPress:
    81 	    case KeyRelease: {
    82 		SDL_keysym keysym;
    83 		XKeyEvent xkey;
    84 
    85 		XDGAKeyEventToXKeyEvent(&xevent.xkey, &xkey);
    86 		posted = SDL_PrivateKeyboard((xevent.type == KeyPress), 
    87 					X11_TranslateKey(DGA_Display,
    88 							 &xkey, xkey.keycode,
    89 							 &keysym));
    90 	    }
    91 	    break;
    92 
    93 	}
    94 	return(posted);
    95 }
    96 
    97 void DGA_PumpEvents(_THIS)
    98 {
    99 	/* Keep processing pending events */
   100 	while ( X11_Pending(DGA_Display) ) {
   101 		DGA_DispatchEvent(this);
   102 	}
   103 }
   104 
   105 void DGA_InitOSKeymap(_THIS)
   106 {
   107 	X11_InitKeymap();
   108 }
   109