Standardize IME callbacks for off-screen rendering (issue #1675)

This commit is contained in:
Marshall Greenblatt
2016-10-28 12:11:24 -04:00
parent e69de63b15
commit d6b17a8fb5
48 changed files with 1999 additions and 976 deletions

View File

@@ -781,46 +781,96 @@ void CEF_CALLBACK browser_host_set_windowless_frame_rate(
frame_rate);
}
cef_text_input_context_t CEF_CALLBACK browser_host_get_nstext_input_context(
void CEF_CALLBACK browser_host_ime_set_composition(
struct _cef_browser_host_t* self, const cef_string_t* text,
size_t underlinesCount, cef_composition_underline_t const* underlines,
const cef_range_t* replacement_range,
const cef_range_t* selection_range) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return;
// Verify param: replacement_range; type: simple_byref_const
DCHECK(replacement_range);
if (!replacement_range)
return;
// Verify param: selection_range; type: simple_byref_const
DCHECK(selection_range);
if (!selection_range)
return;
// Unverified params: text, underlines
// Translate param: underlines; type: simple_vec_byref_const
std::vector<CefCompositionUnderline > underlinesList;
if (underlinesCount > 0) {
for (size_t i = 0; i < underlinesCount; ++i) {
CefCompositionUnderline underlinesVal = underlines[i];
underlinesList.push_back(underlinesVal);
}
}
// Translate param: replacement_range; type: simple_byref_const
CefRange replacement_rangeVal = replacement_range?*replacement_range:CefRange(
);
// Translate param: selection_range; type: simple_byref_const
CefRange selection_rangeVal = selection_range?*selection_range:CefRange();
// Execute
CefBrowserHostCppToC::Get(self)->ImeSetComposition(
CefString(text),
underlinesList,
replacement_rangeVal,
selection_rangeVal);
}
void CEF_CALLBACK browser_host_ime_commit_text(struct _cef_browser_host_t* self,
const cef_string_t* text, const cef_range_t* replacement_range,
int relative_cursor_pos) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return;
// Verify param: replacement_range; type: simple_byref_const
DCHECK(replacement_range);
if (!replacement_range)
return;
// Unverified params: text
// Translate param: replacement_range; type: simple_byref_const
CefRange replacement_rangeVal = replacement_range?*replacement_range:CefRange(
);
// Execute
CefBrowserHostCppToC::Get(self)->ImeCommitText(
CefString(text),
replacement_rangeVal,
relative_cursor_pos);
}
void CEF_CALLBACK browser_host_ime_finish_composing_text(
struct _cef_browser_host_t* self, int keep_selection) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return;
// Execute
CefBrowserHostCppToC::Get(self)->ImeFinishComposingText(
keep_selection?true:false);
}
void CEF_CALLBACK browser_host_ime_cancel_composition(
struct _cef_browser_host_t* self) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return NULL;
// Execute
cef_text_input_context_t _retval = CefBrowserHostCppToC::Get(
self)->GetNSTextInputContext();
// Return type: simple
return _retval;
}
void CEF_CALLBACK browser_host_handle_key_event_before_text_input_client(
struct _cef_browser_host_t* self, cef_event_handle_t keyEvent) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return;
// Execute
CefBrowserHostCppToC::Get(self)->HandleKeyEventBeforeTextInputClient(
keyEvent);
}
void CEF_CALLBACK browser_host_handle_key_event_after_text_input_client(
struct _cef_browser_host_t* self, cef_event_handle_t keyEvent) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return;
// Execute
CefBrowserHostCppToC::Get(self)->HandleKeyEventAfterTextInputClient(
keyEvent);
CefBrowserHostCppToC::Get(self)->ImeCancelComposition();
}
void CEF_CALLBACK browser_host_drag_target_drag_enter(
@@ -1008,11 +1058,11 @@ CefBrowserHostCppToC::CefBrowserHostCppToC() {
browser_host_get_windowless_frame_rate;
GetStruct()->set_windowless_frame_rate =
browser_host_set_windowless_frame_rate;
GetStruct()->get_nstext_input_context = browser_host_get_nstext_input_context;
GetStruct()->handle_key_event_before_text_input_client =
browser_host_handle_key_event_before_text_input_client;
GetStruct()->handle_key_event_after_text_input_client =
browser_host_handle_key_event_after_text_input_client;
GetStruct()->ime_set_composition = browser_host_ime_set_composition;
GetStruct()->ime_commit_text = browser_host_ime_commit_text;
GetStruct()->ime_finish_composing_text =
browser_host_ime_finish_composing_text;
GetStruct()->ime_cancel_composition = browser_host_ime_cancel_composition;
GetStruct()->drag_target_drag_enter = browser_host_drag_target_drag_enter;
GetStruct()->drag_target_drag_over = browser_host_drag_target_drag_over;
GetStruct()->drag_target_drag_leave = browser_host_drag_target_drag_leave;

View File

@@ -350,6 +350,46 @@ void CEF_CALLBACK render_handler_on_scroll_offset_changed(
y);
}
void CEF_CALLBACK render_handler_on_ime_composition_range_changed(
struct _cef_render_handler_t* self, cef_browser_t* browser,
const cef_range_t* selected_range, size_t character_boundsCount,
cef_rect_t const* character_bounds) {
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return;
// Verify param: browser; type: refptr_diff
DCHECK(browser);
if (!browser)
return;
// Verify param: selected_range; type: simple_byref_const
DCHECK(selected_range);
if (!selected_range)
return;
// Verify param: character_bounds; type: simple_vec_byref_const
DCHECK(character_boundsCount == 0 || character_bounds);
if (character_boundsCount > 0 && !character_bounds)
return;
// Translate param: selected_range; type: simple_byref_const
CefRange selected_rangeVal = selected_range?*selected_range:CefRange();
// Translate param: character_bounds; type: simple_vec_byref_const
std::vector<CefRect > character_boundsList;
if (character_boundsCount > 0) {
for (size_t i = 0; i < character_boundsCount; ++i) {
CefRect character_boundsVal = character_bounds[i];
character_boundsList.push_back(character_boundsVal);
}
}
// Execute
CefRenderHandlerCppToC::Get(self)->OnImeCompositionRangeChanged(
CefBrowserCToCpp::Wrap(browser),
selected_rangeVal,
character_boundsList);
}
} // namespace
@@ -368,6 +408,8 @@ CefRenderHandlerCppToC::CefRenderHandlerCppToC() {
GetStruct()->update_drag_cursor = render_handler_update_drag_cursor;
GetStruct()->on_scroll_offset_changed =
render_handler_on_scroll_offset_changed;
GetStruct()->on_ime_composition_range_changed =
render_handler_on_ime_composition_range_changed;
}
template<> CefRefPtr<CefRenderHandler> CefCppToC<CefRenderHandlerCppToC,

