フォントパネル
ここでは、フォントパネルの使い方をメモしていく。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))
これから、familyName、displayName、fontName、pointSize で、それぞれの情報を取り出す。例えば、
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