NSFontManager

NSFontManager

Application Kit - NSFontManager

フォントメニューを動的に追加する

Keywords: fontMenu

アプリケーションにフォントメニューを追加してみよう!Interface Builder で設定してもいいけど、ここでは動的に追加してみる。まずフォントメニューを取得する。それには fontMenu を使う。

Application Kit/NSFontManger.h

- (NSMenu *)fontMenu:(BOOL)create;

次にアプリケーションのメインメニューを取得して、メニューを追加するんだ。

(sample)

- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
 NSMenu*  mainMenu;
 NSMenu* menu;
 NSMenuItem* menuItem;

 mainMenu = [NSApp mainMenu];
 menuItem = [[NSMenuItem alloc]
    initWithTitle:@"Font" action:nil keyEquivalent:@""];
 [menuItem setSubmenu:
    [[NSFontManager sharedFontManager] fontMenu:YES]];
 [mainMenu addItem:menuItem];
 [menuItem release];
}

こんなところかな。この例では一番最後に追加しているけど、もちろん、自分の好きなところに入れてもらって、問題ないぜ。




Application Kit - NSFontManager

フォントパネルを表示する

Keywords: fontPanel, orderFrontFontPanel

Cocoa では、標準でフォントパネルがついてくるんだ。そいつを表示させるにはいくつか方法がある。まず、fontPanel: メソッドを使う方法。

Application Kit/NSFontManger.h

- (NSFontPanel *)fontPanel:(BOOL)createFlag;

これを使えば、NSFontPanel のインスタンスが得られる。createFlag には、インスタンスを、必要なら、作りなおすかどうかを指定するんだ。

(sample)

- (void)showFontPanel
{
 NSFontPanel* fontPanel;
 fontPanel = [[NSFontManager sharedFontManger] fontPanel:YES];
 [fontPanel makeKeyAndOrderFront:self];
}

作った後は、makeKeyAndOrderFront: で、前に持ってくるんだ。

別の方法は、orderFrontFontPanel: を使う方法。

Application Kit/NSFontManger.h

- (void)orderFrontFontPanel:(id)sender;

これを使えば、上のサンプルで示したことを一発でやってくれる。また、フォントメニューを使ったときも、メニューのアクションとして、これが呼び出されるんだ。

(sample)

- (void)showFontPanel1
{
 NSFontPanel* fontPanel;
 fontPanel = [[NSFontManager sharedFontManger]
    orderFrontFontPanel:self];
}

どちらを使うかは、ケース・バイ・ケースで。




Application Kit - NSFontManager

フォントパネルからのフォント変更を受け取る

Keywords: fontMenu

フォントパネルを表示させたら、とうぜんフォントを変更するでしょ。そのイベントを受け取らなくてはいけない。どうするのかというと、フォントが変更されたとき、NSFontManager は changeFont: アクションを Responder Chain に投げるんだ。そいつを捕まえてやればいい。

(sample)

- (void)changeFont:(id)fontManager
{
 NSFont* oldFont = [NSFont fontWithName:@"Times" size:14];
 NSFont* newFont;
 newFont = [fontManager convertFont:oldFont];
}

changeFont: の引き数に指定される id は NSFontManager なんだ。そして、そいつの convertFont: を呼んでやると、変更されたフォントを取得することができる。convertFont: には、古いフォントを指定してやる必要があるんだ。ここでは、いちいちダミーを作ってやっている。本来ならば、前に取得したフォントを保持しておいて、それを指定してやればいいんだ。



Application Kit