// Copyright 2016 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 CONTENT_COMMON_TEXT_INPUT_STATE_H_ #define CONTENT_COMMON_TEXT_INPUT_STATE_H_ #include "base/optional.h" #include "base/strings/string16.h" #include "content/common/content_export.h" #include "ui/base/ime/text_input_action.h" #include "ui/base/ime/text_input_mode.h" #include "ui/base/ime/text_input_type.h" #include "ui/gfx/geometry/rect.h" namespace content { // The text input state information for handling IME on the browser side. The // text input state information such as type, mode, etc. are used by the input // method to handle IME (the usage is specific to each platform). struct CONTENT_EXPORT TextInputState { TextInputState(); TextInputState(const TextInputState& other); ~TextInputState(); // Type of the input field. ui::TextInputType type = ui::TEXT_INPUT_TYPE_NONE; // The mode of input field. ui::TextInputMode mode = ui::TEXT_INPUT_MODE_DEFAULT; // The action of the input field. ui::TextInputAction action = ui::TextInputAction::kDefault; // The flags of input field (autocorrect, autocomplete, etc.) int flags = 0; // The value of input field. base::string16 value; // The cursor position of the current selection start, or the caret position // if nothing is selected. int selection_start = 0; // The cursor position of the current selection end, or the caret position if // nothing is selected. int selection_end = 0; // The start position of the current composition, or -1 if there is none. int composition_start = -1; // The end position of the current composition, or -1 if there is none. int composition_end = -1; // Whether or not inline composition can be performed for the current input. bool can_compose_inline = true; // Whether or not the IME should be shown as a result of this update. Even if // true, the IME will only be shown if the input is appropriate (e.g. not // TEXT_INPUT_TYPE_NONE). bool show_ime_if_needed = false; // Whether or not the IME should always be hidden as a result of this update. bool always_hide_ime = false; // Whether or not this is a reply to a request from IME. bool reply_to_request = false; // Store control and selection bounds of EditContext. // These optionals will be nullopts if there isn't any active EditContext. // For non EditContext scenarios, the bounds are returned via // |GetCompositionCharacterBounds| base::Optional edit_context_control_bounds; base::Optional edit_context_selection_bounds; }; } // namespace content #endif // CONTENT_COMMON_TEXT_INPUT_STATE_H_