フォントパネル

ここでは、フォントパネルの使い方をメモしていく。Cocoa アプリケーションでよく見るこれ。

ここでは、スクリプトでフォントパネルを出してるけど、First Responder の orderFrontFontPanel とメニューの Show Fonts を結びつけるだけで、フォントパネルが出せる。

でも、せっかくなのでスクリプトでの方法も残しておく。

まず、showFontPanel というメソッドを作り、それを ib_action で指定して、Interface Builder で作っているアプリケーションのメインメニューのメニューバーにある Format の Font の Received Action にする。

def showFontPanel(sender)

end

ib_action :showFontPanel

これに、次の3行を加えると、アプリケーションのメニューからフォントを選ぶと、フォントパネルが表示されるようになる。

fontPanel = NSFontPanel.sharedFontPanel

fontManager = NSFontManager.sharedFontManager

fontManager.orderFrontFontPanel(fontPanel)

まあ、強引に、

NSFontManager.sharedFontManager.orderFrontFontPanel(NSFontPanel.sharedFontPanel)

と一行でも書けるけど。

つぎに、フォントパネルを表示させたら、そこで選んだフォントの情報を得る必要がある。

これには、まず、Window のタイトルバーを右クリックするか、Window のアイコンを右クリックして、出てくるリストから delegate を選んで、それを App Controller に結びつける。ちなみに、ib_outlet で window と Window は結びつけておく。

そしたら、スクリプトに、changeFont(sender) というメソッドを追加する。

def changeFont(sender)

end

まずは、選ばれたフォントを入れるオブジェクトを作るんだけど、今現在選ばれているフォントかダミーのフォントから (NSFontManager).convertFont(font) で作る。sender には NSFontManager のオブジェクトが入ってるので、それを使う。font は NSFont で指定する。この例では、Times の 12 ポイントでダミーのオブジェクトを作ってる。

selectedFont = sender.convertFont(NSFont.fontWithName_size("Times",12.00))

これから、familyNamedisplayNamefontNamepointSize で、それぞれの情報を取り出す。例えば、

selectedFontName = selectedFont.fontName

Arial 12 point を選んだときは、次のように返ってくる。

#<NSCFString "Arial">

#<NSCFString "Arial">

#<NSCFString "ArialMT">

12.0

to_s で Ruby オブジェクトにすると、返ってくる値は次のようになる。

"Arial"

"Arial"

"ArialMT"

12.0

これらをまとめると、次のような感じ。

def showFontPanel(sender)

fontPanel = NSFontPanel.sharedFontPanel

fontPanel = NSFontPanel.sharedFontPanel

fontManager = NSFontManage.sharedFontManager

fontManager.orderFrontFontPanel(fontPanel)

end

ib_action :showFontPanel

def changeFont(sender)

selectedFont = sender.convertFont(NSfontWithName_size("Times",12))

selectedFontFamilyName = selectedFont.familyName

selectedFontDisplayName = selectedFont.displayName

selectedFontName = selectedFont.fontName

selectedFontSize = selectedFont.pointSize

end