NSColor

NSColor

Application Kit - NSColor

システムカラーの設定を取得する

Keywords: System color, selectedControlColor, selectedTextColor

アプリケーションで強調枠を表示したり、テキスト選択のバックグラウンドには、ユーザがコントロールパネルで設定した色を使いたいよね。それらを得るには、NSColor のシステムカラー関係のメソッドを使う。ドキュメントにはたくさんの API がのっているけど、Aqua 環境で現在使えると書かれているのは、selectedControlColor と selectedTextColor の 2 つだけだ。他のやつは、プラチナ・アピアランスと互換を取るために残してあるらしい。

Application Kit/NSColor.h

+ (NSColor *)selectedControlColor;
+ (NSColor *)selectedTextColor;

実際に使ってみる。

SystemColor/SystemColorAppDelegate.m

- (void)awakeFromNib
{
 // システムカラーを取得する
 [_selectedControlColor
   setColor:[NSColor selectedControlColor]];
 [_selectedTextColor
   setColor:[NSColor selectedTextColor]];

 ...
}

このサンプルを実行したまま、“システム環境設定”の“一般”で、“強調表示色”を変えると、selectedControlColor が変わるのが分かるよ。だけど、selectedTextColor を変更する方法がわからない。どっかのコントロールパネルの奥に埋もれているのか?

■サンプルダウンロード:
SystemColor.tar


Application Kit - NSColor

システムカラーの変更を受け取る

Keywords: System color, NSSystemColorsDidChangeNotification

では、コントロールパネルでシステムカラーが変更されたことを検出するには?システムカラーが変更されると、NSSystemColorsDidChangeNotification が投げられるんだ。

Application Kit/NSColor.h

APPKIT_EXTERN NSString *NSSystemColorsDidChangeNotification;

これを NSNotificationCenter を使って受け取ればいい。

SystemColor/SystemColorAppDelegate.m

- (void)awakeFromNib
{
 ...

 // Set observer
 [[NSNotificationCenter defaultCenter]
        addObserver:self
        selector:@selector(systemColorsDidCanged:)
        name:NSSystemColorsDidChangeNotification
        object:nil];
}

これで、システムカラーが変更されたときに、systemColorsDidChanged: が呼び出されるんだ。

■サンプルダウンロード:
SystemColor.tar




Application Kit