はい。
Windowsだけで3つ目のIME APIです。
Windows.UI.Text.Core
Universal Windows Platform(UWP)でIMEを扱う場合のAPIです。
C++もどきでも使えるのですが、C#を使わない理由がないのでC#で使ってます。
(Visual Studio上でC++との連携がわりと楽にできるので困らない)
TSFに比べ使いやすくなっていますが、できることが減っています。
主に縦書きが指定できなくなっているのが……。
実装
非常にわかりやすいので、Visual Studioの補完機能に従っていけばほとんどの実装が完了します。
内部には最低限、テキストと選択範囲を保持します。
テキストや選択範囲を適宜変更して、ディスプレイ上のテキストのレイアウト情報を把握できればOKです。
-
CoreTextServicesManager.GetForCurrentView()
でCoreTextServicesManager
のインスタンスを取得する- 必要なら
InputLanguageChanged
に登録する
- 必要なら
-
textServicesManager.CreateEditContext()
でCoreTextEditContext
のインスタンスを作成する- イベントに登録してIMEからの要求に応える
- テキストの取得・変更
- 選択範囲の取得・変更
- レイアウトの取得
- 未確定文字列の開始・終了
- 未確定文字列の装飾情報
- メソッドを呼んでアプリケーション側での変更を伝える
- フォーカス情報
- テキストの変更
- 選択範囲の変更
- レイアウトの変更
- イベントに登録してIMEからの要求に応える
おわりに
特筆することがない。
縦書きに対応されてないとはこういうことですね。
Windows.UI.Text.CoreはUWP版のTATEditorを作るときに使います。
(IME APIの挙動とオンメモリビットマップの描画までは確認済み)
明日はmacOSの闇のIME APIについてです。