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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /* Subclass of NSWindow to allow customization if we need it */
  2. @interface SDL_QuartzWindow : NSWindow
  3. {}
  4. - (void)miniaturize:(id)sender;
  5. - (void)deminiaturize:(id)sender;
  6. - (void)display;
  7. @end
  8. /**
  9.  * Function to set the opacity of window's pixels to 100% 
  10.  * The opacity is only used by the window server code that does the minimize effect
  11.  **/
  12. static void QZ_SetPortAlphaOpaque (CGrafPtr port, Uint32 noTitleBar) {
  13.     
  14.     Uint32 *pixels;
  15.     Uint32  rowPixels;
  16.     Uint32  width, height;
  17.     Uint32  bpp;
  18.     PixMapHandle pixMap;
  19.     Rect bounds;
  20.     int i, j;
  21.     
  22.     pixMap = GetPortPixMap ( port );
  23.     bpp = GetPixDepth ( pixMap );
  24.     
  25.     if (bpp == 32) {
  26.     
  27.         GetPortBounds ( port, &bounds );
  28.         width = bounds.right - bounds.left;
  29.         height = bounds.bottom - bounds.top;
  30.         
  31.         LockPortBits (port);
  32.         
  33.         pixels = (Uint32*) GetPixBaseAddr ( pixMap );
  34.         rowPixels = GetPixRowBytes ( pixMap ) / 4;
  35.         
  36.         if (! noTitleBar) {
  37.         
  38.             /* offset for title bar */
  39.             pixels += rowPixels * 22;
  40.         }
  41.             
  42.         for (i = 0; i < height; i++)
  43.             for (j = 0; j < width; j++) {
  44.         
  45.                 pixels[ (i * rowPixels) + j ] |= 0xFF000000;
  46.             }
  47.             
  48.         UnlockPortBits (port);
  49.     }
  50. }
  51. @implementation SDL_QuartzWindow
  52. /* override these methods to fix the miniaturize animation/dock icon bug */
  53. - (void)miniaturize:(id)sender
  54. {
  55.     
  56.     if (SDL_VideoSurface->flags & SDL_OPENGL) {
  57.     
  58.         /* Grab framebuffer and put into NSImage */
  59.         /* [ qz_window setMiniwindowImage:image ]; */
  60.     }
  61.     else {
  62.         
  63.         QZ_SetPortAlphaOpaque ([ [ self contentView ] qdPort ], 
  64.                                [ self styleMask ] & NSBorderlessWindowMask);
  65.     }
  66.     
  67.     [ super miniaturize:sender ];
  68. }
  69. /* this routine fires *after* deminiaturizing, so it might be useless to us */
  70. - (void)deminiaturize:(id)sender
  71. {
  72.    [ super deminiaturize:sender ];
  73. }
  74. - (void)display
  75. {
  76.     /* Do nothing to keep pinstripe pattern from drawing */
  77. }
  78. @end
  79. /* Delegate for our NSWindow to send SDLQuit() on close */
  80. @interface SDL_QuartzWindowDelegate : NSObject
  81. {}
  82. - (BOOL)windowShouldClose:(id)sender;
  83. @end
  84. @implementation SDL_QuartzWindowDelegate
  85. - (BOOL)windowShouldClose:(id)sender {
  86.     SDL_PrivateQuit();
  87.     return NO;
  88. }
  89. @end
  90. /* empty class; probably could be used to fix bugs in the future */
  91. @interface SDL_QuartzWindowView : NSQuickDrawView
  92. {}
  93. @end
  94. @implementation SDL_QuartzWindowView
  95. @end