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_END 157 }; 158 159 struct CjRectInfo { 160 int32_t left; 161 int32_t top; 162 uint32_t width; 163 uint32_t height; 164 }; 165 166 struct SystemBarRegionTintInfo { 167 uint32_t type; 168 bool isEnable; 169 uint32_t backgroundColor; 170 uint32_t contentColor; 171 CjRectInfo region; 172 }; 173 174 enum class RectChangeReason : uint32_t { 175 UNDEFINED = 0, 176 MAXIMIZE, 177 RECOVER, 178 MOVE, 179 DRAG, 180 DRAG_START, 181 DRAG_END, 182 }; 183 184 const std::map<ApiWindowType, WindowType> CJ_TO_NATIVE_WINDOW_TYPE_MAP { 185 { ApiWindowType::TYPE_APP, WindowType::WINDOW_TYPE_APP_SUB_WINDOW }, 186 { ApiWindowType::TYPE_DIALOG, WindowType::WINDOW_TYPE_DIALOG }, 187 { ApiWindowType::TYPE_SYSTEM_ALERT, WindowType::WINDOW_TYPE_SYSTEM_ALARM_WINDOW }, 188 { ApiWindowType::TYPE_INPUT_METHOD, WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT }, 189 { ApiWindowType::TYPE_STATUS_BAR, WindowType::WINDOW_TYPE_STATUS_BAR }, 190 { ApiWindowType::TYPE_PANEL, WindowType::WINDOW_TYPE_PANEL }, 191 { ApiWindowType::TYPE_KEYGUARD, WindowType::WINDOW_TYPE_KEYGUARD }, 192 { ApiWindowType::TYPE_VOLUME_OVERLAY, WindowType::WINDOW_TYPE_VOLUME_OVERLAY }, 193 { ApiWindowType::TYPE_NAVIGATION_BAR, WindowType::WINDOW_TYPE_NAVIGATION_BAR }, 194 { ApiWindowType::TYPE_FLOAT, WindowType::WINDOW_TYPE_FLOAT }, 195 { ApiWindowType::TYPE_FLOAT_CAMERA, WindowType::WINDOW_TYPE_FLOAT_CAMERA }, 196 { ApiWindowType::TYPE_WALLPAPER, WindowType::WINDOW_TYPE_WALLPAPER }, 197 { ApiWindowType::TYPE_DESKTOP, WindowType::WINDOW_TYPE_DESKTOP }, 198 { ApiWindowType::TYPE_LAUNCHER_RECENT, WindowType::WINDOW_TYPE_LAUNCHER_RECENT }, 199 { ApiWindowType::TYPE_LAUNCHER_DOCK, WindowType::WINDOW_TYPE_LAUNCHER_DOCK }, 200 { ApiWindowType::TYPE_VOICE_INTERACTION, WindowType::WINDOW_TYPE_VOICE_INTERACTION }, 201 { ApiWindowType::TYPE_POINTER, WindowType::WINDOW_TYPE_POINTER }, 202 { ApiWindowType::TYPE_SCREENSHOT, WindowType::WINDOW_TYPE_SCREENSHOT }, 203 { ApiWindowType::TYPE_SYSTEM_TOAST, WindowType::WINDOW_TYPE_SYSTEM_TOAST }, 204 { ApiWindowType::TYPE_DIVIDER, WindowType::WINDOW_TYPE_DOCK_SLICE }, 205 { ApiWindowType::TYPE_GLOBAL_SEARCH, WindowType::WINDOW_TYPE_GLOBAL_SEARCH }, 206 }; 207 208 enum class ApiWindowMode : uint32_t { 209 UNDEFINED = 1, 210 FULLSCREEN, 211 PRIMARY, 212 SECONDARY, 213 FLOATING, 214 MODE_END = FLOATING 215 }; 216 217 const std::map<ApiWindowMode, WindowMode> CJ_TO_NATIVE_WINDOW_MODE_MAP { 218 {ApiWindowMode::UNDEFINED, WindowMode::WINDOW_MODE_UNDEFINED }, 219 {ApiWindowMode::FULLSCREEN, WindowMode::WINDOW_MODE_FULLSCREEN }, 220 {ApiWindowMode::PRIMARY, WindowMode::WINDOW_MODE_SPLIT_PRIMARY }, 221 {ApiWindowMode::SECONDARY, WindowMode::WINDOW_MODE_SPLIT_SECONDARY }, 222 {ApiWindowMode::FLOATING, WindowMode::WINDOW_MODE_FLOATING }, 223 }; 224 225 const std::map<WindowType, ApiWindowType> CJ_TO_WINDOW_TYPE_MAP { 226 { WindowType::WINDOW_TYPE_APP_SUB_WINDOW, ApiWindowType::TYPE_APP }, 227 { WindowType::WINDOW_TYPE_DIALOG, ApiWindowType::TYPE_DIALOG }, 228 { WindowType::WINDOW_TYPE_SYSTEM_ALARM_WINDOW, ApiWindowType::TYPE_SYSTEM_ALERT }, 229 { WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT, ApiWindowType::TYPE_INPUT_METHOD }, 230 { WindowType::WINDOW_TYPE_STATUS_BAR, ApiWindowType::TYPE_STATUS_BAR }, 231 { WindowType::WINDOW_TYPE_PANEL, ApiWindowType::TYPE_PANEL }, 232 { WindowType::WINDOW_TYPE_KEYGUARD, ApiWindowType::TYPE_KEYGUARD }, 233 { WindowType::WINDOW_TYPE_VOLUME_OVERLAY, ApiWindowType::TYPE_VOLUME_OVERLAY }, 234 { WindowType::WINDOW_TYPE_NAVIGATION_BAR, ApiWindowType::TYPE_NAVIGATION_BAR }, 235 { WindowType::WINDOW_TYPE_FLOAT, ApiWindowType::TYPE_FLOAT }, 236 { WindowType::WINDOW_TYPE_FLOAT_CAMERA, ApiWindowType::TYPE_FLOAT_CAMERA }, 237 { WindowType::WINDOW_TYPE_WALLPAPER, ApiWindowType::TYPE_WALLPAPER }, 238 { WindowType::WINDOW_TYPE_DESKTOP, ApiWindowType::TYPE_DESKTOP }, 239 { WindowType::WINDOW_TYPE_LAUNCHER_RECENT, ApiWindowType::TYPE_LAUNCHER_RECENT }, 240 { WindowType::WINDOW_TYPE_LAUNCHER_DOCK, ApiWindowType::TYPE_LAUNCHER_DOCK }, 241 { WindowType::WINDOW_TYPE_VOICE_INTERACTION, ApiWindowType::TYPE_VOICE_INTERACTION }, 242 { WindowType::WINDOW_TYPE_POINTER, ApiWindowType::TYPE_POINTER }, 243 { WindowType::WINDOW_TYPE_SCREENSHOT, ApiWindowType::TYPE_SCREENSHOT }, 244 { WindowType::WINDOW_TYPE_SYSTEM_TOAST, ApiWindowType::TYPE_SYSTEM_TOAST }, 245 { WindowType::WINDOW_TYPE_DOCK_SLICE, ApiWindowType::TYPE_DIVIDER }, 246 { WindowType::WINDOW_TYPE_GLOBAL_SEARCH, ApiWindowType::TYPE_GLOBAL_SEARCH }, 247 }; 248 249 const std::map<WindowSizeChangeReason, RectChangeReason> CJ_SIZE_CHANGE_REASON { 250 { WindowSizeChangeReason::UNDEFINED, RectChangeReason::UNDEFINED }, 251 { WindowSizeChangeReason::MAXIMIZE, RectChangeReason::MAXIMIZE }, 252 { WindowSizeChangeReason::RECOVER, RectChangeReason::RECOVER }, 253 { WindowSizeChangeReason::ROTATION, RectChangeReason::UNDEFINED }, 254 { WindowSizeChangeReason::DRAG, RectChangeReason::DRAG }, 255 { WindowSizeChangeReason::DRAG_START, RectChangeReason::DRAG_START }, 256 { WindowSizeChangeReason::DRAG_END, RectChangeReason::DRAG_END }, 257 { WindowSizeChangeReason::RESIZE, RectChangeReason::UNDEFINED }, 258 { WindowSizeChangeReason::MOVE, RectChangeReason::MOVE }, 259 { WindowSizeChangeReason::HIDE, RectChangeReason::UNDEFINED }, 260 { WindowSizeChangeReason::TRANSFORM, RectChangeReason::UNDEFINED }, 261 { WindowSizeChangeReason::CUSTOM_ANIMATION_SHOW, RectChangeReason::UNDEFINED }, 262 { WindowSizeChangeReason::FULL_TO_SPLIT, RectChangeReason::UNDEFINED }, 263 { WindowSizeChangeReason::SPLIT_TO_FULL, RectChangeReason::UNDEFINED }, 264 { WindowSizeChangeReason::FULL_TO_FLOATING, RectChangeReason::UNDEFINED }, 265 { WindowSizeChangeReason::FLOATING_TO_FULL, RectChangeReason::UNDEFINED }, 266 { WindowSizeChangeReason::END, RectChangeReason::UNDEFINED }, 267 }; 268 } 269 } 270 271 #endif 272