1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257
|
// 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 CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_INTERFACE_H_
#define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_INTERFACE_H_
#include <string>
#include <vector>
#include "ui/base/ime/chromeos/ime_bridge.h"
class GURL;
namespace chromeos {
namespace input_method {
class InputMethodDescriptor;
struct KeyEventHandle;
} // namespace input_method
// InputMethodEngine is used to translate from the Chrome IME API to the native
// API.
class InputMethodEngineInterface : public IMEEngineHandlerInterface {
public:
struct KeyboardEvent {
KeyboardEvent();
virtual ~KeyboardEvent();
std::string type;
std::string key;
std::string code;
int key_code; // only used by on-screen keyboards.
std::string extension_id;
bool alt_key;
bool ctrl_key;
bool shift_key;
bool caps_lock;
};
enum {
MENU_ITEM_MODIFIED_LABEL = 0x0001,
MENU_ITEM_MODIFIED_STYLE = 0x0002,
MENU_ITEM_MODIFIED_VISIBLE = 0x0004,
MENU_ITEM_MODIFIED_ENABLED = 0x0008,
MENU_ITEM_MODIFIED_CHECKED = 0x0010,
MENU_ITEM_MODIFIED_ICON = 0x0020,
};
enum MenuItemStyle {
MENU_ITEM_STYLE_NONE,
MENU_ITEM_STYLE_CHECK,
MENU_ITEM_STYLE_RADIO,
MENU_ITEM_STYLE_SEPARATOR,
};
enum MouseButtonEvent {
MOUSE_BUTTON_LEFT,
MOUSE_BUTTON_RIGHT,
MOUSE_BUTTON_MIDDLE,
};
enum SegmentStyle {
SEGMENT_STYLE_UNDERLINE,
SEGMENT_STYLE_DOUBLE_UNDERLINE,
SEGMENT_STYLE_NO_UNDERLINE,
};
enum CandidateWindowPosition {
WINDOW_POS_CURSOR,
WINDOW_POS_COMPOSITTION,
};
struct MenuItem {
MenuItem();
virtual ~MenuItem();
std::string id;
std::string label;
MenuItemStyle style;
bool visible;
bool enabled;
bool checked;
unsigned int modified;
std::vector<MenuItem> children;
};
struct InputContext {
int id;
std::string type;
bool auto_correct;
bool auto_complete;
bool spell_check;
};
struct UsageEntry {
std::string title;
std::string body;
};
struct Candidate {
Candidate();
virtual ~Candidate();
std::string value;
int id;
std::string label;
std::string annotation;
UsageEntry usage;
std::vector<Candidate> candidates;
};
struct CandidateWindowProperty {
CandidateWindowProperty();
virtual ~CandidateWindowProperty();
int page_size;
bool is_cursor_visible;
bool is_vertical;
bool show_window_at_composition;
// Auxiliary text is typically displayed in the footer of the candidate
// window.
std::string auxiliary_text;
bool is_auxiliary_text_visible;
};
struct SegmentInfo {
int start;
int end;
SegmentStyle style;
};
class Observer {
public:
virtual ~Observer();
// Called when the IME becomes the active IME.
virtual void OnActivate(const std::string& engine_id) = 0;
// Called when the IME is no longer active.
virtual void OnDeactivated(const std::string& engine_id) = 0;
// Called when a text field gains focus, and will be sending key events.
virtual void OnFocus(const InputContext& context) = 0;
// Called when a text field loses focus, and will no longer generate events.
virtual void OnBlur(int context_id) = 0;
// Called when an InputContext's properties change while it is focused.
virtual void OnInputContextUpdate(const InputContext& context) = 0;
// Called when the user pressed a key with a text field focused.
virtual void OnKeyEvent(const std::string& engine_id,
const KeyboardEvent& event,
input_method::KeyEventHandle* key_data) = 0;
// Called when the user clicks on an item in the candidate list.
virtual void OnCandidateClicked(const std::string& engine_id,
int candidate_id,
MouseButtonEvent button) = 0;
// Called when a menu item for this IME is interacted with.
virtual void OnMenuItemActivated(const std::string& engine_id,
const std::string& menu_id) = 0;
// Called when a surrounding text is changed.
virtual void OnSurroundingTextChanged(const std::string& engine_id,
const std::string& text,
int cursor_pos,
int anchor_pos) = 0;
// Called when composition bounds are changed.
virtual void OnCompositionBoundsChanged(const gfx::Rect& bounds) = 0;
// Called when Chrome terminates on-going text input session.
virtual void OnReset(const std::string& engine_id) = 0;
};
virtual ~InputMethodEngineInterface() {}
// Set the current composition and associated properties.
virtual bool SetComposition(int context_id,
const char* text,
int selection_start,
int selection_end,
int cursor,
const std::vector<SegmentInfo>& segments,
std::string* error) = 0;
// Clear the current composition.
virtual bool ClearComposition(int context_id, std::string* error) = 0;
// Commit the specified text to the specified context. Fails if the context
// is not focused.
virtual bool CommitText(int context_id, const char* text,
std::string* error) = 0;
// Send the sequence of key events.
virtual bool SendKeyEvents(int context_id,
const std::vector<KeyboardEvent>& events) = 0;
// This function returns the current property of the candidate window.
// The caller can use the returned value as the default property and
// modify some of specified items.
virtual const CandidateWindowProperty&
GetCandidateWindowProperty() const = 0;
// Change the property of the candidate window and repaint the candidate
// window widget.
virtual void SetCandidateWindowProperty(
const CandidateWindowProperty& property) = 0;
// Show or hide the candidate window.
virtual bool SetCandidateWindowVisible(bool visible, std::string* error) = 0;
// Set the list of entries displayed in the candidate window.
virtual bool SetCandidates(int context_id,
const std::vector<Candidate>& candidates,
std::string* error) = 0;
// Set the position of the cursor in the candidate window.
virtual bool SetCursorPosition(int context_id, int candidate_id,
std::string* error) = 0;
// Set the list of items that appears in the language menu when this IME is
// active.
virtual bool SetMenuItems(const std::vector<MenuItem>& items) = 0;
// Update the state of the menu items.
virtual bool UpdateMenuItems(const std::vector<MenuItem>& items) = 0;
// Returns true if this IME is active, false if not.
virtual bool IsActive() const = 0;
// Returns the current active input_component id.
virtual const std::string& GetActiveComponentId() const = 0;
// Deletes |number_of_chars| unicode characters as the basis of |offset| from
// the surrounding text. The |offset| is relative position based on current
// caret.
// NOTE: Currently we are falling back to backspace forwarding workaround,
// because delete_surrounding_text is not supported in Chrome. So this
// function is restricted for only preceding text.
// TODO(nona): Support full spec delete surrounding text.
virtual bool DeleteSurroundingText(int context_id,
int offset,
size_t number_of_chars,
std::string* error) = 0;
// Hides the input view window (from API call).
virtual void HideInputView() = 0;
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_INTERFACE_H_
|