#ifndef UI_BASE_IME_LINUX_LINUX_INPUT_METHOD_CONTEXT_H_
#define UI_BASE_IME_LINUX_LINUX_INPUT_METHOD_CONTEXT_H_
#include <stdint.h>
#include <string>
#include <vector>
#include "base/component_export.h"
#include "ui/base/ime/text_input_client.h"
#include "ui/base/ime/text_input_flags.h"
#include "ui/base/ime/text_input_mode.h"
#include "ui/base/ime/text_input_type.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/native_ui_types.h"
#include "ui/gfx/range/range.h"
namespace gfx {
class Rect;
class Range;
}
namespace ui {
struct CompositionText;
class KeyEvent;
struct ImeTextSpan;
class VirtualKeyboardController;
class COMPONENT_EXPORT(UI_BASE_IME_LINUX) LinuxInputMethodContext {
public:
struct TextInputClientAttributes {
TextInputType input_type = TEXT_INPUT_TYPE_NONE;
TextInputMode input_mode = TEXT_INPUT_MODE_DEFAULT;
uint32_t flags = TEXT_INPUT_FLAG_NONE;
bool should_do_learning = false;
bool can_compose_inline = true;
};
virtual ~LinuxInputMethodContext() = default;
virtual bool DispatchKeyEvent(const ui::KeyEvent& key_event) = 0;
virtual bool IsPeekKeyEvent(const ui::KeyEvent& key_event) = 0;
virtual void SetCursorLocation(const gfx::Rect& rect) = 0;
virtual void SetSurroundingText(const std::u16string& text,
const gfx::Range& text_range,
const gfx::Range& composition_range,
const gfx::Range& selection_range) = 0;
virtual void Reset() = 0;
virtual void WillUpdateFocus(TextInputClient* old_client,
TextInputClient* new_client) {}
virtual void UpdateFocus(
bool has_client,
TextInputType old_type,
const TextInputClientAttributes& new_client_attributes,
TextInputClient::FocusReason reason) = 0;
virtual VirtualKeyboardController* GetVirtualKeyboardController() = 0;
};
class COMPONENT_EXPORT(UI_BASE_IME_LINUX) LinuxInputMethodContextDelegate {
public:
virtual ~LinuxInputMethodContextDelegate() {}
virtual gfx::AcceleratedWidget GetClientWindowKey() const = 0;
virtual void OnCommit(const std::u16string& text) = 0;
virtual void OnConfirmCompositionText(bool keep_selection) = 0;
virtual void OnDeleteSurroundingText(size_t before, size_t after) = 0;
virtual void OnPreeditChanged(const CompositionText& composition_text) = 0;
virtual void OnPreeditEnd() = 0;
virtual void OnPreeditStart() = 0;
virtual void OnSetPreeditRegion(const gfx::Range& range,
const std::vector<ImeTextSpan>& spans) = 0;
virtual void OnSetVirtualKeyboardOccludedBounds(
const gfx::Rect& screen_bounds) = 0;
virtual void OnInsertImage(const GURL& src) = 0;
};
}
#endif