Enable IME support for Ozone Efl
[platform/framework/web/chromium-efl.git] / tizen_src / chromium_impl / ui / ozone / platform / efl / efl_event_handler.h
1 // Copyright 2021 Samsung Electronics. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef UI_OZONE_PLATFORM_EFL_EFL_EVENT_HANDLER_H_
6 #define UI_OZONE_PLATFORM_EFL_EFL_EVENT_HANDLER_H_
7
8 #include <Ecore.h>
9 #include <Ecore_Evas.h>
10
11 #if defined(OS_TIZEN_TV_PRODUCT)
12 #include "base/callback.h"
13 #include "ui/gfx/geometry/rect.h"
14 #endif
15
16 namespace ui {
17
18 class EflWindow;
19 class EflPlatformEventSource;
20 class IMContextEfl;
21 class KeyEvent;
22 class TouchEvent;
23
24 // Keyboard
25 template <class EVT>
26 KeyEvent MakeWebKeyEvent(bool pressed, const EVT*);
27
28 TouchEvent MakeTouchEvent(Evas_Coord_Point pt,
29                           Evas_Touch_Point_State state,
30                           int id,
31                           unsigned int timestamp,
32                           int delta_y);
33
34 class EflEventHandler {
35  public:
36   explicit EflEventHandler(EflWindow* window);
37   ~EflEventHandler();
38
39   EflEventHandler(const EflEventHandler&) = delete;
40   EflEventHandler& operator=(const EflEventHandler&) = delete;
41
42   void SetTouchEventsEnabled(bool enabled);
43   bool TouchEventsEnabled() const { return touch_events_enabled_; }
44   void SetKeyEventsEnabled(bool enabled);
45   bool KeyEventsEnabled() const { return key_events_enabled_; }
46   void SendKeyEvent(Evas_Object* ewk_view, void* event_info, bool is_press);
47   void SendMouseDown(int button, int x, int y);
48   void SendMouseUp(int button, int x, int y);
49   void SendMouseMove(int x, int y);
50   void SendMouseWheel(bool y_direction, int step, int x, int y);
51   void SendMouseOut();
52
53   void SetIMContextEfl(IMContextEfl* im_context) {
54     im_context_efl_ = im_context;
55   }
56   IMContextEfl* GetIMContextEfl() { return im_context_efl_; }
57
58  private:
59   void RegisterCallbacks();
60   void AddTouchCallbacks();
61   void DeleteTouchCallbacks();
62   void AddKeyCallbacks();
63   void DeleteKeyCallbacks();
64
65   static void OnMouseDown(void* data, Evas*, Evas_Object*, void*);
66   static void OnMouseUp(void* data, Evas*, Evas_Object*, void*);
67   static void OnMouseMove(void* data, Evas*, Evas_Object*, void*);
68   static void OnMouseIn(void* data, Evas*, Evas_Object*, void*);
69   static void OnMouseOut(void* data, Evas*, Evas_Object*, void*);
70   static void OnMouseWheel(void* data, Evas*, Evas_Object*, void*);
71   static void OnKeyDown(void*, Evas*, Evas_Object*, void*);
72   static void OnKeyUp(void*, Evas*, Evas_Object*, void*);
73   static void OnMultiTouchDownEvent(void*, Evas*, Evas_Object*, void*);
74   static void OnMultiTouchMoveEvent(void*, Evas*, Evas_Object*, void*);
75   static void OnMultiTouchUpEvent(void*, Evas*, Evas_Object*, void*);
76
77   void ProcessTouchEvents(unsigned int timestamp, bool is_multi_touch);
78   int GetTopControlsHeight();
79   template <typename EVT>
80   bool GetTouchEventsEnabled(const EVT* evas_evt);
81
82   bool FilterIMEKeyDownEvent(Evas_Event_Key_Down* key_down);
83   bool FilterIMEKeyUpEvent(Evas_Event_Key_Up* key_up);
84   bool IsIMEHandleKeyEventEnabled();
85
86   int key_modifiers_ = 0;
87   bool touch_events_enabled_ = false;
88   bool key_events_enabled_ = true;
89   int top_controls_height_ = 0;
90   bool was_keydown_filtered_by_platform_ = false;
91   bool was_return_keydown_filtered_by_platform_ = false;
92   bool was_alt_enter_key_down_ = false;
93   bool was_up_keypress_on_ime_top_ = false;
94
95   EflWindow* window_ = nullptr;
96   Evas_Object* native_view_ = nullptr;
97   IMContextEfl* im_context_efl_ = nullptr;
98 };
99
100 }  // namespace ui
101
102 #endif  // UI_OZONE_PLATFORM_EFL_EFL_EVENT_HANDLER_H_