|
- Application Kit-
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: には、古いフォントを指定してやる必要があるんだ。ここでは、いちいちダミーを作ってやっている。本来ならば、前に取得したフォントを保持しておいて、それを指定してやればいいんだ。
|