| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CONTENT_BROWSER_RENDERER_HOST_VIRTUAL_KEYBOARD_CONTROLLER_WIN_H_ |
| #define CONTENT_BROWSER_RENDERER_HOST_VIRTUAL_KEYBOARD_CONTROLLER_WIN_H_ |
| |
| #include "base/memory/raw_ptr.h" |
| #include "content/browser/renderer_host/render_widget_host_impl.h" |
| #include "ui/base/ime/virtual_keyboard_controller_observer.h" |
| |
| namespace gfx { |
| class Rect; |
| } |
| |
| namespace ui { |
| namespace mojom { |
| class TextInputState; |
| } |
| class InputMethod; |
| } |
| |
| namespace content { |
| |
| class RenderWidgetHostViewAura; |
| |
| // This class implements the ui::VirtualKeyboardControllerObserver interface |
| // which provides notifications about the on-screen keyboard on Windows getting |
| // displayed or hidden in response to taps on editable fields. |
| // It provides functionality to request blink to scroll the input field if it |
| // is obscured by the on screen keyboard. |
| // TryShow/TryHide APIs are Windows system APIs that are used to show/hide VK |
| // respectively. |
| // https://docs.microsoft.com/en-us/uwp/api/windows.ui.viewmanagement.inputpane?view=winrt-18362 |
| class VirtualKeyboardControllerWin |
| : public ui::VirtualKeyboardControllerObserver { |
| public: |
| VirtualKeyboardControllerWin(RenderWidgetHostViewAura* host_view, |
| ui::InputMethod* input_method); |
| VirtualKeyboardControllerWin(const VirtualKeyboardControllerWin&) = delete; |
| ~VirtualKeyboardControllerWin() override; |
| |
| VirtualKeyboardControllerWin& operator=(const VirtualKeyboardControllerWin&) = |
| delete; |
| |
| void UpdateTextInputState(const ui::mojom::TextInputState* state); |
| void FocusedNodeChanged(bool is_editable); |
| void HideAndNotifyKeyboardInset(); |
| |
| // VirtualKeyboardControllerObserver overrides. |
| void OnKeyboardVisible(const gfx::Rect& keyboard_rect) override; |
| void OnKeyboardHidden() override; |
| |
| private: |
| void ShowVirtualKeyboard(); |
| void HideVirtualKeyboard(); |
| bool IsPointerTypeValidForVirtualKeyboard() const; |
| |
| raw_ptr<RenderWidgetHostViewAura> host_view_; |
| raw_ptr<ui::InputMethod> input_method_; |
| bool observers_registered_ = false; |
| bool virtual_keyboard_shown_ = false; |
| bool is_manual_policy_ = false; |
| }; |
| |
| } // namespace content |
| |
| #endif // CONTENT_BROWSER_RENDERER_HOST_VIRTUAL_KEYBOARD_CONTROLLER_WIN_H_ |