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

📄 misc.m

📁 VLC Player Source Code
💻 M
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** * misc.m: code not specific to vlc ***************************************************************************** * Copyright (C) 2003-2008 the VideoLAN team * $Id$ * * Authors: Jon Lech Johansen <jon-vl@nanocrew.net> *          Felix Paul Kühne <fkuehne at videolan dot org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/#import <Cocoa/Cocoa.h>#import <QuickTime/QuickTime.h>#import "intf.h"                                          /* VLCApplication */#import "misc.h"#import "playlist.h"#import "controls.h"/***************************************************************************** * NSImage (VLCAdditions) * *  Addition to NSImage *****************************************************************************/@implementation NSImage (VLCAdditions)+ (id)imageWithSystemName:(int)name{    /* ugly Carbon stuff following...     * regrettably, you can't get the icons through clean Cocoa */    /* retrieve our error icon */    NSImage * icon;    IconRef ourIconRef;    int returnValue;    returnValue = GetIconRef(kOnSystemDisk, 'macs', name, &ourIconRef);    icon = [[[NSImage alloc] initWithSize:NSMakeSize(32,32)] autorelease];    [icon lockFocus];    CGRect rect = CGRectMake(0,0,32,32);    PlotIconRefInContext((CGContextRef)[[NSGraphicsContext currentContext]        graphicsPort],        &rect,        kAlignNone,        kTransformNone,        NULL /*inLabelColor*/,        kPlotIconRefNormalFlags,        (IconRef)ourIconRef);    [icon unlockFocus];    returnValue = ReleaseIconRef(ourIconRef);    return icon;}+ (id)imageWithWarningIcon{    static NSImage * imageWithWarningIcon = nil;    if( !imageWithWarningIcon )    {        imageWithWarningIcon = [[[self class] imageWithSystemName:'caut'] retain];    }    return imageWithWarningIcon;}+ (id)imageWithErrorIcon{    static NSImage * imageWithErrorIcon = nil;    if( !imageWithErrorIcon )    {        imageWithErrorIcon = [[[self class] imageWithSystemName:'stop'] retain];    }    return imageWithErrorIcon;}@end/***************************************************************************** * NSAnimation (VLCAdditions) * *  Missing extension to NSAnimation *****************************************************************************/@implementation NSAnimation (VLCAdditions)/* fake class attributes  */static NSMapTable *VLCAdditions_userInfo = NULL;+ (void)load{    /* init our fake object attribute */    VLCAdditions_userInfo = NSCreateMapTable(NSNonRetainedObjectMapKeyCallBacks, NSObjectMapValueCallBacks, 16);}- (void)dealloc{    NSMapRemove(VLCAdditions_userInfo, self);    [super dealloc];}- (void)setUserInfo: (void *)userInfo{    NSMapInsert(VLCAdditions_userInfo, self, (void*)userInfo);}- (void *)userInfo{    return NSMapGet(VLCAdditions_userInfo, self);}@end/***************************************************************************** * NSScreen (VLCAdditions) * *  Missing extension to NSScreen *****************************************************************************/@implementation NSScreen (VLCAdditions)static NSMutableArray *blackoutWindows = NULL;+ (void)load{    /* init our fake object attribute */    blackoutWindows = [[NSMutableArray alloc] initWithCapacity:1];}+ (NSScreen *)screenWithDisplayID: (CGDirectDisplayID)displayID{    int i;     for( i = 0; i < [[NSScreen screens] count]; i++ )    {        NSScreen *screen = [[NSScreen screens] objectAtIndex: i];        if([screen displayID] == displayID)            return screen;    }    return nil;}- (BOOL)isMainScreen{    return ([self displayID] == [[[NSScreen screens] objectAtIndex:0] displayID]);}- (BOOL)isScreen: (NSScreen*)screen{    return ([self displayID] == [screen displayID]);}- (CGDirectDisplayID)displayID{    return (CGDirectDisplayID)_screenNumber;}- (void)blackoutOtherScreens{    unsigned int i;    /* Free our previous blackout window (follow blackoutWindow alloc strategy) */    [blackoutWindows makeObjectsPerformSelector:@selector(close)];    [blackoutWindows removeAllObjects];    for(i = 0; i < [[NSScreen screens] count]; i++)    {        NSScreen *screen = [[NSScreen screens] objectAtIndex: i];        VLCWindow *blackoutWindow;        NSRect screen_rect;         if([self isScreen: screen])            continue;        screen_rect = [screen frame];        screen_rect.origin.x = screen_rect.origin.y = 0;        /* blackoutWindow alloc strategy            - The NSMutableArray blackoutWindows has the blackoutWindow references            - blackoutOtherDisplays is responsible for alloc/releasing its Windows        */        blackoutWindow = [[VLCWindow alloc] initWithContentRect: screen_rect styleMask: NSBorderlessWindowMask                backing: NSBackingStoreBuffered defer: NO screen: screen];        [blackoutWindow setBackgroundColor:[NSColor blackColor]];        [blackoutWindow setLevel: NSFloatingWindowLevel]; /* Disappear when Expose is triggered */         [blackoutWindow displayIfNeeded];        [blackoutWindow orderFront: self animate: YES];        [blackoutWindows addObject: blackoutWindow];        [blackoutWindow release];                if( [screen isMainScreen ] )           SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);    }}+ (void)unblackoutScreens{    unsigned int i;    for(i = 0; i < [blackoutWindows count]; i++)    {        VLCWindow *blackoutWindow = [blackoutWindows objectAtIndex: i];        [blackoutWindow closeAndAnimate: YES];    }       SetSystemUIMode( kUIModeNormal, 0);}@end/***************************************************************************** * VLCWindow * *  Missing extension to NSWindow *****************************************************************************/@implementation VLCWindow- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask    backing:(NSBackingStoreType)backingType defer:(BOOL)flag{    self = [super initWithContentRect:contentRect styleMask:styleMask backing:backingType defer:flag];    if( self )        b_isset_canBecomeKeyWindow = NO;    return self;}- (void)setCanBecomeKeyWindow: (BOOL)canBecomeKey{    b_isset_canBecomeKeyWindow = YES;    b_canBecomeKeyWindow = canBecomeKey;}- (BOOL)canBecomeKeyWindow{    if(b_isset_canBecomeKeyWindow)        return b_canBecomeKeyWindow;    return [super canBecomeKeyWindow];}- (void)closeAndAnimate: (BOOL)animate{    NSInvocation *invoc;     if (!animate || MACOS_VERSION < 10.4f)    {        [super close];        return;    }    invoc = [NSInvocation invocationWithMethodSignature:[super methodSignatureForSelector:@selector(close)]];    [invoc setTarget: (id)super];    if (![self isVisible] || [self alphaValue] == 0.0)    {        [super close];        return;    }    [self orderOut: self animate: YES callback: invoc];}- (void)orderOut: (id)sender animate: (BOOL)animate{    NSInvocation *invoc = [NSInvocation invocationWithMethodSignature:[super methodSignatureForSelector:@selector(orderOut:)]];    [invoc setTarget: (id)super];    [invoc setArgument: sender atIndex: 0];    [self orderOut: sender animate: animate callback: invoc];}- (void)orderOut: (id)sender animate: (BOOL)animate callback:(NSInvocation *)callback{    NSViewAnimation *anim;    NSViewAnimation *current_anim;    NSMutableDictionary *dict;    if (!animate || MACOS_VERSION < 10.4f)    {        [self orderOut: sender];        return;    }    dict = [[NSMutableDictionary alloc] initWithCapacity:2];    [dict setObject:self forKey:NSViewAnimationTargetKey];    [dict setObject:NSViewAnimationFadeOutEffect forKey:NSViewAnimationEffectKey];    anim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:dict, nil]];    [dict release];    [anim setAnimationBlockingMode:NSAnimationNonblocking];    [anim setDuration:0.9];    [anim setFrameRate:30];    [anim setUserInfo: callback];    @synchronized(self) {        current_anim = self->animation;        if ([[[current_anim viewAnimations] objectAtIndex:0] objectForKey: NSViewAnimationEffectKey] == NSViewAnimationFadeOutEffect && [current_anim isAnimating])        {            [anim release];        }        else        {            if (current_anim)            {                [current_anim stopAnimation];                [anim setCurrentProgress:1.0-[current_anim currentProgress]];                [current_anim release];            }            else                [anim setCurrentProgress:1.0 - [self alphaValue]];            self->animation = anim;            [self setDelegate: self];            [anim startAnimation];        }    }}- (void)orderFront: (id)sender animate: (BOOL)animate{    NSViewAnimation *anim;    NSViewAnimation *current_anim;    NSMutableDictionary *dict;     if (!animate || MACOS_VERSION < 10.4f)    {        [super orderFront: sender];        [self setAlphaValue: 1.0];        return;    }    if (![self isVisible])    {        [self setAlphaValue: 0.0];        [super orderFront: sender];    }    else if ([self alphaValue] == 1.0)    {        [super orderFront: self];        return;    }    dict = [[NSMutableDictionary alloc] initWithCapacity:2];    [dict setObject:self forKey:NSViewAnimationTargetKey];     [dict setObject:NSViewAnimationFadeInEffect forKey:NSViewAnimationEffectKey];    anim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:dict, nil]];    [dict release];     [anim setAnimationBlockingMode:NSAnimationNonblocking];    [anim setDuration:0.5];    [anim setFrameRate:30];    @synchronized(self) {        current_anim = self->animation;        if ([[[current_anim viewAnimations] objectAtIndex:0] objectForKey: NSViewAnimationEffectKey] == NSViewAnimationFadeInEffect && [current_anim isAnimating])        {            [anim release];        }        else        {            if (current_anim)            {                [current_anim stopAnimation];                [anim setCurrentProgress:1.0 - [current_anim currentProgress]];                [current_anim release];            }            else                [anim setCurrentProgress:[self alphaValue]];            self->animation = anim;

⌨️ 快捷键说明

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