⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdl_quartzwindow.m

📁 网络MPEG4IP流媒体开发源代码
💻 M
字号:
/*    This function makes the *SDL region* of the window 100% opaque.     The genie effect uses the alpha component. Otherwise,    it doesn't seem to matter what value it has.*/static void QZ_SetPortAlphaOpaque () {        SDL_Surface *surface = current_video->screen;    int bpp;        bpp = surface->format->BitsPerPixel;        if (bpp == 32) {            Uint32    *pixels = (Uint32*) surface->pixels;        Uint32    rowPixels = surface->pitch / 4;        Uint32    i, j;                for (i = 0; i < surface->h; i++)            for (j = 0; j < surface->w; j++) {                        pixels[ (i * rowPixels) + j ] |= 0xFF000000;            }    }}/* Subclass of NSWindow to fix genie effect and support resize events  */@interface SDL_QuartzWindow : NSWindow{}- (void)miniaturize:(id)sender;- (void)display;- (void)setFrame:(NSRect)frameRect display:(BOOL)flag;@end@implementation SDL_QuartzWindow/* we override these methods to fix the miniaturize animation/dock icon bug */- (void)miniaturize:(id)sender{    if (SDL_VideoSurface->flags & SDL_OPENGL) {            /*             Future: Grab framebuffer and put into NSImage            [ qz_window setMiniwindowImage:image ];        */    }    else {                /* make the alpha channel opaque so anim won't have holes in it */        QZ_SetPortAlphaOpaque ();    }        [ super miniaturize:sender ];}- (void)display{        /*         This method fires just before the window deminaturizes.        So, it's just the right place to fixup the alpha channel - which        makes the deminiaturize animation look right.    */    if ( (SDL_VideoSurface->flags & SDL_OPENGL) == 0)        QZ_SetPortAlphaOpaque ();}- (void)setFrame:(NSRect)frameRect display:(BOOL)flag{    /*        If the video surface is NULL, this originated from QZ_SetVideoMode,        so don't send the resize event.     */    if (SDL_VideoSurface == NULL) {        [ super setFrame:frameRect display:flag ];    }    else {        SDL_VideoDevice *this = (SDL_VideoDevice*)current_video;                NSRect sdlRect = [ NSWindow contentRectForFrameRect:frameRect styleMask:[self styleMask] ];        [ super setFrame:frameRect display:flag ];        SDL_PrivateResize (sdlRect.size.width, sdlRect.size.height);        /* If not OpenGL, we have to update the pixels and pitch */        if ( ! this->screen->flags & SDL_OPENGL ) {                        LockPortBits ( [ window_view qdPort ] );                        SDL_VideoSurface->pixels = GetPixBaseAddr ( GetPortPixMap ( [ window_view qdPort ] ) );            SDL_VideoSurface->pitch  = GetPixRowBytes ( GetPortPixMap ( [ window_view qdPort ] ) );                        SDL_VideoSurface->pixels += ((int)[ self frame ].size.height - (int)sdlRect.size.height) * SDL_VideoSurface->pitch;                UnlockPortBits ( [ window_view qdPort ] );        }    }}@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/* Subclass of NSQuickDrawView for the window's subview */@interface SDL_QuartzWindowView : NSQuickDrawView{}@end@implementation SDL_QuartzWindowView@end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -