HMDT - Logic and Intuition -

about HMDT

Cocoa Programming Tips 1001

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

back to top content

Copyright © 2002-2006 HMDT. All rights reserved.