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
|
// Copyright (c) 2012 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 UI_BASE_IME_TEXT_INPUT_CLIENT_H_
#define UI_BASE_IME_TEXT_INPUT_CLIENT_H_
#include "base/basictypes.h"
#include "base/i18n/rtl.h"
#include "base/strings/string16.h"
#include "ui/base/ime/composition_text.h"
#include "ui/base/ime/text_input_mode.h"
#include "ui/base/ime/text_input_type.h"
#include "ui/base/ui_base_export.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/range/range.h"
namespace gfx {
class Rect;
}
namespace ui {
// An interface implemented by a View that needs text input support.
class UI_BASE_EXPORT TextInputClient {
public:
virtual ~TextInputClient();
// Input method result -------------------------------------------------------
// Sets composition text and attributes. If there is composition text already,
// it'll be replaced by the new one. Otherwise, current selection will be
// replaced. If there is no selection, the composition text will be inserted
// at the insertion point.
virtual void SetCompositionText(const ui::CompositionText& composition) = 0;
// Converts current composition text into final content.
virtual void ConfirmCompositionText() = 0;
// Removes current composition text.
virtual void ClearCompositionText() = 0;
// Inserts a given text at the insertion point. Current composition text or
// selection will be removed. This method should never be called when the
// current text input type is TEXT_INPUT_TYPE_NONE.
virtual void InsertText(const base::string16& text) = 0;
// Inserts a single char at the insertion point. Unlike above InsertText()
// method, this method has an extra |flags| parameter indicating the modifier
// key states when the character is generated. This method should only be
// called when a key press is not handled by the input method but still
// generates a character (eg. by the keyboard driver). In another word, the
// preceding key press event should not be a VKEY_PROCESSKEY.
// This method will be called whenever a char is generated by the keyboard,
// even if the current text input type is TEXT_INPUT_TYPE_NONE.
virtual void InsertChar(base::char16 ch, int flags) = 0;
// Input context information -------------------------------------------------
// Returns native window to which input context is bound.
virtual gfx::NativeWindow GetAttachedWindow() const = 0;
// Returns current text input type. It could be changed and even becomes
// TEXT_INPUT_TYPE_NONE at runtime.
virtual ui::TextInputType GetTextInputType() const = 0;
// Returns current text input mode. It could be changed and even becomes
// TEXT_INPUT_MODE_DEFAULT at runtime.
virtual ui::TextInputMode GetTextInputMode() const = 0;
// Returns the current text input flags, which is a bit map of
// WebTextInputType defined in blink. This is valid only for web input fileds;
// it will return TEXT_INPUT_FLAG_NONE for native input fields.
virtual int GetTextInputFlags() const = 0;
// Returns if the client supports inline composition currently.
virtual bool CanComposeInline() const = 0;
// Returns current caret (insertion point) bounds in the universal screen
// coordinates. If there is selection, then the selection bounds will be
// returned.
// Note: On Windows, the returned value is supposed to be DIP (Density
// Independent Pixel).
// TODO(ime): Have a clear spec whether the returned value is DIP or not.
// http://crbug.com/360334
virtual gfx::Rect GetCaretBounds() const = 0;
// Retrieves the composition character boundary rectangle in the universal
// screen coordinates. The |index| is zero-based index of character position
// in composition text.
// Returns false if there is no composition text or |index| is out of range.
// The |rect| is not touched in the case of failure.
// Note: On Windows, the returned value is supposed to be DIP
// (Density Independent Pixel).
// TODO(ime): Have a clear spec whether the returned value is DIP or not.
// http://crbug.com/360334
virtual bool GetCompositionCharacterBounds(uint32 index,
gfx::Rect* rect) const = 0;
// Returns true if there is composition text.
virtual bool HasCompositionText() const = 0;
// Document content operations ----------------------------------------------
// Retrieves the UTF-16 based character range containing accessibled text in
// the View. It must cover the composition and selection range.
// Returns false if the information cannot be retrieved right now.
virtual bool GetTextRange(gfx::Range* range) const = 0;
// Retrieves the UTF-16 based character range of current composition text.
// Returns false if the information cannot be retrieved right now.
virtual bool GetCompositionTextRange(gfx::Range* range) const = 0;
// Retrieves the UTF-16 based character range of current selection.
// Returns false if the information cannot be retrieved right now.
virtual bool GetSelectionRange(gfx::Range* range) const = 0;
// Selects the given UTF-16 based character range. Current composition text
// will be confirmed before selecting the range.
// Returns false if the operation is not supported.
virtual bool SetSelectionRange(const gfx::Range& range) = 0;
// Deletes contents in the given UTF-16 based character range. Current
// composition text will be confirmed before deleting the range.
// The input caret will be moved to the place where the range gets deleted.
// ExtendSelectionAndDelete should be used instead as far as you are deleting
// characters around current caret. This function with the range based on
// GetSelectionRange has a race condition due to asynchronous IPCs between
// browser and renderer.
// Returns false if the operation is not supported.
virtual bool DeleteRange(const gfx::Range& range) = 0;
// Retrieves the text content in a given UTF-16 based character range.
// The result will be stored into |*text|.
// Returns false if the operation is not supported or the specified range
// is out of the text range returned by GetTextRange().
virtual bool GetTextFromRange(const gfx::Range& range,
base::string16* text) const = 0;
// Miscellaneous ------------------------------------------------------------
// Called whenever current keyboard layout or input method is changed,
// especially the change of input locale and text direction.
virtual void OnInputMethodChanged() = 0;
// Called whenever the user requests to change the text direction and layout
// alignment of the current text box. It's for supporting ctrl-shift on
// Windows.
// Returns false if the operation is not supported.
virtual bool ChangeTextDirectionAndLayoutAlignment(
base::i18n::TextDirection direction) = 0;
// Deletes the current selection plus the specified number of characters
// before and after the selection or caret. This function should be used
// instead of calling DeleteRange with GetSelectionRange, because
// GetSelectionRange may not be the latest value due to asynchronous of IPC
// between browser and renderer.
virtual void ExtendSelectionAndDelete(size_t before, size_t after) = 0;
// Ensure the caret is within |rect|. |rect| is in screen coordinates and
// may extend beyond the bounds of this TextInputClient.
// Note: On Windows, the returned value is supposed to be DIP (Density
// Independent Pixel).
// TODO(ime): Have a clear spec whether the returned value is DIP or not.
// http://crbug.com/360334
virtual void EnsureCaretInRect(const gfx::Rect& rect) = 0;
// Called when IME shows a candidate window.
virtual void OnCandidateWindowShown() = 0;
// Called when IME updates any appearance of the current candidate window.
virtual void OnCandidateWindowUpdated() = 0;
// Called when IME hides the candidate window.
virtual void OnCandidateWindowHidden() = 0;
// Returns true if |command_id| is currently allowed to be executed.
virtual bool IsEditingCommandEnabled(int command_id) = 0;
// Execute the command specified by |command_id|.
virtual void ExecuteEditingCommand(int command_id) = 0;
};
} // namespace ui
#endif // UI_BASE_IME_TEXT_INPUT_CLIENT_H_
|