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

流媒体/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_active.c,v 1.4 2002/04/22 21:38:02 wmay Exp $";
  21. #endif
  22. /* Application focus/iconification handling code for SDL */
  23. #include <stdio.h>
  24. #include <string.h>
  25. #include "SDL_events.h"
  26. #include "SDL_events_c.h"
  27. /* These are static for our active event handling code */
  28. static Uint8 SDL_appstate = 0;
  29. /* Public functions */
  30. int SDL_AppActiveInit(void)
  31. {
  32. /* Start completely active */
  33. SDL_appstate = (SDL_APPACTIVE|SDL_APPINPUTFOCUS|SDL_APPMOUSEFOCUS);
  34. /* That's it! */
  35. return(0);
  36. }
  37. Uint8 SDL_GetAppState(void)
  38. {
  39. return(SDL_appstate);
  40. }
  41. /* This is global for SDL_eventloop.c */
  42. int SDL_PrivateAppActive(Uint8 gain, Uint8 state)
  43. {
  44. int posted;
  45. Uint8 new_state;
  46. /* Modify the current state with the given mask */
  47. if ( gain ) {
  48. new_state = (SDL_appstate | state);
  49. } else {
  50. new_state = (SDL_appstate & ~state);
  51. }
  52. /* Drop events that don't change state */
  53. if ( new_state == SDL_appstate ) {
  54. return(0);
  55. }
  56. /* Update internal active state */
  57. SDL_appstate = new_state;
  58. /* Post the event, if desired */
  59. posted = 0;
  60. if ( SDL_ProcessEvents[SDL_ACTIVEEVENT] == SDL_ENABLE ) {
  61. SDL_Event event;
  62. memset(&event, 0, sizeof(event));
  63. event.type = SDL_ACTIVEEVENT;
  64. event.active.gain = gain;
  65. event.active.state = state;
  66. if ( (SDL_EventOK == NULL) || (*SDL_EventOK)(&event) ) {
  67. posted = 1;
  68. SDL_PushEvent(&event);
  69. }
  70. }
  71. /* If we lost keyboard focus, post key-up events */
  72. if ( (state & SDL_APPINPUTFOCUS) && !gain ) {
  73. SDL_ResetKeyboard();
  74. }
  75. return(posted);
  76. }