mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			116 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // 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_
 |