アプリの NSWindow の境界線の色を変更する必要があります。
ウィンドウの境界線がどこに描画されるかを知っている人はいますか?色を変更したり、境界線を描画する方法をオーバーライドしたりするにはどうすればよいですか?
Tweetbot がこれを行うことに気付きました:
アプリの NSWindow の境界線の色を変更する必要があります。
ウィンドウの境界線がどこに描画されるかを知っている人はいますか?色を変更したり、境界線を描画する方法をオーバーライドしたりするにはどうすればよいですか?
Tweetbot がこれを行うことに気付きました:
記憶から、Tweetbot は完全なボーダレス ウィンドウを使用し、ウィンドウ コントロール自体を追加したと思いますが、AppKit でこれらの詳細を引き続き処理したい場合は、別の方法があります。ウィンドウをテクスチャ ウィンドウに設定すると、カスタム背景 NSColor を設定できます。この NSColor は、次を使用して画像にすることができます+[NSColor colorWithPatternImage:]
塗りつぶしとして単色の灰色を使用するだけで、例としてこれをすばやくノックアップしましたが、この画像には好きなように描くことができます. あとは、NSWindow のクラス タイプをテクスチャ ウィンドウ クラスに設定するだけです。
SLFTexturedWindow.h
@interface SLFTexturedWindow : NSWindow
@end
SLFTexturedWindow.m
#import "SLFTexturedWindow.h"
@implementation SLFTexturedWindow
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)styleMask
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)flag;
{
NSUInteger newStyle;
if (styleMask & NSTexturedBackgroundWindowMask) {
newStyle = styleMask;
} else {
newStyle = (NSTexturedBackgroundWindowMask | styleMask);
}
if (self = [super initWithContentRect:contentRect styleMask:newStyle backing:bufferingType defer:flag]) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(windowDidResize:)
name:NSWindowDidResizeNotification
object:self];
[self setBackgroundColor:[self addBorderToBackground]];
return self;
}
return nil;
}
- (void)windowDidResize:(NSNotification *)aNotification
{
[self setBackgroundColor:[self addBorderToBackground]];
}
- (NSColor *)addBorderToBackground
{
NSImage *bg = [[NSImage alloc] initWithSize:[self frame].size];
// Begin drawing into our main image
[bg lockFocus];
[[NSColor lightGrayColor] set];
NSRectFill(NSMakeRect(0, 0, [bg size].width, [bg size].height));
[[NSColor blackColor] set];
NSRect bounds = NSMakeRect(0, 0, [self frame].size.width, [self frame].size.height);
NSBezierPath *border = [NSBezierPath bezierPathWithRoundedRect:bounds xRadius:3 yRadius:3];
[border stroke];
[bg unlockFocus];
return [NSColor colorWithPatternImage:bg];
}
@end