SDL_dgaevents.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

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