2014-08-31 78 views
1

我想將日語(和其他語言)輸入支持添加到全屏OpenGL遊戲中,其中輸入框是自定義呈現窗口小部件,即不是NSView。是否有OSX API來自己繪製輸入法候選項?

我認爲採用NSTextInputClient可以讓我利用輸入法,但我不希望操作系統在我的遊戲中渲染它的OSX風格的輸入法UI,因爲這樣會破壞樣式的連續性。

是否有更低級別的API允許我隱藏缺省候選列表UI,以及b)在輸入方法上監聽事件並接收正在編寫的文本的候選列表,例如我可以使用周圍UI的風格在我的遊戲文本小部件上呈現候選列表?

回答

3

不是。 如果你不想使用Cocoa視圖來做這件事,那麼你需要大量的工作。你可能不知道這些事情有多複雜。 沒有任何直接的方法可以爲內置的系統輸入方法詢問其轉換例程。 蘋果希望你用他們設計的方式來使用它們。 您可能能夠隱藏視圖和可訪問性API,但這將是一場難以置信的艱苦戰鬥。 你只需花費精力就可以盡力找到最適合自己的方式,並繼續前進。 有趣的是,通常使用輸入法爲其語言的用戶實際上感覺很好,而且在家中這些輸入法的外觀一致。可能比任何人以他們不熟悉的方式定製這些東西更可能。 這些輸入法的許多方面,即使翻譯成英文,如果不真正理解使用它們的語言,就沒有多大意義。

Koteri - The Japanese input method on OS X

在Koteri的這個例子中,你可以看到相當多的東西,你可能無法應對。

可可文本系統是豐富,深刻和複雜的。一般來說,你應該採用它而不是試圖彎曲它。 (你會有更多的成功)

+1

我同意。一個輸入法可以自由地處理任何*它想要的按鍵和鼠標事件。沒有理由期望它僅限於顯示候選人名單等。因此,沒有理由期望有一些數據結構(例如候選字符串)可與用戶界面分離,輸入法呈現的方式使您可以在不同的用戶界面中呈現相同的數據,而不僅僅是您希望能夠用任意應用程序來做到這一點。因爲這是一種輸入方法:任意應用程序恰好通過不同的頻道接收事件。 – 2014-09-06 09:34:53

+0

這和可可輸入法API很大程度上依賴於可可文本系統的多級輸入和文本標記範圍的概念。 – uchuugaka 2014-09-06 10:27:55

+0

那麼,這個問題的部分是正確的。就Cocoa而言,實現'NSTextInputClient'的任何東西都是一個「文本視圖」,即使是與NSText或NSTextView無關的定製類也是如此。我以前做過。 – 2014-09-06 11:24:00