/// <summary> /// Completes the existing composition by optionally inserting the specified /// |text| into the composition node. |replacementRange| is an optional range /// of the existing text that will be replaced. |relativeCursorPos| is where /// the cursor will be positioned relative to the current cursor position. See /// comments on ImeSetComposition for usage. The |replacementRange| and /// |relativeCursorPos| values are only used on OS X. This function is only /// used when window rendering is disabled. /// </summary> /// <remarks> /// See also the original CEF documentation in /// <see href="https://bitbucket.org/chromiumfx/chromiumfx/src/tip/cef/include/capi/cef_browser_capi.h">cef/include/capi/cef_browser_capi.h</see>. /// </remarks> public void ImeCommitText(string text, CfxRange replacementRange, int relativeCursorPos) { var text_pinned = new PinnedString(text); CfxApi.BrowserHost.cfx_browser_host_ime_commit_text(NativePtr, text_pinned.Obj.PinnedPtr, text_pinned.Length, CfxRange.Unwrap(replacementRange), relativeCursorPos); text_pinned.Obj.Free(); }
/// <summary> /// Begins a new composition or updates the existing composition. Blink has a /// special node (a composition node) that allows the input function to change /// text without affecting other DOM nodes. |text| is the optional text that /// will be inserted into the composition node. |underlines| is an optional set /// of ranges that will be underlined in the resulting text. /// |replacementRange| is an optional range of the existing text that will be /// replaced. |selectionRange| is an optional range of the resulting text that /// will be selected after insertion or replacement. The |replacementRange| /// value is only used on OS X. /// /// This function may be called multiple times as the composition changes. When /// the client is done making changes the composition should either be canceled /// or completed. To cancel the composition call ImeCancelComposition. To /// complete the composition call either ImeCommitText or /// ImeFinishComposingText. Completion is usually signaled when: /// A. The client receives a WM_IME_COMPOSITION message with a GCS_RESULTSTR /// flag (on Windows), or; /// B. The client receives a "commit" signal of GtkIMContext (on Linux), or; /// C. insertText of NSTextInput is called (on Mac). /// /// This function is only used when window rendering is disabled. /// </summary> /// <remarks> /// See also the original CEF documentation in /// <see href="https://bitbucket.org/chromiumfx/chromiumfx/src/tip/cef/include/capi/cef_browser_capi.h">cef/include/capi/cef_browser_capi.h</see>. /// </remarks> public void ImeSetComposition(string text, CfxCompositionUnderline[] underlines, CfxRange replacementRange, CfxRange selectionRange) { var text_pinned = new PinnedString(text); UIntPtr underlines_length; IntPtr[] underlines_ptrs; if (underlines != null) { underlines_length = (UIntPtr)underlines.Length; underlines_ptrs = new IntPtr[underlines.Length]; for (int i = 0; i < underlines.Length; ++i) { underlines_ptrs[i] = CfxCompositionUnderline.Unwrap(underlines[i]); } } else { underlines_length = UIntPtr.Zero; underlines_ptrs = null; } PinnedObject underlines_pinned = new PinnedObject(underlines_ptrs); int underlines_nomem; CfxApi.BrowserHost.cfx_browser_host_ime_set_composition(NativePtr, text_pinned.Obj.PinnedPtr, text_pinned.Length, underlines_length, underlines_pinned.PinnedPtr, out underlines_nomem, CfxRange.Unwrap(replacementRange), CfxRange.Unwrap(selectionRange)); text_pinned.Obj.Free(); underlines_pinned.Free(); if (underlines_nomem != 0) { throw new OutOfMemoryException(); } }