2016-04-04 45 views
0

Saydam bir arka plan bulanıklaştırmak için belgesiz CGSSetWindowBackgroundBlurRadius yöntemini kullanan alt sınıf bir NSWindow'um var.Başlık Bar Saydamlığı Bulanıklığı Giderir

Bu iyi çalışıyor ancak başlık çubuğunu da bulanıklaştırmak istiyorum. Bunu yapmak için varolan stile bir NSFullSizeContentViewWindowMask maskesi koyabilirsiniz. Bu, başlık çubuğunu şeffaf bir görünüme başarıyla dönüştürür, ancak bulanıklık efekti kaybolur! Bununla ilgili nasıl bir fikrim var?

#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 

cevap

0

Apple'la temasa geçtim ve görünüşe göre bunun yapılması mümkün değil.