2014-08-31 65 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