mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Standardize IME callbacks for off-screen rendering (issue #1675)
This commit is contained in:
116
tests/cefclient/browser/osr_ime_handler_win.h
Normal file
116
tests/cefclient/browser/osr_ime_handler_win.h
Normal file
@ -0,0 +1,116 @@
|
||||
// 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_;
|
||||
|
||||
// This value represents whether or not the current input context has IMEs.
|
||||
bool ime_status_;
|
||||
|
||||
// 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_
|
Reference in New Issue
Block a user