summaryrefslogtreecommitdiff
path: root/tests/cefclient/browser/osr_ime_handler_win.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cefclient/browser/osr_ime_handler_win.h')
-rw-r--r--tests/cefclient/browser/osr_ime_handler_win.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/tests/cefclient/browser/osr_ime_handler_win.h b/tests/cefclient/browser/osr_ime_handler_win.h
new file mode 100644
index 00000000..87589850
--- /dev/null
+++ b/tests/cefclient/browser/osr_ime_handler_win.h
@@ -0,0 +1,115 @@
+// Copyright 2016 The Chromium Embedded Framework Authors. Portions copyright
+// 2013 The Chromium Authors. All rights reserved. Use of this source code is
+// governed by a BSD-style license that can be found in the LICENSE file.
+
+#ifndef CEF_TESTS_CEFCLIENT_BROWSER_OSR_IME_HANDLER_WIN_H_
+#define CEF_TESTS_CEFCLIENT_BROWSER_OSR_IME_HANDLER_WIN_H_
+#pragma once
+
+#include <windows.h>
+#include <vector>
+
+#include "include/internal/cef_types_wrappers.h"
+
+namespace client {
+
+// Handles IME for the native parent window that hosts an off-screen browser.
+// This object is only accessed on the CEF UI thread.
+class OsrImeHandlerWin {
+ public:
+ explicit OsrImeHandlerWin(HWND hwnd);
+ virtual ~OsrImeHandlerWin();
+
+ // Retrieves whether or not there is an ongoing composition.
+ bool is_composing() const { return is_composing_; }
+
+ // Retrieves the input language from Windows and update it.
+ void SetInputLanguage();
+
+ // Creates the IME caret windows if required.
+ void CreateImeWindow();
+
+ // Destroys the IME caret windows.
+ void DestroyImeWindow();
+
+ // Cleans up the all resources attached to the given IMM32Manager object, and
+ // reset its composition status.
+ void CleanupComposition();
+
+ // Resets the composition status and cancels the ongoing composition.
+ void ResetComposition();
+
+ // Retrieves a composition result of the ongoing composition if it exists.
+ bool GetResult(LPARAM lparam, CefString& result);
+
+ // Retrieves the current composition status of the ongoing composition.
+ // Includes composition text, underline information and selection range in the
+ // composition text. IMM32 does not support char selection.
+ bool GetComposition(LPARAM lparam,
+ CefString& composition_text,
+ std::vector<CefCompositionUnderline>& underlines,
+ int& composition_start);
+
+ // Enables the IME attached to the given window.
+ virtual void EnableIME();
+
+ // Disables the IME attached to the given window.
+ virtual void DisableIME();
+
+ // Cancels an ongoing composition of the IME.
+ virtual void CancelIME();
+
+ // Updates the IME caret position of the given window.
+ void UpdateCaretPosition(int index);
+
+ // Updates the composition range. |selected_range| is the range of characters
+ // that have been selected. |character_bounds| is the bounds of each character
+ // in view device coordinates.
+ void ChangeCompositionRange(const CefRange& selection_range,
+ const std::vector<CefRect>& character_bounds);
+
+ // Updates the position of the IME windows.
+ void MoveImeWindow();
+
+ private:
+ // Retrieves the composition information.
+ void GetCompositionInfo(HIMC imm_context,
+ LPARAM lparam,
+ CefString& composition_text,
+ std::vector<CefCompositionUnderline>& underlines,
+ int& composition_start);
+
+ // Retrieves a string from the IMM.
+ bool GetString(HIMC imm_context, WPARAM lparam, int type, CefString& result);
+
+ // Represents whether or not there is an ongoing composition.
+ bool is_composing_;
+
+ // The current composition character range and its bounds.
+ std::vector<CefRect> composition_bounds_;
+
+ // The current input Language ID retrieved from Windows -
+ // used for processing language-specific operations in IME.
+ LANGID input_language_id_;
+
+ // Represents whether or not the current input context has created a system
+ // caret to set the position of its IME candidate window.
+ bool system_caret_;
+
+ // The rectangle of the input caret retrieved from a renderer process.
+ CefRect ime_rect_;
+
+ // The current cursor index in composition string.
+ int cursor_index_;
+
+ // The composition range in the string. This may be used to determine the
+ // offset in composition bounds.
+ CefRange composition_range_;
+
+ // Hwnd associated with this instance.
+ HWND hwnd_;
+};
+
+} // namespace client
+
+#endif // CEF_TESTS_CEFCLIENT_BROWSER_OSR_IME_HANDLER_WIN_H_