[Tizen] Add get/set Dpi to window system
[platform/core/uifw/dali-adaptor.git] / dali / internal / window-system / common / window-system.h
1 #ifndef DALI_INTERNAL_WINDOW_SYSTEM_COMMON_WINDOW_SYSTEM_H
2 #define DALI_INTERNAL_WINDOW_SYSTEM_COMMON_WINDOW_SYSTEM_H
3
4 /*
5  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL_HEADERS
22 #include <dali/public-api/object/any.h>
23 #include <cstdint>
24
25 namespace Dali
26 {
27 namespace Internal
28 {
29 namespace Adaptor
30 {
31 namespace WindowSystem
32 {
33 /**
34  * @brief Initialize a window system
35  */
36 void Initialize();
37
38 /**
39  * @brief Shutdown a window system
40  */
41 void Shutdown();
42
43 /**
44  * @brief Set the DPI of the target screen.
45  *
46  * @note Multiple screens are not currently supported.
47  * @param[in] horizontalDpi The horizontal resolution in DPI.
48  * @param[in] verticalDpi The vertical resolution in DPI.
49  */
50 void SetDpi(uint32_t dpiHorizontal, uint32_t dpiVertical);
51
52 /**
53  * @brief Retrieves the DPI previously set to the target screen.
54  *
55  * @note Multiple screens are not currently supported.
56  * @param[out] horizontalDpi The horizontal resolution in DPI.
57  * @param[out] verticalDpi The vertical resolution in DPI.
58  */
59 void GetDpi(uint32_t& dpiHorizontal, uint32_t& dpiVertical);
60
61 /**
62  * @brief Get the screen size
63  */
64 void GetScreenSize(int32_t& width, int32_t& height);
65
66 /**
67  * @brief Update the screen size
68  * @note The screen size may be updated while application is running. So update the stored size.
69  */
70 void UpdateScreenSize();
71
72 /**
73  * @copydoc Dali::Keyboard::SetRepeatInfo()
74  */
75 bool SetKeyboardRepeatInfo(float rate, float delay);
76
77 /**
78  * @copydoc Dali::Keyboard::GetRepeatInfo()
79  */
80 bool GetKeyboardRepeatInfo(float& rate, float& delay);
81
82 } // namespace WindowSystem
83
84 /**
85  * Base class for window system. The minimal set of events and properties that should be received/set on the window
86  */
87 class WindowSystemBase
88 {
89 public:
90   /**
91    * Event types that can be received from the window manager for a given window
92    */
93   enum class Event
94   {
95     PROPERTY_NOTIFY,
96     DELETE_REQUEST,
97     MOVE_RESIZE_REQUEST,
98     FOCUS_IN,
99     FOCUS_OUT,
100     DAMAGE,
101     MOUSE_WHEEL,
102     MOUSE_MOVE,
103     MOUSE_BUTTON_DOWN,
104     MOUSE_BUTTON_UP,
105     MOUSE_OUT,
106     KEY_DOWN,
107     KEY_UP,
108     SELECTION_CLEAR,
109     SELECTION_NOTIFY
110   };
111
112   /**
113    * Base ptr for events - implementation can downcast to platform specific event structure
114    */
115   struct EventBase
116   {
117   };
118
119   /**
120    * Callback function signature. Platform implementation can call generic handler on a given window
121    */
122   using EventHandlerCallback = bool (*)(void* data, Event eventType, EventBase* event);
123
124   /**
125    * Struct to define an event handler in a window implementation
126    */
127   struct EventHandler
128   {
129     EventHandlerCallback callback;  ///< User callback.
130     void*                data;      ///< user data
131     Event                event;     ///< Event the handler is listening to
132     int                  handlerId; ///< Id of the handler
133   };
134
135   /**
136    * @return Get the current display of this application
137    */
138   virtual Dali::Any GetDisplay() = 0;
139
140   /**
141    * Add an event handler to the window system
142    * @param event The window system event to listen for
143    * @param callback A callback to handle the event
144    * @param data User data to pass to the callback
145    * @return A handler object that may be passed to DeleteEventHandler.
146    *
147    * When the callback is executed, if it returns true, then the invoker will stop calling
148    * other event handlers that have registered with that event type. If it returns false,
149    * then it will continue with other registered handlers.
150    */
151   virtual EventHandler* AddEventHandler(Event event, EventHandlerCallback callback, void* data) = 0;
152
153   /**
154    * Delete an event handler from the window system.
155    * @param eventHandler The event handler to delete.
156    */
157   virtual void DeleteEventHandler(EventHandler* eventHandler) = 0;
158
159   /**
160    * Get the screen size for this window system.
161    *
162    * @param[out] width The width of the screen
163    * @param[out] height The height of the screen
164    */
165   virtual void GetScreenSize(int32_t& width, int32_t& height) = 0;
166 };
167
168 } // namespace Adaptor
169 } // namespace Internal
170 } // namespace Dali
171
172 #endif // DALI_INTERNAL_WINDOW_SYSTEM_COMMON_WINDOW_SYSTEM_H