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