View File

@@ -667,44 +667,81 @@ void CefBrowserHostCToCpp::SetWindowlessFrameRate(int frame_rate) {
frame_rate);
}
CefTextInputContext CefBrowserHostCToCpp::GetNSTextInputContext() {
void CefBrowserHostCToCpp::ImeSetComposition(const CefString& text,
const std::vector<CefCompositionUnderline>& underlines,
const CefRange& replacement_range, const CefRange& selection_range) {
cef_browser_host_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, get_nstext_input_context))
return NULL;
if (CEF_MEMBER_MISSING(_struct, ime_set_composition))
return;
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Execute
cef_text_input_context_t _retval = _struct->get_nstext_input_context(_struct);
// Unverified params: text, underlines
// Return type: simple
return _retval;
// Translate param: underlines; type: simple_vec_byref_const
const size_t underlinesCount = underlines.size();
cef_composition_underline_t* underlinesList = NULL;
if (underlinesCount > 0) {
underlinesList = new cef_composition_underline_t[underlinesCount];
DCHECK(underlinesList);
if (underlinesList) {
for (size_t i = 0; i < underlinesCount; ++i) {
underlinesList[i] = underlines[i];
}
}
}
// Execute
_struct->ime_set_composition(_struct,
text.GetStruct(),
underlinesCount,
underlinesList,
&replacement_range,
&selection_range);
// Restore param:underlines; type: simple_vec_byref_const
if (underlinesList)
delete [] underlinesList;
}
void CefBrowserHostCToCpp::HandleKeyEventBeforeTextInputClient(
CefEventHandle keyEvent) {
void CefBrowserHostCToCpp::ImeCommitText(const CefString& text,
const CefRange& replacement_range, int relative_cursor_pos) {
cef_browser_host_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, handle_key_event_before_text_input_client))
if (CEF_MEMBER_MISSING(_struct, ime_commit_text))
return;
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Unverified params: text
// Execute
_struct->ime_commit_text(_struct,
text.GetStruct(),
&replacement_range,
relative_cursor_pos);
}
void CefBrowserHostCToCpp::ImeFinishComposingText(bool keep_selection) {
cef_browser_host_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, ime_finish_composing_text))
return;
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Execute
_struct->handle_key_event_before_text_input_client(_struct,
keyEvent);
_struct->ime_finish_composing_text(_struct,
keep_selection);
}
void CefBrowserHostCToCpp::HandleKeyEventAfterTextInputClient(
CefEventHandle keyEvent) {
void CefBrowserHostCToCpp::ImeCancelComposition() {
cef_browser_host_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, handle_key_event_after_text_input_client))
if (CEF_MEMBER_MISSING(_struct, ime_cancel_composition))
return;
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Execute
_struct->handle_key_event_after_text_input_client(_struct,
keyEvent);
_struct->ime_cancel_composition(_struct);
}
void CefBrowserHostCToCpp::DragTargetDragEnter(CefRefPtr<CefDragData> drag_data,

View File

@@ -86,9 +86,14 @@ class CefBrowserHostCToCpp
void NotifyMoveOrResizeStarted() OVERRIDE;
int GetWindowlessFrameRate() OVERRIDE;
void SetWindowlessFrameRate(int frame_rate) OVERRIDE;
CefTextInputContext GetNSTextInputContext() OVERRIDE;
void HandleKeyEventBeforeTextInputClient(CefEventHandle keyEvent) OVERRIDE;
void HandleKeyEventAfterTextInputClient(CefEventHandle keyEvent) OVERRIDE;
void ImeSetComposition(const CefString& text,
const std::vector<CefCompositionUnderline>& underlines,
const CefRange& replacement_range,
const CefRange& selection_range) OVERRIDE;
void ImeCommitText(const CefString& text, const CefRange& replacement_range,
int relative_cursor_pos) OVERRIDE;
void ImeFinishComposingText(bool keep_selection) OVERRIDE;
void ImeCancelComposition() OVERRIDE;
void DragTargetDragEnter(CefRefPtr<CefDragData> drag_data,
const CefMouseEvent& event, DragOperationsMask allowed_ops) OVERRIDE;
void DragTargetDragOver(const CefMouseEvent& event,

View File

@@ -283,6 +283,45 @@ void CefRenderHandlerCToCpp::OnScrollOffsetChanged(
y);
}
void CefRenderHandlerCToCpp::OnImeCompositionRangeChanged(
CefRefPtr<CefBrowser> browser, const CefRange& selected_range,
const RectList& character_bounds) {
cef_render_handler_t* _struct = GetStruct();
if (CEF_MEMBER_MISSING(_struct, on_ime_composition_range_changed))
return;
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Verify param: browser; type: refptr_diff
DCHECK(browser.get());
if (!browser.get())
return;
// Translate param: character_bounds; type: simple_vec_byref_const
const size_t character_boundsCount = character_bounds.size();
cef_rect_t* character_boundsList = NULL;
if (character_boundsCount > 0) {
character_boundsList = new cef_rect_t[character_boundsCount];
DCHECK(character_boundsList);
if (character_boundsList) {
for (size_t i = 0; i < character_boundsCount; ++i) {
character_boundsList[i] = character_bounds[i];
}
}
}
// Execute
_struct->on_ime_composition_range_changed(_struct,
CefBrowserCppToC::Wrap(browser),
&selected_range,
character_boundsCount,
character_boundsList);
// Restore param:character_bounds; type: simple_vec_byref_const
if (character_boundsList)
delete [] character_boundsList;
}
// CONSTRUCTOR - Do not edit by hand.

View File

@@ -51,6 +51,9 @@ class CefRenderHandlerCToCpp
DragOperation operation) override;
void OnScrollOffsetChanged(CefRefPtr<CefBrowser> browser, double x,
double y) override;
void OnImeCompositionRangeChanged(CefRefPtr<CefBrowser> browser,
const CefRange& selected_range,
const RectList& character_bounds) override;
};
#endif // BUILDING_CEF_SHARED