• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef OHOS_WINDOW_UTILS_H
17 #define OHOS_WINDOW_UTILS_H
18 
19 #include <cstdint>
20 #include <memory>
21 #include <map>
22 #include <string>
23 #include "wm_common.h"
24 
25 #define FFI_EXPORT __attribute__((visibility("default")))
26 
27 struct SystemBarPropertyFlag {
28     bool enableFlag;
29     bool backgroundColorFlag;
30     bool contentColorFlag;
SystemBarPropertyFlagSystemBarPropertyFlag31     SystemBarPropertyFlag() : enableFlag(false),
32         backgroundColorFlag(false), contentColorFlag(false) {}
33 };
34 
35 constexpr int32_t RGB_LENGTH = 6;
36 
37 extern "C" {
38 struct RetStruct {
39     int32_t code;
40     int64_t len;
41     void* data;
42 };
43 
44 struct CRect {
45     int32_t posX;
46     int32_t posY;
47     uint32_t width;
48     uint32_t height;
49 };
50 
51 struct CWindowProperties {
52     CRect windowRect;
53     CRect drawableRect;
54     uint32_t type;
55     bool isFullScreen;
56     bool isLayoutFullScreen;
57     bool focusable;
58     bool touchable;
59     float brightness;
60     bool isKeepScreenOn;
61     bool isPrivacyMode;
62     bool isRoundCorner;
63     bool isTransparent;
64     uint32_t id;
65 };
66 
67 struct CSubWindowOptions {
68     std::string title;
69     bool decorEnabled;
70     bool isModal;
71 };
72 
73 enum class SpecificSystemBar {
74     STATUS = 0,
75     NAVIGATION = 1,
76     NAVIGATION_INDICATOR = 2
77 };
78 }
79 
80 struct WindowRotate {
81     double x;
82     double y;
83     double z;
84     double pivotX;
85     double pivotY;
86 };
87 
88 struct CJBarProperties {
89     const char* statusBarColor;
90     bool isStatusBarLightIcon;
91     const char* statusBarContentColor;
92     const char* navigationBarColor;
93     bool isNavigationBarLightIcon;
94     const char* navigationBarContentColor;
95     bool enableStatusBarAnimation;
96     bool enableNavigationBarAnimation;
97 
~CJBarPropertiesCJBarProperties98     ~CJBarProperties()
99     {
100         if (statusBarColor != nullptr) {
101             delete[] statusBarColor;
102         }
103         if (statusBarContentColor != nullptr) {
104             delete[] statusBarContentColor;
105         }
106         if (navigationBarColor != nullptr) {
107             delete[] navigationBarColor;
108         }
109         if (navigationBarContentColor != nullptr) {
110             delete[] navigationBarContentColor;
111         }
112     }
113 
114     CJBarProperties(const CJBarProperties&) = delete;
115     CJBarProperties& operator=(const CJBarProperties&) = delete;
116 };
117 
118 
119 namespace OHOS {
120 namespace Rosen {
121 const int32_t WINDOW_SUCCESS = 0;
122 
123 enum class LifeCycleEventType : uint32_t {
124     FOREGROUND = 1,
125     ACTIVE,
126     INACTIVE,
127     BACKGROUND,
128     RESUMED,
129     PAUSED,
130     DESTROYED,
131 };
132 
133 enum class ApiWindowType : uint32_t {
134     TYPE_BASE,
135     TYPE_APP = TYPE_BASE,
136     TYPE_SYSTEM_ALERT,
137     TYPE_INPUT_METHOD,
138     TYPE_STATUS_BAR,
139     TYPE_PANEL,
140     TYPE_KEYGUARD,
141     TYPE_VOLUME_OVERLAY,
142     TYPE_NAVIGATION_BAR,
143     TYPE_FLOAT,
144     TYPE_WALLPAPER,
145     TYPE_DESKTOP,
146     TYPE_LAUNCHER_RECENT,
147     TYPE_LAUNCHER_DOCK,
148     TYPE_VOICE_INTERACTION,
149     TYPE_POINTER,
150     TYPE_FLOAT_CAMERA,
151     TYPE_DIALOG,
152     TYPE_SCREENSHOT,
153     TYPE_SYSTEM_TOAST,
154     TYPE_DIVIDER,
155     TYPE_GLOBAL_SEARCH,
156     TYPE_MAIN = 32,
157     TYPE_END
158 };
159 
160 struct CjRectInfo {
161     int32_t left;
162     int32_t top;
163     uint32_t width;
164     uint32_t height;
165 };
166 
167 struct SystemBarRegionTintInfo {
168     uint32_t type;
169     bool isEnable;
170     uint32_t backgroundColor;
171     uint32_t contentColor;
172     CjRectInfo region;
173 };
174 
175 enum class RectChangeReason : uint32_t {
176     UNDEFINED = 0,
177     MAXIMIZE,
178     RECOVER,
179     MOVE,
180     DRAG,
181     DRAG_START,
182     DRAG_END,
183 };
184 
185 const std::map<ApiWindowType, WindowType> CJ_TO_NATIVE_WINDOW_TYPE_MAP {
186     { ApiWindowType::TYPE_APP,                 WindowType::WINDOW_TYPE_APP_SUB_WINDOW      },
187     { ApiWindowType::TYPE_DIALOG,              WindowType::WINDOW_TYPE_DIALOG              },
188     { ApiWindowType::TYPE_SYSTEM_ALERT,        WindowType::WINDOW_TYPE_SYSTEM_ALARM_WINDOW },
189     { ApiWindowType::TYPE_INPUT_METHOD,        WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT  },
190     { ApiWindowType::TYPE_STATUS_BAR,          WindowType::WINDOW_TYPE_STATUS_BAR          },
191     { ApiWindowType::TYPE_PANEL,               WindowType::WINDOW_TYPE_PANEL               },
192     { ApiWindowType::TYPE_KEYGUARD,            WindowType::WINDOW_TYPE_KEYGUARD            },
193     { ApiWindowType::TYPE_VOLUME_OVERLAY,      WindowType::WINDOW_TYPE_VOLUME_OVERLAY      },
194     { ApiWindowType::TYPE_NAVIGATION_BAR,      WindowType::WINDOW_TYPE_NAVIGATION_BAR      },
195     { ApiWindowType::TYPE_FLOAT,               WindowType::WINDOW_TYPE_FLOAT               },
196     { ApiWindowType::TYPE_FLOAT_CAMERA,        WindowType::WINDOW_TYPE_FLOAT_CAMERA        },
197     { ApiWindowType::TYPE_WALLPAPER,           WindowType::WINDOW_TYPE_WALLPAPER           },
198     { ApiWindowType::TYPE_DESKTOP,             WindowType::WINDOW_TYPE_DESKTOP             },
199     { ApiWindowType::TYPE_LAUNCHER_RECENT,     WindowType::WINDOW_TYPE_LAUNCHER_RECENT     },
200     { ApiWindowType::TYPE_LAUNCHER_DOCK,       WindowType::WINDOW_TYPE_LAUNCHER_DOCK       },
201     { ApiWindowType::TYPE_VOICE_INTERACTION,   WindowType::WINDOW_TYPE_VOICE_INTERACTION   },
202     { ApiWindowType::TYPE_POINTER,             WindowType::WINDOW_TYPE_POINTER             },
203     { ApiWindowType::TYPE_SCREENSHOT,          WindowType::WINDOW_TYPE_SCREENSHOT          },
204     { ApiWindowType::TYPE_SYSTEM_TOAST,        WindowType::WINDOW_TYPE_SYSTEM_TOAST        },
205     { ApiWindowType::TYPE_DIVIDER,             WindowType::WINDOW_TYPE_DOCK_SLICE          },
206     { ApiWindowType::TYPE_GLOBAL_SEARCH,       WindowType::WINDOW_TYPE_GLOBAL_SEARCH       },
207     { ApiWindowType::TYPE_MAIN,                WindowType::WINDOW_TYPE_APP_MAIN_WINDOW     },
208 };
209 
210 enum class ApiWindowMode : uint32_t {
211     UNDEFINED = 1,
212     FULLSCREEN,
213     PRIMARY,
214     SECONDARY,
215     FLOATING,
216     MODE_END = FLOATING
217 };
218 
219 const std::map<ApiWindowMode, WindowMode> CJ_TO_NATIVE_WINDOW_MODE_MAP {
220     {ApiWindowMode::UNDEFINED,  WindowMode::WINDOW_MODE_UNDEFINED       },
221     {ApiWindowMode::FULLSCREEN, WindowMode::WINDOW_MODE_FULLSCREEN      },
222     {ApiWindowMode::PRIMARY,    WindowMode::WINDOW_MODE_SPLIT_PRIMARY   },
223     {ApiWindowMode::SECONDARY,  WindowMode::WINDOW_MODE_SPLIT_SECONDARY },
224     {ApiWindowMode::FLOATING,   WindowMode::WINDOW_MODE_FLOATING        },
225 };
226 
227 const std::map<WindowType, ApiWindowType> CJ_TO_WINDOW_TYPE_MAP {
228     { WindowType::WINDOW_TYPE_APP_SUB_WINDOW,      ApiWindowType::TYPE_APP               },
229     { WindowType::WINDOW_TYPE_DIALOG,              ApiWindowType::TYPE_DIALOG            },
230     { WindowType::WINDOW_TYPE_SYSTEM_ALARM_WINDOW, ApiWindowType::TYPE_SYSTEM_ALERT      },
231     { WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT,  ApiWindowType::TYPE_INPUT_METHOD      },
232     { WindowType::WINDOW_TYPE_STATUS_BAR,          ApiWindowType::TYPE_STATUS_BAR        },
233     { WindowType::WINDOW_TYPE_PANEL,               ApiWindowType::TYPE_PANEL             },
234     { WindowType::WINDOW_TYPE_KEYGUARD,            ApiWindowType::TYPE_KEYGUARD          },
235     { WindowType::WINDOW_TYPE_VOLUME_OVERLAY,      ApiWindowType::TYPE_VOLUME_OVERLAY    },
236     { WindowType::WINDOW_TYPE_NAVIGATION_BAR,      ApiWindowType::TYPE_NAVIGATION_BAR    },
237     { WindowType::WINDOW_TYPE_FLOAT,               ApiWindowType::TYPE_FLOAT             },
238     { WindowType::WINDOW_TYPE_FLOAT_CAMERA,        ApiWindowType::TYPE_FLOAT_CAMERA      },
239     { WindowType::WINDOW_TYPE_WALLPAPER,           ApiWindowType::TYPE_WALLPAPER         },
240     { WindowType::WINDOW_TYPE_DESKTOP,             ApiWindowType::TYPE_DESKTOP           },
241     { WindowType::WINDOW_TYPE_LAUNCHER_RECENT,     ApiWindowType::TYPE_LAUNCHER_RECENT   },
242     { WindowType::WINDOW_TYPE_LAUNCHER_DOCK,       ApiWindowType::TYPE_LAUNCHER_DOCK     },
243     { WindowType::WINDOW_TYPE_VOICE_INTERACTION,   ApiWindowType::TYPE_VOICE_INTERACTION },
244     { WindowType::WINDOW_TYPE_POINTER,             ApiWindowType::TYPE_POINTER           },
245     { WindowType::WINDOW_TYPE_SCREENSHOT,          ApiWindowType::TYPE_SCREENSHOT        },
246     { WindowType::WINDOW_TYPE_SYSTEM_TOAST,        ApiWindowType::TYPE_SYSTEM_TOAST      },
247     { WindowType::WINDOW_TYPE_DOCK_SLICE,          ApiWindowType::TYPE_DIVIDER           },
248     { WindowType::WINDOW_TYPE_GLOBAL_SEARCH,       ApiWindowType::TYPE_GLOBAL_SEARCH     },
249     { WindowType::WINDOW_TYPE_APP_MAIN_WINDOW,     ApiWindowType::TYPE_MAIN              },
250 };
251 
252 const std::map<WindowSizeChangeReason, RectChangeReason> CJ_SIZE_CHANGE_REASON {
253     { WindowSizeChangeReason::UNDEFINED,             RectChangeReason::UNDEFINED  },
254     { WindowSizeChangeReason::MAXIMIZE,              RectChangeReason::MAXIMIZE   },
255     { WindowSizeChangeReason::RECOVER,               RectChangeReason::RECOVER    },
256     { WindowSizeChangeReason::ROTATION,              RectChangeReason::UNDEFINED  },
257     { WindowSizeChangeReason::DRAG,                  RectChangeReason::DRAG       },
258     { WindowSizeChangeReason::DRAG_START,            RectChangeReason::DRAG_START },
259     { WindowSizeChangeReason::DRAG_END,              RectChangeReason::DRAG_END   },
260     { WindowSizeChangeReason::RESIZE,                RectChangeReason::UNDEFINED  },
261     { WindowSizeChangeReason::MOVE,                  RectChangeReason::MOVE       },
262     { WindowSizeChangeReason::HIDE,                  RectChangeReason::UNDEFINED  },
263     { WindowSizeChangeReason::TRANSFORM,             RectChangeReason::UNDEFINED  },
264     { WindowSizeChangeReason::CUSTOM_ANIMATION_SHOW, RectChangeReason::UNDEFINED  },
265     { WindowSizeChangeReason::FULL_TO_SPLIT,         RectChangeReason::UNDEFINED  },
266     { WindowSizeChangeReason::SPLIT_TO_FULL,         RectChangeReason::UNDEFINED  },
267     { WindowSizeChangeReason::FULL_TO_FLOATING,      RectChangeReason::UNDEFINED  },
268     { WindowSizeChangeReason::FLOATING_TO_FULL,      RectChangeReason::UNDEFINED  },
269     { WindowSizeChangeReason::END,                   RectChangeReason::UNDEFINED  },
270 };
271 }
272 }
273 
274 #endif
275