Mercurial > sdl-ios-xcode
view src/video/quartz/SDL_QuartzWindow.m @ 272:d1447a846d80
Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
From: Darrell Walisser <dwaliss1@purdue.edu>
Subject: SDL Quartz video update
-better mouse motion events
-fixed minification bugs (except OpenGL)
-fixed QZ_SetGamma for correct semantics
-fade/unfade display before/after rez switch
-experimental obscured-check/blind-copy code
The obscured code, while it speeds up window drawing substantially, isn't
ready yet. The reason is that there doesn't (yet) seem to be a way to know
when the window is dragged or when the window suddenly comes to the
foreground. Since Carbon windows seem to allow detection of such things, I
suspect it is possible through some window server API. Cocoa(NSWindow) has no
functions for such things, AFAIK.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 22 Jan 2002 18:46:28 +0000 |
parents | bd6b0a910a65 |
children | 74262d2647ca |
line wrap: on
line source
/* Subclass of NSWindow to allow customization if we need it */ @interface SDL_QuartzWindow : NSWindow {} - (void)miniaturize:(id)sender; - (void)deminiaturize:(id)sender; - (void)display; @end /** * Function to set the opacity of window's pixels to 100% * The opacity is only used by the window server code that does the minimize effect **/ static void QZ_SetPortAlphaOpaque (CGrafPtr port, Uint32 noTitleBar) { Uint32 *pixels; Uint32 rowPixels; Uint32 width, height; Uint32 bpp; PixMapHandle pixMap; Rect bounds; int i, j; pixMap = GetPortPixMap ( port ); bpp = GetPixDepth ( pixMap ); if (bpp == 32) { GetPortBounds ( port, &bounds ); width = bounds.right - bounds.left; height = bounds.bottom - bounds.top; LockPortBits (port); pixels = (Uint32*) GetPixBaseAddr ( pixMap ); rowPixels = GetPixRowBytes ( pixMap ) / 4; if (! noTitleBar) { /* offset for title bar */ pixels += rowPixels * 22; } for (i = 0; i < height; i++) for (j = 0; j < width; j++) { pixels[ (i * rowPixels) + j ] |= 0xFF000000; } UnlockPortBits (port); } } @implementation SDL_QuartzWindow /* override these methods to fix the miniaturize animation/dock icon bug */ - (void)miniaturize:(id)sender { if (SDL_VideoSurface->flags & SDL_OPENGL) { /* Grab framebuffer and put into NSImage */ /* [ qz_window setMiniwindowImage:image ]; */ } else { QZ_SetPortAlphaOpaque ([ [ self contentView ] qdPort ], [ self styleMask ] & NSBorderlessWindowMask); } [ super miniaturize:sender ]; } /* this routine fires *after* deminiaturizing, so it might be useless to us */ - (void)deminiaturize:(id)sender { [ super deminiaturize:sender ]; } - (void)display { /* Do nothing to keep pinstripe pattern from drawing */ } @end /* Delegate for our NSWindow to send SDLQuit() on close */ @interface SDL_QuartzWindowDelegate : NSObject {} - (BOOL)windowShouldClose:(id)sender; @end @implementation SDL_QuartzWindowDelegate - (BOOL)windowShouldClose:(id)sender { SDL_PrivateQuit(); return NO; } @end /* empty class; probably could be used to fix bugs in the future */ @interface SDL_QuartzWindowView : NSQuickDrawView {} @end @implementation SDL_QuartzWindowView @end