2016-04-04 5 views
0

У меня есть подкласса NSWindow, который использует недокументированный метод CGSSetWindowBackgroundBlurRadius, чтобы размыть прозрачный фон.Заголовок Бар Прозрачность Удаляет размытие

Это прекрасно работает, но я также хочу размыть заголовок. Для этого я могу или маску NSFullSizeContentViewWindowMask использовать существующий стиль. Это успешно изменяет строку заголовка на прозрачный вид, но эффект размытия теряется! Любые идеи о том, как я могу это сделать?

#import "TransparentNSWindow.h" 

@implementation TransparentNSWindow 

typedef void * CGSConnection; 
extern OSStatus CGSSetWindowBackgroundBlurRadius(CGSConnection connection, NSInteger windowNumber, int radius); 
extern CGSConnection CGSDefaultConnectionForThread(); 

- (void)enableBlurForWindow:(NSWindow *)window 
{ 
    [window setOpaque:NO]; 
    window.backgroundColor = [NSColor colorWithCalibratedRed:255./255. green:255./255. blue:255./255. alpha:0.4]; 

    CGSConnection connection = CGSDefaultConnectionForThread(); 
    CGSSetWindowBackgroundBlurRadius(connection, [window windowNumber], 20); 
} 



- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag { 
    NSUInteger currentStyle = [self styleMask]; 
    NSUInteger style = NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask; 

    self = [super initWithContentRect:contentRect styleMask :style backing :NSBackingStoreBuffered defer:NO ]; 
    if (self) 
    { 
     [self setOpaque:NO]; 
     [self setHasShadow:NO]; 

     self.titlebarAppearsTransparent = true; 
     self.titleVisibility = true; 

     // Uncommenting this line results in a transparent title bar but no blur 
     //self.styleMask |= NSFullSizeContentViewWindowMask; 

     [self enableBlurForWindow:self]; 
    } 
    return self; 
} 

@end 

ответ

0

Получил связь с Apple и, видимо, нет способа сделать это.

Смежные вопросы