src/video/dga/SDL_dgaevents.c

/* [<][>]
[^][v][top][bottom][index][help] */

FUNCTIONS

This source file includes following functions.
  1. DGA_DispatchEvent
  2. DGA_PumpEvents
  3. DGA_InitOSKeymap

   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: SDL_dgaevents.c,v 1.1.2.3 2001/02/10 07:20:06 hercules Exp $";
  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)
     /* [<][>][^][v][top][bottom][index][help] */
  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)
     /* [<][>][^][v][top][bottom][index][help] */
  98 {
  99         /* Keep processing pending events */
 100         while ( X11_Pending(DGA_Display) ) {
 101                 DGA_DispatchEvent(this);
 102         }
 103 }
 104 
 105 void DGA_InitOSKeymap(_THIS)
     /* [<][>][^][v][top][bottom][index][help] */
 106 {
 107         X11_InitKeymap();
 108 }
 109 

/* [<][>][^][v][top][bottom][index][help] */