SDL_amigamouse.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_amigamouse.c,v 1.4 2002/04/22 21:38:04 wmay Exp $";
  21. #endif
  22. #include "SDL_error.h"
  23. #include "SDL_mouse.h"
  24. #include "SDL_events_c.h"
  25. #include "SDL_cursor_c.h"
  26. #include "SDL_amigamouse_c.h"
  27. /* The implementation dependent data for the window manager cursor */
  28. typedef void * WMCursor;
  29. void amiga_FreeWMCursor(_THIS, WMcursor *cursor)
  30. {
  31. }
  32. WMcursor *amiga_CreateWMCursor(_THIS,
  33. Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y)
  34. {
  35. return (WMcursor *)1; // Amiga has an Hardware cursor, so it's ok to return something unuseful but true
  36. }
  37. int amiga_ShowWMCursor(_THIS, WMcursor *cursor)
  38. {
  39. /* Don't do anything if the display is gone */
  40. if ( SDL_Display == NULL) {
  41. return(0);
  42. }
  43. /* Set the Amiga prefs cursor cursor, or blank if cursor is NULL */
  44. if ( SDL_Window ) {
  45. SDL_Lock_EventThread();
  46. if ( cursor == NULL ) {
  47. if ( SDL_BlankCursor != NULL ) {
  48. // Hide cursor HERE
  49. SetPointer(SDL_Window,(UWORD *)SDL_BlankCursor,1,1,0,0);
  50. }
  51. } else {
  52. // Show cursor
  53. ClearPointer(SDL_Window);
  54. }
  55. SDL_Unlock_EventThread();
  56. }
  57. return(1);
  58. }
  59. void amiga_WarpWMCursor(_THIS, Uint16 x, Uint16 y)
  60. {
  61. /* FIXME: Not implemented */
  62. }
  63. /* Check to see if we need to enter or leave mouse relative mode */
  64. void amiga_CheckMouseMode(_THIS)
  65. {
  66. /* If the mouse is hidden and input is grabbed, we use relative mode */
  67. #if 0
  68. SDL_Lock_EventThread();
  69. if ( !(SDL_cursorstate & CURSOR_VISIBLE) &&
  70.      (this->input_grab != SDL_GRAB_OFF) ) {
  71. mouse_relative = 1;
  72. X11_EnableDGAMouse(this);
  73. if ( ! (using_dga & DGA_MOUSE) ) {
  74. char *use_mouse_accel;
  75. SDL_GetMouseState(&mouse_last.x, &mouse_last.y);
  76. /* Use as raw mouse mickeys as possible */
  77. XGetPointerControl(SDL_Display,
  78. &mouse_accel.numerator, 
  79. &mouse_accel.denominator,
  80. &mouse_accel.threshold);
  81. use_mouse_accel = getenv("SDL_VIDEO_X11_MOUSEACCEL");
  82. if ( use_mouse_accel ) {
  83. SetMouseAccel(this, use_mouse_accel);
  84. }
  85. }
  86. } else {
  87. if ( mouse_relative ) {
  88. if ( using_dga & DGA_MOUSE ) {
  89. X11_DisableDGAMouse(this);
  90. } else {
  91. XChangePointerControl(SDL_Display, True, True,
  92. mouse_accel.numerator, 
  93. mouse_accel.denominator,
  94. mouse_accel.threshold);
  95. }
  96. mouse_relative = 0;
  97. }
  98. }
  99. SDL_Unlock_EventThread();
  100. #endif
  101. }