1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License. 5e0dac50fSopenharmony_ci * You may obtain a copy of the License at 6e0dac50fSopenharmony_ci * 7e0dac50fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e0dac50fSopenharmony_ci * 9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and 13e0dac50fSopenharmony_ci * limitations under the License. 14e0dac50fSopenharmony_ci */ 15e0dac50fSopenharmony_ci 16e0dac50fSopenharmony_ci#ifndef OHOS_ROSEN_WM_COMMON_H 17e0dac50fSopenharmony_ci#define OHOS_ROSEN_WM_COMMON_H 18e0dac50fSopenharmony_ci 19e0dac50fSopenharmony_ci#include <parcel.h> 20e0dac50fSopenharmony_ci#include <map> 21e0dac50fSopenharmony_ci#include <float.h> 22e0dac50fSopenharmony_ci#include <sstream> 23e0dac50fSopenharmony_ci#include <string> 24e0dac50fSopenharmony_ci#include <vector> 25e0dac50fSopenharmony_ci 26e0dac50fSopenharmony_cinamespace OHOS { 27e0dac50fSopenharmony_cinamespace Rosen { 28e0dac50fSopenharmony_ciusing DisplayId = uint64_t; 29e0dac50fSopenharmony_ci/** 30e0dac50fSopenharmony_ci * @brief Enumerates type of window. 31e0dac50fSopenharmony_ci */ 32e0dac50fSopenharmony_cienum class WindowType : uint32_t { 33e0dac50fSopenharmony_ci APP_WINDOW_BASE = 1, 34e0dac50fSopenharmony_ci APP_MAIN_WINDOW_BASE = APP_WINDOW_BASE, 35e0dac50fSopenharmony_ci WINDOW_TYPE_APP_MAIN_WINDOW = APP_MAIN_WINDOW_BASE, 36e0dac50fSopenharmony_ci APP_MAIN_WINDOW_END, 37e0dac50fSopenharmony_ci 38e0dac50fSopenharmony_ci APP_SUB_WINDOW_BASE = 1000, 39e0dac50fSopenharmony_ci WINDOW_TYPE_MEDIA = APP_SUB_WINDOW_BASE, 40e0dac50fSopenharmony_ci WINDOW_TYPE_APP_SUB_WINDOW, 41e0dac50fSopenharmony_ci WINDOW_TYPE_APP_COMPONENT, 42e0dac50fSopenharmony_ci APP_SUB_WINDOW_END, 43e0dac50fSopenharmony_ci APP_WINDOW_END = APP_SUB_WINDOW_END, 44e0dac50fSopenharmony_ci 45e0dac50fSopenharmony_ci SYSTEM_WINDOW_BASE = 2000, 46e0dac50fSopenharmony_ci BELOW_APP_SYSTEM_WINDOW_BASE = SYSTEM_WINDOW_BASE, 47e0dac50fSopenharmony_ci WINDOW_TYPE_WALLPAPER = SYSTEM_WINDOW_BASE, 48e0dac50fSopenharmony_ci WINDOW_TYPE_DESKTOP, 49e0dac50fSopenharmony_ci BELOW_APP_SYSTEM_WINDOW_END, 50e0dac50fSopenharmony_ci 51e0dac50fSopenharmony_ci ABOVE_APP_SYSTEM_WINDOW_BASE = 2100, 52e0dac50fSopenharmony_ci WINDOW_TYPE_APP_LAUNCHING = ABOVE_APP_SYSTEM_WINDOW_BASE, 53e0dac50fSopenharmony_ci WINDOW_TYPE_DOCK_SLICE, 54e0dac50fSopenharmony_ci WINDOW_TYPE_INCOMING_CALL, 55e0dac50fSopenharmony_ci WINDOW_TYPE_SEARCHING_BAR, 56e0dac50fSopenharmony_ci WINDOW_TYPE_SYSTEM_ALARM_WINDOW, 57e0dac50fSopenharmony_ci WINDOW_TYPE_INPUT_METHOD_FLOAT, 58e0dac50fSopenharmony_ci WINDOW_TYPE_FLOAT, 59e0dac50fSopenharmony_ci WINDOW_TYPE_TOAST, 60e0dac50fSopenharmony_ci WINDOW_TYPE_STATUS_BAR, 61e0dac50fSopenharmony_ci WINDOW_TYPE_PANEL, 62e0dac50fSopenharmony_ci WINDOW_TYPE_KEYGUARD, 63e0dac50fSopenharmony_ci WINDOW_TYPE_VOLUME_OVERLAY, 64e0dac50fSopenharmony_ci WINDOW_TYPE_NAVIGATION_BAR, 65e0dac50fSopenharmony_ci WINDOW_TYPE_DRAGGING_EFFECT, 66e0dac50fSopenharmony_ci WINDOW_TYPE_POINTER, 67e0dac50fSopenharmony_ci WINDOW_TYPE_LAUNCHER_RECENT, 68e0dac50fSopenharmony_ci WINDOW_TYPE_LAUNCHER_DOCK, 69e0dac50fSopenharmony_ci WINDOW_TYPE_BOOT_ANIMATION, 70e0dac50fSopenharmony_ci WINDOW_TYPE_FREEZE_DISPLAY, 71e0dac50fSopenharmony_ci WINDOW_TYPE_VOICE_INTERACTION, 72e0dac50fSopenharmony_ci WINDOW_TYPE_FLOAT_CAMERA, 73e0dac50fSopenharmony_ci WINDOW_TYPE_PLACEHOLDER, 74e0dac50fSopenharmony_ci WINDOW_TYPE_DIALOG, 75e0dac50fSopenharmony_ci WINDOW_TYPE_SCREENSHOT, 76e0dac50fSopenharmony_ci WINDOW_TYPE_INPUT_METHOD_STATUS_BAR, 77e0dac50fSopenharmony_ci WINDOW_TYPE_GLOBAL_SEARCH, 78e0dac50fSopenharmony_ci WINDOW_TYPE_NEGATIVE_SCREEN, 79e0dac50fSopenharmony_ci WINDOW_TYPE_SYSTEM_TOAST, 80e0dac50fSopenharmony_ci WINDOW_TYPE_SYSTEM_FLOAT, 81e0dac50fSopenharmony_ci WINDOW_TYPE_PIP, 82e0dac50fSopenharmony_ci WINDOW_TYPE_THEME_EDITOR, 83e0dac50fSopenharmony_ci WINDOW_TYPE_NAVIGATION_INDICATOR, 84e0dac50fSopenharmony_ci WINDOW_TYPE_HANDWRITE, 85e0dac50fSopenharmony_ci WINDOW_TYPE_SCENE_BOARD, 86e0dac50fSopenharmony_ci WINDOW_TYPE_KEYBOARD_PANEL, 87e0dac50fSopenharmony_ci WINDOW_TYPE_SCB_DEFAULT, 88e0dac50fSopenharmony_ci WINDOW_TYPE_TRANSPARENT_VIEW, 89e0dac50fSopenharmony_ci ABOVE_APP_SYSTEM_WINDOW_END, 90e0dac50fSopenharmony_ci 91e0dac50fSopenharmony_ci SYSTEM_SUB_WINDOW_BASE = 2500, 92e0dac50fSopenharmony_ci WINDOW_TYPE_SYSTEM_SUB_WINDOW = SYSTEM_SUB_WINDOW_BASE, 93e0dac50fSopenharmony_ci SYSTEM_SUB_WINDOW_END, 94e0dac50fSopenharmony_ci 95e0dac50fSopenharmony_ci SYSTEM_WINDOW_END = SYSTEM_SUB_WINDOW_END, 96e0dac50fSopenharmony_ci 97e0dac50fSopenharmony_ci WINDOW_TYPE_UI_EXTENSION = 3000 98e0dac50fSopenharmony_ci}; 99e0dac50fSopenharmony_ci 100e0dac50fSopenharmony_ci/** 101e0dac50fSopenharmony_ci * @struct HookInfo. 102e0dac50fSopenharmony_ci * 103e0dac50fSopenharmony_ci * @brief hook diaplayinfo deepending on the window size. 104e0dac50fSopenharmony_ci */ 105e0dac50fSopenharmony_cistruct HookInfo { 106e0dac50fSopenharmony_ci uint32_t width_; 107e0dac50fSopenharmony_ci uint32_t height_; 108e0dac50fSopenharmony_ci float_t density_; 109e0dac50fSopenharmony_ci uint32_t rotation_; 110e0dac50fSopenharmony_ci bool enableHookRotation_; 111e0dac50fSopenharmony_ci}; 112e0dac50fSopenharmony_ci 113e0dac50fSopenharmony_ci/** 114e0dac50fSopenharmony_ci * @brief Enumerates mode of window. 115e0dac50fSopenharmony_ci */ 116e0dac50fSopenharmony_cienum class WindowMode : uint32_t { 117e0dac50fSopenharmony_ci WINDOW_MODE_UNDEFINED = 0, 118e0dac50fSopenharmony_ci WINDOW_MODE_FULLSCREEN = 1, 119e0dac50fSopenharmony_ci WINDOW_MODE_SPLIT_PRIMARY = 100, 120e0dac50fSopenharmony_ci WINDOW_MODE_SPLIT_SECONDARY, 121e0dac50fSopenharmony_ci WINDOW_MODE_FLOATING, 122e0dac50fSopenharmony_ci WINDOW_MODE_PIP 123e0dac50fSopenharmony_ci}; 124e0dac50fSopenharmony_ci 125e0dac50fSopenharmony_ci/** 126e0dac50fSopenharmony_ci * @brief Enumerates modeType of window. 127e0dac50fSopenharmony_ci */ 128e0dac50fSopenharmony_cienum class WindowModeType : uint8_t { 129e0dac50fSopenharmony_ci WINDOW_MODE_SPLIT_FLOATING = 0, 130e0dac50fSopenharmony_ci WINDOW_MODE_SPLIT = 1, 131e0dac50fSopenharmony_ci WINDOW_MODE_FLOATING = 2, 132e0dac50fSopenharmony_ci WINDOW_MODE_FULLSCREEN = 3, 133e0dac50fSopenharmony_ci WINDOW_MODE_FULLSCREEN_FLOATING = 4, 134e0dac50fSopenharmony_ci WINDOW_MODE_OTHER = 5 135e0dac50fSopenharmony_ci}; 136e0dac50fSopenharmony_ci 137e0dac50fSopenharmony_ci/** 138e0dac50fSopenharmony_ci * @brief Enumerates modal of sub session. 139e0dac50fSopenharmony_ci */ 140e0dac50fSopenharmony_cienum class SubWindowModalType : uint32_t { 141e0dac50fSopenharmony_ci TYPE_UNDEFINED = 0, 142e0dac50fSopenharmony_ci TYPE_NORMAL, 143e0dac50fSopenharmony_ci TYPE_DIALOG, 144e0dac50fSopenharmony_ci TYPE_WINDOW_MODALITY, 145e0dac50fSopenharmony_ci TYPE_TOAST, 146e0dac50fSopenharmony_ci TYPE_APPLICATION_MODALITY, 147e0dac50fSopenharmony_ci}; 148e0dac50fSopenharmony_ci 149e0dac50fSopenharmony_ci/** 150e0dac50fSopenharmony_ci * @brief Enumerates mode supported of window. 151e0dac50fSopenharmony_ci */ 152e0dac50fSopenharmony_cienum WindowModeSupport : uint32_t { 153e0dac50fSopenharmony_ci WINDOW_MODE_SUPPORT_FULLSCREEN = 1 << 0, 154e0dac50fSopenharmony_ci WINDOW_MODE_SUPPORT_FLOATING = 1 << 1, 155e0dac50fSopenharmony_ci WINDOW_MODE_SUPPORT_SPLIT_PRIMARY = 1 << 2, 156e0dac50fSopenharmony_ci WINDOW_MODE_SUPPORT_SPLIT_SECONDARY = 1 << 3, 157e0dac50fSopenharmony_ci WINDOW_MODE_SUPPORT_PIP = 1 << 4, 158e0dac50fSopenharmony_ci WINDOW_MODE_SUPPORT_ALL = WINDOW_MODE_SUPPORT_FULLSCREEN | 159e0dac50fSopenharmony_ci WINDOW_MODE_SUPPORT_SPLIT_PRIMARY | 160e0dac50fSopenharmony_ci WINDOW_MODE_SUPPORT_SPLIT_SECONDARY | 161e0dac50fSopenharmony_ci WINDOW_MODE_SUPPORT_FLOATING | 162e0dac50fSopenharmony_ci WINDOW_MODE_SUPPORT_PIP 163e0dac50fSopenharmony_ci}; 164e0dac50fSopenharmony_ci 165e0dac50fSopenharmony_ci/** 166e0dac50fSopenharmony_ci * @brief Enumerates blur style of window. 167e0dac50fSopenharmony_ci */ 168e0dac50fSopenharmony_cienum class WindowBlurStyle : uint32_t { 169e0dac50fSopenharmony_ci WINDOW_BLUR_OFF = 0, 170e0dac50fSopenharmony_ci WINDOW_BLUR_THIN, 171e0dac50fSopenharmony_ci WINDOW_BLUR_REGULAR, 172e0dac50fSopenharmony_ci WINDOW_BLUR_THICK 173e0dac50fSopenharmony_ci}; 174e0dac50fSopenharmony_ci 175e0dac50fSopenharmony_ci/** 176e0dac50fSopenharmony_ci * @brief Enumerates state of window. 177e0dac50fSopenharmony_ci */ 178e0dac50fSopenharmony_cienum class WindowState : uint32_t { 179e0dac50fSopenharmony_ci STATE_INITIAL, 180e0dac50fSopenharmony_ci STATE_CREATED, 181e0dac50fSopenharmony_ci STATE_SHOWN, 182e0dac50fSopenharmony_ci STATE_HIDDEN, 183e0dac50fSopenharmony_ci STATE_FROZEN, 184e0dac50fSopenharmony_ci STATE_UNFROZEN, 185e0dac50fSopenharmony_ci STATE_DESTROYED, 186e0dac50fSopenharmony_ci STATE_BOTTOM = STATE_DESTROYED, // Add state type after STATE_DESTROYED is not allowed 187e0dac50fSopenharmony_ci}; 188e0dac50fSopenharmony_ci 189e0dac50fSopenharmony_ci/** 190e0dac50fSopenharmony_ci * @brief Enumerates error code of window. 191e0dac50fSopenharmony_ci */ 192e0dac50fSopenharmony_cienum class WMError : int32_t { 193e0dac50fSopenharmony_ci WM_OK = 0, 194e0dac50fSopenharmony_ci WM_DO_NOTHING, 195e0dac50fSopenharmony_ci WM_ERROR_NO_MEM, 196e0dac50fSopenharmony_ci WM_ERROR_DESTROYED_OBJECT, 197e0dac50fSopenharmony_ci WM_ERROR_INVALID_WINDOW, 198e0dac50fSopenharmony_ci WM_ERROR_INVALID_WINDOW_MODE_OR_SIZE, 199e0dac50fSopenharmony_ci WM_ERROR_INVALID_OPERATION, 200e0dac50fSopenharmony_ci WM_ERROR_INVALID_PERMISSION, 201e0dac50fSopenharmony_ci WM_ERROR_NOT_SYSTEM_APP, 202e0dac50fSopenharmony_ci WM_ERROR_NO_REMOTE_ANIMATION, 203e0dac50fSopenharmony_ci WM_ERROR_INVALID_DISPLAY, 204e0dac50fSopenharmony_ci WM_ERROR_INVALID_PARENT, 205e0dac50fSopenharmony_ci WM_ERROR_OPER_FULLSCREEN_FAILED, 206e0dac50fSopenharmony_ci WM_ERROR_REPEAT_OPERATION, 207e0dac50fSopenharmony_ci WM_ERROR_INVALID_SESSION, 208e0dac50fSopenharmony_ci WM_ERROR_INVALID_CALLING, 209e0dac50fSopenharmony_ci WM_ERROR_SYSTEM_ABNORMALLY, 210e0dac50fSopenharmony_ci 211e0dac50fSopenharmony_ci WM_ERROR_DEVICE_NOT_SUPPORT = 801, // the value do not change.It is defined on all system 212e0dac50fSopenharmony_ci 213e0dac50fSopenharmony_ci WM_ERROR_NEED_REPORT_BASE = 1000, // error code > 1000 means need report 214e0dac50fSopenharmony_ci WM_ERROR_NULLPTR, 215e0dac50fSopenharmony_ci WM_ERROR_INVALID_TYPE, 216e0dac50fSopenharmony_ci WM_ERROR_INVALID_PARAM, 217e0dac50fSopenharmony_ci WM_ERROR_SAMGR, 218e0dac50fSopenharmony_ci WM_ERROR_IPC_FAILED, 219e0dac50fSopenharmony_ci WM_ERROR_NEED_REPORT_END, 220e0dac50fSopenharmony_ci WM_ERROR_START_ABILITY_FAILED, 221e0dac50fSopenharmony_ci WM_ERROR_PIP_DESTROY_FAILED, 222e0dac50fSopenharmony_ci WM_ERROR_PIP_STATE_ABNORMALLY, 223e0dac50fSopenharmony_ci WM_ERROR_PIP_CREATE_FAILED, 224e0dac50fSopenharmony_ci WM_ERROR_PIP_INTERNAL_ERROR, 225e0dac50fSopenharmony_ci WM_ERROR_PIP_REPEAT_OPERATION, 226e0dac50fSopenharmony_ci}; 227e0dac50fSopenharmony_ci 228e0dac50fSopenharmony_ci/** 229e0dac50fSopenharmony_ci * @brief Enumerates error code of window only used for js api. 230e0dac50fSopenharmony_ci */ 231e0dac50fSopenharmony_cienum class WmErrorCode : int32_t { 232e0dac50fSopenharmony_ci WM_OK = 0, 233e0dac50fSopenharmony_ci WM_ERROR_NO_PERMISSION = 201, 234e0dac50fSopenharmony_ci WM_ERROR_NOT_SYSTEM_APP = 202, 235e0dac50fSopenharmony_ci WM_ERROR_INVALID_PARAM = 401, 236e0dac50fSopenharmony_ci WM_ERROR_DEVICE_NOT_SUPPORT = 801, 237e0dac50fSopenharmony_ci WM_ERROR_REPEAT_OPERATION = 1300001, 238e0dac50fSopenharmony_ci WM_ERROR_STATE_ABNORMALLY = 1300002, 239e0dac50fSopenharmony_ci WM_ERROR_SYSTEM_ABNORMALLY = 1300003, 240e0dac50fSopenharmony_ci WM_ERROR_INVALID_CALLING = 1300004, 241e0dac50fSopenharmony_ci WM_ERROR_STAGE_ABNORMALLY = 1300005, 242e0dac50fSopenharmony_ci WM_ERROR_CONTEXT_ABNORMALLY = 1300006, 243e0dac50fSopenharmony_ci WM_ERROR_START_ABILITY_FAILED = 1300007, 244e0dac50fSopenharmony_ci WM_ERROR_INVALID_DISPLAY = 1300008, 245e0dac50fSopenharmony_ci WM_ERROR_INVALID_PARENT = 1300009, 246e0dac50fSopenharmony_ci WM_ERROR_OPER_FULLSCREEN_FAILED = 1300010, 247e0dac50fSopenharmony_ci WM_ERROR_PIP_DESTROY_FAILED = 1300011, 248e0dac50fSopenharmony_ci WM_ERROR_PIP_STATE_ABNORMALLY = 1300012, 249e0dac50fSopenharmony_ci WM_ERROR_PIP_CREATE_FAILED = 1300013, 250e0dac50fSopenharmony_ci WM_ERROR_PIP_INTERNAL_ERROR = 1300014, 251e0dac50fSopenharmony_ci WM_ERROR_PIP_REPEAT_OPERATION = 1300015, 252e0dac50fSopenharmony_ci}; 253e0dac50fSopenharmony_ci 254e0dac50fSopenharmony_ci/** 255e0dac50fSopenharmony_ci * @brief Enumerates status of window. 256e0dac50fSopenharmony_ci */ 257e0dac50fSopenharmony_cienum class WindowStatus : uint32_t { 258e0dac50fSopenharmony_ci WINDOW_STATUS_UNDEFINED = 0, 259e0dac50fSopenharmony_ci WINDOW_STATUS_FULLSCREEN = 1, 260e0dac50fSopenharmony_ci WINDOW_STATUS_MAXIMIZE, 261e0dac50fSopenharmony_ci WINDOW_STATUS_MINIMIZE, 262e0dac50fSopenharmony_ci WINDOW_STATUS_FLOATING, 263e0dac50fSopenharmony_ci WINDOW_STATUS_SPLITSCREEN 264e0dac50fSopenharmony_ci}; 265e0dac50fSopenharmony_ci 266e0dac50fSopenharmony_ci/** 267e0dac50fSopenharmony_ci * @brief Enumerates setting flag of systemStatusBar 268e0dac50fSopenharmony_ci */ 269e0dac50fSopenharmony_cienum class SystemBarSettingFlag : uint32_t { 270e0dac50fSopenharmony_ci DEFAULT_SETTING = 0, 271e0dac50fSopenharmony_ci COLOR_SETTING = 1, 272e0dac50fSopenharmony_ci ENABLE_SETTING = 1 << 1, 273e0dac50fSopenharmony_ci ALL_SETTING = COLOR_SETTING | ENABLE_SETTING, 274e0dac50fSopenharmony_ci FOLLOW_SETTING = 1 << 2 275e0dac50fSopenharmony_ci}; 276e0dac50fSopenharmony_ci 277e0dac50fSopenharmony_ciinline SystemBarSettingFlag operator|(SystemBarSettingFlag lhs, SystemBarSettingFlag rhs) 278e0dac50fSopenharmony_ci{ 279e0dac50fSopenharmony_ci using T = std::underlying_type_t<SystemBarSettingFlag>; 280e0dac50fSopenharmony_ci return static_cast<SystemBarSettingFlag>(static_cast<T>(lhs) | static_cast<T>(rhs)); 281e0dac50fSopenharmony_ci} 282e0dac50fSopenharmony_ci 283e0dac50fSopenharmony_ci/** 284e0dac50fSopenharmony_ci * @brief Enumerates flag of multiWindowUIType. 285e0dac50fSopenharmony_ci */ 286e0dac50fSopenharmony_cienum class WindowUIType : uint8_t { 287e0dac50fSopenharmony_ci PHONE_WINDOW = 0, 288e0dac50fSopenharmony_ci PC_WINDOW, 289e0dac50fSopenharmony_ci PAD_WINDOW, 290e0dac50fSopenharmony_ci INVALID_WINDOW 291e0dac50fSopenharmony_ci}; 292e0dac50fSopenharmony_ci 293e0dac50fSopenharmony_ci/** 294e0dac50fSopenharmony_ci * @brief Used to map from WMError to WmErrorCode. 295e0dac50fSopenharmony_ci */ 296e0dac50fSopenharmony_ciextern const std::map<WMError, WmErrorCode> WM_JS_TO_ERROR_CODE_MAP; 297e0dac50fSopenharmony_ci 298e0dac50fSopenharmony_ci/** 299e0dac50fSopenharmony_ci * @brief Enumerates flag of window. 300e0dac50fSopenharmony_ci */ 301e0dac50fSopenharmony_cienum class WindowFlag : uint32_t { 302e0dac50fSopenharmony_ci WINDOW_FLAG_NEED_AVOID = 1, 303e0dac50fSopenharmony_ci WINDOW_FLAG_PARENT_LIMIT = 1 << 1, 304e0dac50fSopenharmony_ci WINDOW_FLAG_SHOW_WHEN_LOCKED = 1 << 2, 305e0dac50fSopenharmony_ci WINDOW_FLAG_FORBID_SPLIT_MOVE = 1 << 3, 306e0dac50fSopenharmony_ci WINDOW_FLAG_WATER_MARK = 1 << 4, 307e0dac50fSopenharmony_ci WINDOW_FLAG_IS_MODAL = 1 << 5, 308e0dac50fSopenharmony_ci WINDOW_FLAG_IS_APPLICATION_MODAL = 1 << 6, 309e0dac50fSopenharmony_ci WINDOW_FLAG_HANDWRITING = 1 << 7, 310e0dac50fSopenharmony_ci WINDOW_FLAG_IS_TOAST = 1 << 8, 311e0dac50fSopenharmony_ci WINDOW_FLAG_END = 1 << 9, 312e0dac50fSopenharmony_ci}; 313e0dac50fSopenharmony_ci 314e0dac50fSopenharmony_ci/** 315e0dac50fSopenharmony_ci * @brief Flag of uiextension window. 316e0dac50fSopenharmony_ci */ 317e0dac50fSopenharmony_ciunion ExtensionWindowFlags { 318e0dac50fSopenharmony_ci uint32_t bitData; 319e0dac50fSopenharmony_ci struct { 320e0dac50fSopenharmony_ci // Each flag should be false default, true when active 321e0dac50fSopenharmony_ci bool hideNonSecureWindowsFlag : 1; 322e0dac50fSopenharmony_ci bool waterMarkFlag : 1; 323e0dac50fSopenharmony_ci bool privacyModeFlag : 1; 324e0dac50fSopenharmony_ci }; 325e0dac50fSopenharmony_ci ExtensionWindowFlags() : bitData(0) {} 326e0dac50fSopenharmony_ci ExtensionWindowFlags(uint32_t bits) : bitData(bits) {} 327e0dac50fSopenharmony_ci ~ExtensionWindowFlags() {} 328e0dac50fSopenharmony_ci void SetAllActive() 329e0dac50fSopenharmony_ci { 330e0dac50fSopenharmony_ci hideNonSecureWindowsFlag = true; 331e0dac50fSopenharmony_ci waterMarkFlag = true; 332e0dac50fSopenharmony_ci privacyModeFlag = true; 333e0dac50fSopenharmony_ci } 334e0dac50fSopenharmony_ci}; 335e0dac50fSopenharmony_ci 336e0dac50fSopenharmony_ci/** 337e0dac50fSopenharmony_ci * @brief Enumerates window size change reason. 338e0dac50fSopenharmony_ci */ 339e0dac50fSopenharmony_cienum class WindowSizeChangeReason : uint32_t { 340e0dac50fSopenharmony_ci UNDEFINED = 0, 341e0dac50fSopenharmony_ci MAXIMIZE, 342e0dac50fSopenharmony_ci RECOVER, 343e0dac50fSopenharmony_ci ROTATION, 344e0dac50fSopenharmony_ci DRAG, 345e0dac50fSopenharmony_ci DRAG_START, 346e0dac50fSopenharmony_ci DRAG_END, 347e0dac50fSopenharmony_ci RESIZE, 348e0dac50fSopenharmony_ci MOVE, 349e0dac50fSopenharmony_ci HIDE, 350e0dac50fSopenharmony_ci TRANSFORM, 351e0dac50fSopenharmony_ci CUSTOM_ANIMATION_SHOW, 352e0dac50fSopenharmony_ci FULL_TO_SPLIT, 353e0dac50fSopenharmony_ci SPLIT_TO_FULL, 354e0dac50fSopenharmony_ci FULL_TO_FLOATING, 355e0dac50fSopenharmony_ci FLOATING_TO_FULL, 356e0dac50fSopenharmony_ci PIP_START, 357e0dac50fSopenharmony_ci PIP_SHOW, 358e0dac50fSopenharmony_ci PIP_AUTO_START, 359e0dac50fSopenharmony_ci PIP_RATIO_CHANGE, 360e0dac50fSopenharmony_ci PIP_RESTORE, 361e0dac50fSopenharmony_ci UPDATE_DPI_SYNC, 362e0dac50fSopenharmony_ci END, 363e0dac50fSopenharmony_ci}; 364e0dac50fSopenharmony_ci 365e0dac50fSopenharmony_ci/** 366e0dac50fSopenharmony_ci * @brief Enumerates layout mode of window. 367e0dac50fSopenharmony_ci */ 368e0dac50fSopenharmony_cienum class WindowLayoutMode : uint32_t { 369e0dac50fSopenharmony_ci BASE = 0, 370e0dac50fSopenharmony_ci CASCADE = BASE, 371e0dac50fSopenharmony_ci TILE = 1, 372e0dac50fSopenharmony_ci END, 373e0dac50fSopenharmony_ci}; 374e0dac50fSopenharmony_ci 375e0dac50fSopenharmony_ci/** 376e0dac50fSopenharmony_ci * @brief Enumerates drag event. 377e0dac50fSopenharmony_ci */ 378e0dac50fSopenharmony_cienum class DragEvent : uint32_t { 379e0dac50fSopenharmony_ci DRAG_EVENT_IN = 1, 380e0dac50fSopenharmony_ci DRAG_EVENT_OUT, 381e0dac50fSopenharmony_ci DRAG_EVENT_MOVE, 382e0dac50fSopenharmony_ci DRAG_EVENT_END, 383e0dac50fSopenharmony_ci}; 384e0dac50fSopenharmony_ci 385e0dac50fSopenharmony_ci/** 386e0dac50fSopenharmony_ci * @brief Enumerates window tag. 387e0dac50fSopenharmony_ci */ 388e0dac50fSopenharmony_cienum class WindowTag : uint32_t { 389e0dac50fSopenharmony_ci MAIN_WINDOW = 0, 390e0dac50fSopenharmony_ci SUB_WINDOW = 1, 391e0dac50fSopenharmony_ci SYSTEM_WINDOW = 2, 392e0dac50fSopenharmony_ci}; 393e0dac50fSopenharmony_ci 394e0dac50fSopenharmony_ci/** 395e0dac50fSopenharmony_ci * @brief Enumerates window session type. 396e0dac50fSopenharmony_ci */ 397e0dac50fSopenharmony_cienum class WindowSessionType : uint32_t { 398e0dac50fSopenharmony_ci SCENE_SESSION = 0, 399e0dac50fSopenharmony_ci EXTENSION_SESSION = 1, 400e0dac50fSopenharmony_ci}; 401e0dac50fSopenharmony_ci 402e0dac50fSopenharmony_ci/** 403e0dac50fSopenharmony_ci * @brief Enumerates window gravity. 404e0dac50fSopenharmony_ci */ 405e0dac50fSopenharmony_cienum class WindowGravity : uint32_t { 406e0dac50fSopenharmony_ci WINDOW_GRAVITY_FLOAT = 0, 407e0dac50fSopenharmony_ci WINDOW_GRAVITY_BOTTOM, 408e0dac50fSopenharmony_ci WINDOW_GRAVITY_DEFAULT, 409e0dac50fSopenharmony_ci}; 410e0dac50fSopenharmony_ci 411e0dac50fSopenharmony_ci/** 412e0dac50fSopenharmony_ci * @brief Enumerates window setuicontent type. 413e0dac50fSopenharmony_ci */ 414e0dac50fSopenharmony_cienum class WindowSetUIContentType : uint32_t { 415e0dac50fSopenharmony_ci DEFAULT, 416e0dac50fSopenharmony_ci RESTORE, 417e0dac50fSopenharmony_ci BY_NAME, 418e0dac50fSopenharmony_ci BY_ABC, 419e0dac50fSopenharmony_ci}; 420e0dac50fSopenharmony_ci 421e0dac50fSopenharmony_ci/** 422e0dac50fSopenharmony_ci * @brief Enumerates restore type. 423e0dac50fSopenharmony_ci */ 424e0dac50fSopenharmony_cienum class BackupAndRestoreType : int32_t { 425e0dac50fSopenharmony_ci NONE = 0, // no backup and restore 426e0dac50fSopenharmony_ci CONTINUATION = 1, // distribute 427e0dac50fSopenharmony_ci APP_RECOVERY = 2, // app recovery 428e0dac50fSopenharmony_ci RESOURCESCHEDULE_RECOVERY = 3, // app is killed due to resource schedule 429e0dac50fSopenharmony_ci}; 430e0dac50fSopenharmony_ci 431e0dac50fSopenharmony_ci/** 432e0dac50fSopenharmony_ci * @brief Enumerates window Style type. 433e0dac50fSopenharmony_ci */ 434e0dac50fSopenharmony_cienum class WindowStyleType : uint8_t { 435e0dac50fSopenharmony_ci WINDOW_STYLE_DEFAULT = 0, 436e0dac50fSopenharmony_ci WINDOW_STYLE_FREE_MULTI_WINDOW = 1, 437e0dac50fSopenharmony_ci}; 438e0dac50fSopenharmony_ci 439e0dac50fSopenharmony_ci/** 440e0dac50fSopenharmony_ci * @brief Disable Gesture Back Type 441e0dac50fSopenharmony_ci */ 442e0dac50fSopenharmony_cienum class GestureBackType : uint8_t { 443e0dac50fSopenharmony_ci GESTURE_SIDE = 0, 444e0dac50fSopenharmony_ci GESTURE_SWIPE_UP = 1, 445e0dac50fSopenharmony_ci GESTURE_ALL = 2, 446e0dac50fSopenharmony_ci}; 447e0dac50fSopenharmony_ci 448e0dac50fSopenharmony_ci/** 449e0dac50fSopenharmony_ci * @struct PointInfo. 450e0dac50fSopenharmony_ci * 451e0dac50fSopenharmony_ci * @brief point Info. 452e0dac50fSopenharmony_ci */ 453e0dac50fSopenharmony_cistruct PointInfo { 454e0dac50fSopenharmony_ci int32_t x; 455e0dac50fSopenharmony_ci int32_t y; 456e0dac50fSopenharmony_ci}; 457e0dac50fSopenharmony_ci 458e0dac50fSopenharmony_ci/** 459e0dac50fSopenharmony_ci * @struct MainWindowInfo. 460e0dac50fSopenharmony_ci * 461e0dac50fSopenharmony_ci * @brief topN main window info. 462e0dac50fSopenharmony_ci */ 463e0dac50fSopenharmony_cistruct MainWindowInfo : public Parcelable { 464e0dac50fSopenharmony_ci virtual bool Marshalling(Parcel& parcel) const override 465e0dac50fSopenharmony_ci { 466e0dac50fSopenharmony_ci if (!parcel.WriteInt32(pid_)) { 467e0dac50fSopenharmony_ci return false; 468e0dac50fSopenharmony_ci } 469e0dac50fSopenharmony_ci 470e0dac50fSopenharmony_ci if (!parcel.WriteString(bundleName_)) { 471e0dac50fSopenharmony_ci return false; 472e0dac50fSopenharmony_ci } 473e0dac50fSopenharmony_ci 474e0dac50fSopenharmony_ci if (!parcel.WriteInt32(persistentId_)) { 475e0dac50fSopenharmony_ci return false; 476e0dac50fSopenharmony_ci } 477e0dac50fSopenharmony_ci 478e0dac50fSopenharmony_ci if (!parcel.WriteInt32(bundleType_)) { 479e0dac50fSopenharmony_ci return false; 480e0dac50fSopenharmony_ci } 481e0dac50fSopenharmony_ci return true; 482e0dac50fSopenharmony_ci } 483e0dac50fSopenharmony_ci 484e0dac50fSopenharmony_ci static MainWindowInfo* Unmarshalling(Parcel& parcel) 485e0dac50fSopenharmony_ci { 486e0dac50fSopenharmony_ci MainWindowInfo* mainWindowInfo = new MainWindowInfo; 487e0dac50fSopenharmony_ci mainWindowInfo->pid_ = parcel.ReadInt32(); 488e0dac50fSopenharmony_ci mainWindowInfo->bundleName_ = parcel.ReadString(); 489e0dac50fSopenharmony_ci mainWindowInfo->persistentId_ = parcel.ReadInt32(); 490e0dac50fSopenharmony_ci mainWindowInfo->bundleType_ = parcel.ReadInt32(); 491e0dac50fSopenharmony_ci return mainWindowInfo; 492e0dac50fSopenharmony_ci } 493e0dac50fSopenharmony_ci 494e0dac50fSopenharmony_ci int32_t pid_ = 0; 495e0dac50fSopenharmony_ci std::string bundleName_ = ""; 496e0dac50fSopenharmony_ci int32_t persistentId_ = 0; 497e0dac50fSopenharmony_ci int32_t bundleType_ = 0; 498e0dac50fSopenharmony_ci}; 499e0dac50fSopenharmony_ci 500e0dac50fSopenharmony_ci/** 501e0dac50fSopenharmony_ci * @struct MainWindowState. 502e0dac50fSopenharmony_ci * 503e0dac50fSopenharmony_ci * @brief main window state info. 504e0dac50fSopenharmony_ci */ 505e0dac50fSopenharmony_cistruct MainWindowState : public Parcelable { 506e0dac50fSopenharmony_ci bool Marshalling(Parcel& parcel) const override 507e0dac50fSopenharmony_ci { 508e0dac50fSopenharmony_ci if (!parcel.WriteInt32(state_)) { 509e0dac50fSopenharmony_ci return false; 510e0dac50fSopenharmony_ci } 511e0dac50fSopenharmony_ci if (!parcel.WriteBool(isVisible_)) { 512e0dac50fSopenharmony_ci return false; 513e0dac50fSopenharmony_ci } 514e0dac50fSopenharmony_ci if (!parcel.WriteBool(isForegroundInteractive_)) { 515e0dac50fSopenharmony_ci return false; 516e0dac50fSopenharmony_ci } 517e0dac50fSopenharmony_ci if (!parcel.WriteBool(isPcOrPadEnableActivation_)) { 518e0dac50fSopenharmony_ci return false; 519e0dac50fSopenharmony_ci } 520e0dac50fSopenharmony_ci return true; 521e0dac50fSopenharmony_ci } 522e0dac50fSopenharmony_ci 523e0dac50fSopenharmony_ci static MainWindowState* Unmarshalling(Parcel& parcel) 524e0dac50fSopenharmony_ci { 525e0dac50fSopenharmony_ci MainWindowState* mainWindowState = new MainWindowState(); 526e0dac50fSopenharmony_ci if (!mainWindowState) { 527e0dac50fSopenharmony_ci return nullptr; 528e0dac50fSopenharmony_ci } 529e0dac50fSopenharmony_ci if (!parcel.ReadInt32(mainWindowState->state_) || 530e0dac50fSopenharmony_ci !parcel.ReadBool(mainWindowState->isVisible_) || 531e0dac50fSopenharmony_ci !parcel.ReadBool(mainWindowState->isForegroundInteractive_) || 532e0dac50fSopenharmony_ci !parcel.ReadBool(mainWindowState->isPcOrPadEnableActivation_)) { 533e0dac50fSopenharmony_ci delete mainWindowState; 534e0dac50fSopenharmony_ci return nullptr; 535e0dac50fSopenharmony_ci } 536e0dac50fSopenharmony_ci return mainWindowState; 537e0dac50fSopenharmony_ci } 538e0dac50fSopenharmony_ci 539e0dac50fSopenharmony_ci int32_t state_ = 0; 540e0dac50fSopenharmony_ci bool isVisible_ = false; 541e0dac50fSopenharmony_ci bool isForegroundInteractive_ = false; 542e0dac50fSopenharmony_ci bool isPcOrPadEnableActivation_ = false; 543e0dac50fSopenharmony_ci}; 544e0dac50fSopenharmony_ci 545e0dac50fSopenharmony_cinamespace { 546e0dac50fSopenharmony_ci constexpr uint32_t SYSTEM_COLOR_WHITE = 0xE5FFFFFF; 547e0dac50fSopenharmony_ci constexpr uint32_t SYSTEM_COLOR_BLACK = 0x66000000; 548e0dac50fSopenharmony_ci constexpr uint32_t INVALID_WINDOW_ID = 0; 549e0dac50fSopenharmony_ci constexpr float UNDEFINED_BRIGHTNESS = -1.0f; 550e0dac50fSopenharmony_ci constexpr float MINIMUM_BRIGHTNESS = 0.0f; 551e0dac50fSopenharmony_ci constexpr float MAXIMUM_BRIGHTNESS = 1.0f; 552e0dac50fSopenharmony_ci constexpr int32_t INVALID_PID = -1; 553e0dac50fSopenharmony_ci constexpr int32_t INVALID_UID = -1; 554e0dac50fSopenharmony_ci constexpr int32_t INVALID_USER_ID = -1; 555e0dac50fSopenharmony_ci constexpr int32_t SYSTEM_USERID = 0; 556e0dac50fSopenharmony_ci constexpr int32_t BASE_USER_RANGE = 200000; 557e0dac50fSopenharmony_ci constexpr int32_t DEFAULT_SCREEN_ID = 0; 558e0dac50fSopenharmony_ci constexpr int32_t FULL_CIRCLE_DEGREE = 360; 559e0dac50fSopenharmony_ci constexpr int32_t ONE_FOURTH_FULL_CIRCLE_DEGREE = 90; 560e0dac50fSopenharmony_ci} 561e0dac50fSopenharmony_ci 562e0dac50fSopenharmony_ciinline int32_t GetUserIdByUid(int32_t uid) 563e0dac50fSopenharmony_ci{ 564e0dac50fSopenharmony_ci return uid / BASE_USER_RANGE; 565e0dac50fSopenharmony_ci} 566e0dac50fSopenharmony_ci 567e0dac50fSopenharmony_ci/** 568e0dac50fSopenharmony_ci * @class Transform 569e0dac50fSopenharmony_ci * 570e0dac50fSopenharmony_ci * @brief parameter of transform and rotate. 571e0dac50fSopenharmony_ci */ 572e0dac50fSopenharmony_ciclass Transform { 573e0dac50fSopenharmony_cipublic: 574e0dac50fSopenharmony_ci Transform() 575e0dac50fSopenharmony_ci : pivotX_(0.5f), pivotY_(0.5f), scaleX_(1.f), scaleY_(1.f), scaleZ_(1.f), rotationX_(0.f), 576e0dac50fSopenharmony_ci rotationY_(0.f), rotationZ_(0.f), translateX_(0.f), translateY_(0.f), translateZ_(0.f) 577e0dac50fSopenharmony_ci {} 578e0dac50fSopenharmony_ci ~Transform() {} 579e0dac50fSopenharmony_ci 580e0dac50fSopenharmony_ci bool operator==(const Transform& right) const 581e0dac50fSopenharmony_ci { 582e0dac50fSopenharmony_ci return NearZero(pivotX_ - right.pivotX_) && 583e0dac50fSopenharmony_ci NearZero(pivotY_ - right.pivotY_) && 584e0dac50fSopenharmony_ci NearZero(scaleX_ - right.scaleX_) && 585e0dac50fSopenharmony_ci NearZero(scaleY_ - right.scaleY_) && 586e0dac50fSopenharmony_ci NearZero(scaleZ_ - right.scaleZ_) && 587e0dac50fSopenharmony_ci NearZero(rotationX_ - right.rotationX_) && 588e0dac50fSopenharmony_ci NearZero(rotationY_ - right.rotationY_) && 589e0dac50fSopenharmony_ci NearZero(rotationZ_ - right.rotationZ_) && 590e0dac50fSopenharmony_ci NearZero(translateX_ - right.translateX_) && 591e0dac50fSopenharmony_ci NearZero(translateY_ - right.translateY_) && 592e0dac50fSopenharmony_ci NearZero(translateZ_ - right.translateZ_); 593e0dac50fSopenharmony_ci } 594e0dac50fSopenharmony_ci 595e0dac50fSopenharmony_ci bool operator!=(const Transform& right) const 596e0dac50fSopenharmony_ci { 597e0dac50fSopenharmony_ci return !(*this == right); 598e0dac50fSopenharmony_ci } 599e0dac50fSopenharmony_ci 600e0dac50fSopenharmony_ci float pivotX_; 601e0dac50fSopenharmony_ci float pivotY_; 602e0dac50fSopenharmony_ci float scaleX_; 603e0dac50fSopenharmony_ci float scaleY_; 604e0dac50fSopenharmony_ci float scaleZ_; 605e0dac50fSopenharmony_ci float rotationX_; 606e0dac50fSopenharmony_ci float rotationY_; 607e0dac50fSopenharmony_ci float rotationZ_; 608e0dac50fSopenharmony_ci float translateX_; 609e0dac50fSopenharmony_ci float translateY_; 610e0dac50fSopenharmony_ci float translateZ_; 611e0dac50fSopenharmony_ci 612e0dac50fSopenharmony_ci static const Transform& Identity() 613e0dac50fSopenharmony_ci { 614e0dac50fSopenharmony_ci static Transform I; 615e0dac50fSopenharmony_ci return I; 616e0dac50fSopenharmony_ci } 617e0dac50fSopenharmony_ci 618e0dac50fSopenharmony_ci bool Marshalling(Parcel& parcel) const 619e0dac50fSopenharmony_ci { 620e0dac50fSopenharmony_ci return parcel.WriteFloat(pivotX_) && parcel.WriteFloat(pivotY_) && 621e0dac50fSopenharmony_ci parcel.WriteFloat(scaleX_) && parcel.WriteFloat(scaleY_) && parcel.WriteFloat(scaleZ_) && 622e0dac50fSopenharmony_ci parcel.WriteFloat(rotationX_) && parcel.WriteFloat(rotationY_) && parcel.WriteFloat(rotationZ_) && 623e0dac50fSopenharmony_ci parcel.WriteFloat(translateX_) && parcel.WriteFloat(translateY_) && parcel.WriteFloat(translateZ_); 624e0dac50fSopenharmony_ci } 625e0dac50fSopenharmony_ci 626e0dac50fSopenharmony_ci void Unmarshalling(Parcel& parcel) 627e0dac50fSopenharmony_ci { 628e0dac50fSopenharmony_ci pivotX_ = parcel.ReadFloat(); 629e0dac50fSopenharmony_ci pivotY_ = parcel.ReadFloat(); 630e0dac50fSopenharmony_ci scaleX_ = parcel.ReadFloat(); 631e0dac50fSopenharmony_ci scaleY_ = parcel.ReadFloat(); 632e0dac50fSopenharmony_ci scaleZ_ = parcel.ReadFloat(); 633e0dac50fSopenharmony_ci rotationX_ = parcel.ReadFloat(); 634e0dac50fSopenharmony_ci rotationY_ = parcel.ReadFloat(); 635e0dac50fSopenharmony_ci rotationZ_ = parcel.ReadFloat(); 636e0dac50fSopenharmony_ci translateX_ = parcel.ReadFloat(); 637e0dac50fSopenharmony_ci translateY_ = parcel.ReadFloat(); 638e0dac50fSopenharmony_ci translateZ_ = parcel.ReadFloat(); 639e0dac50fSopenharmony_ci } 640e0dac50fSopenharmony_ciprivate: 641e0dac50fSopenharmony_ci static inline bool NearZero(float val) 642e0dac50fSopenharmony_ci { 643e0dac50fSopenharmony_ci return val < 0.001f && val > -0.001f; 644e0dac50fSopenharmony_ci } 645e0dac50fSopenharmony_ci}; 646e0dac50fSopenharmony_ci 647e0dac50fSopenharmony_ci/** 648e0dac50fSopenharmony_ci * @struct SystemBarProperty 649e0dac50fSopenharmony_ci * 650e0dac50fSopenharmony_ci * @brief Property of system bar 651e0dac50fSopenharmony_ci */ 652e0dac50fSopenharmony_cistruct SystemBarProperty { 653e0dac50fSopenharmony_ci bool enable_; 654e0dac50fSopenharmony_ci uint32_t backgroundColor_; 655e0dac50fSopenharmony_ci uint32_t contentColor_; 656e0dac50fSopenharmony_ci bool enableAnimation_; 657e0dac50fSopenharmony_ci SystemBarSettingFlag settingFlag_; 658e0dac50fSopenharmony_ci SystemBarProperty() : enable_(true), backgroundColor_(SYSTEM_COLOR_BLACK), contentColor_(SYSTEM_COLOR_WHITE), 659e0dac50fSopenharmony_ci enableAnimation_(false), settingFlag_(SystemBarSettingFlag::DEFAULT_SETTING) {} 660e0dac50fSopenharmony_ci SystemBarProperty(bool enable, uint32_t background, uint32_t content) 661e0dac50fSopenharmony_ci : enable_(enable), backgroundColor_(background), contentColor_(content), enableAnimation_(false), 662e0dac50fSopenharmony_ci settingFlag_(SystemBarSettingFlag::DEFAULT_SETTING) {} 663e0dac50fSopenharmony_ci SystemBarProperty(bool enable, uint32_t background, uint32_t content, bool enableAnimation) 664e0dac50fSopenharmony_ci : enable_(enable), backgroundColor_(background), contentColor_(content), enableAnimation_(enableAnimation), 665e0dac50fSopenharmony_ci settingFlag_(SystemBarSettingFlag::DEFAULT_SETTING) {} 666e0dac50fSopenharmony_ci SystemBarProperty(bool enable, uint32_t background, uint32_t content, 667e0dac50fSopenharmony_ci bool enableAnimation, SystemBarSettingFlag settingFlag) 668e0dac50fSopenharmony_ci : enable_(enable), backgroundColor_(background), contentColor_(content), enableAnimation_(enableAnimation), 669e0dac50fSopenharmony_ci settingFlag_(settingFlag) {} 670e0dac50fSopenharmony_ci bool operator == (const SystemBarProperty& a) const 671e0dac50fSopenharmony_ci { 672e0dac50fSopenharmony_ci return (enable_ == a.enable_ && backgroundColor_ == a.backgroundColor_ && contentColor_ == a.contentColor_ && 673e0dac50fSopenharmony_ci enableAnimation_ == a.enableAnimation_); 674e0dac50fSopenharmony_ci } 675e0dac50fSopenharmony_ci}; 676e0dac50fSopenharmony_ci 677e0dac50fSopenharmony_ci/** 678e0dac50fSopenharmony_ci * @struct SystemBarPropertyFlag 679e0dac50fSopenharmony_ci * 680e0dac50fSopenharmony_ci * @brief Flag of system bar 681e0dac50fSopenharmony_ci */ 682e0dac50fSopenharmony_cistruct SystemBarPropertyFlag { 683e0dac50fSopenharmony_ci bool enableFlag = false; 684e0dac50fSopenharmony_ci bool backgroundColorFlag = false; 685e0dac50fSopenharmony_ci bool contentColorFlag = false; 686e0dac50fSopenharmony_ci bool enableAnimationFlag = false; 687e0dac50fSopenharmony_ci}; 688e0dac50fSopenharmony_ci 689e0dac50fSopenharmony_ci/** 690e0dac50fSopenharmony_ci * @struct Rect 691e0dac50fSopenharmony_ci * 692e0dac50fSopenharmony_ci * @brief Window Rect 693e0dac50fSopenharmony_ci */ 694e0dac50fSopenharmony_cistruct Rect { 695e0dac50fSopenharmony_ci int32_t posX_; 696e0dac50fSopenharmony_ci int32_t posY_; 697e0dac50fSopenharmony_ci uint32_t width_; 698e0dac50fSopenharmony_ci uint32_t height_; 699e0dac50fSopenharmony_ci 700e0dac50fSopenharmony_ci bool operator==(const Rect& a) const 701e0dac50fSopenharmony_ci { 702e0dac50fSopenharmony_ci return (posX_ == a.posX_ && posY_ == a.posY_ && width_ == a.width_ && height_ == a.height_); 703e0dac50fSopenharmony_ci } 704e0dac50fSopenharmony_ci 705e0dac50fSopenharmony_ci bool operator!=(const Rect& a) const 706e0dac50fSopenharmony_ci { 707e0dac50fSopenharmony_ci return !this->operator==(a); 708e0dac50fSopenharmony_ci } 709e0dac50fSopenharmony_ci 710e0dac50fSopenharmony_ci bool IsUninitializedRect() const 711e0dac50fSopenharmony_ci { 712e0dac50fSopenharmony_ci return (posX_ == 0 && posY_ == 0 && width_ == 0 && height_ == 0); 713e0dac50fSopenharmony_ci } 714e0dac50fSopenharmony_ci 715e0dac50fSopenharmony_ci bool IsInsideOf(const Rect& a) const 716e0dac50fSopenharmony_ci { 717e0dac50fSopenharmony_ci return (posX_ >= a.posX_ && posY_ >= a.posY_ && 718e0dac50fSopenharmony_ci posX_ + width_ <= a.posX_ + a.width_ && posY_ + height_ <= a.posY_ + a.height_); 719e0dac50fSopenharmony_ci } 720e0dac50fSopenharmony_ci 721e0dac50fSopenharmony_ci inline std::string ToString() const 722e0dac50fSopenharmony_ci { 723e0dac50fSopenharmony_ci std::stringstream ss; 724e0dac50fSopenharmony_ci ss << "[" << posX_ << " " << posY_ << " " << width_ << " " << height_ << "]"; 725e0dac50fSopenharmony_ci return ss.str(); 726e0dac50fSopenharmony_ci } 727e0dac50fSopenharmony_ci}; 728e0dac50fSopenharmony_ci 729e0dac50fSopenharmony_ci/** 730e0dac50fSopenharmony_ci * @brief UIExtension usage 731e0dac50fSopenharmony_ci */ 732e0dac50fSopenharmony_cienum class UIExtensionUsage : uint32_t { 733e0dac50fSopenharmony_ci MODAL = 0, 734e0dac50fSopenharmony_ci EMBEDDED, 735e0dac50fSopenharmony_ci CONSTRAINED_EMBEDDED, 736e0dac50fSopenharmony_ci UIEXTENSION_USAGE_END 737e0dac50fSopenharmony_ci}; 738e0dac50fSopenharmony_ci 739e0dac50fSopenharmony_ci/** 740e0dac50fSopenharmony_ci * @brief UIExtension info for event 741e0dac50fSopenharmony_ci */ 742e0dac50fSopenharmony_cistruct ExtensionWindowEventInfo { 743e0dac50fSopenharmony_ci int32_t persistentId = 0; 744e0dac50fSopenharmony_ci int32_t pid = -1; 745e0dac50fSopenharmony_ci Rect windowRect {0, 0, 0, 0}; 746e0dac50fSopenharmony_ci}; 747e0dac50fSopenharmony_ci 748e0dac50fSopenharmony_ci/** 749e0dac50fSopenharmony_ci * @brief UIExtension info from ability 750e0dac50fSopenharmony_ci */ 751e0dac50fSopenharmony_cistruct ExtensionWindowAbilityInfo { 752e0dac50fSopenharmony_ci int32_t persistentId { 0 }; 753e0dac50fSopenharmony_ci int32_t parentId { 0 }; 754e0dac50fSopenharmony_ci UIExtensionUsage usage { UIExtensionUsage::UIEXTENSION_USAGE_END }; 755e0dac50fSopenharmony_ci}; 756e0dac50fSopenharmony_ci 757e0dac50fSopenharmony_ci/** 758e0dac50fSopenharmony_ci * @struct KeyboardPanelInfo 759e0dac50fSopenharmony_ci * 760e0dac50fSopenharmony_ci * @brief Info of keyboard panel 761e0dac50fSopenharmony_ci */ 762e0dac50fSopenharmony_cistruct KeyboardPanelInfo : public Parcelable { 763e0dac50fSopenharmony_ci Rect rect_ = {0, 0, 0, 0}; 764e0dac50fSopenharmony_ci WindowGravity gravity_ = WindowGravity::WINDOW_GRAVITY_BOTTOM; 765e0dac50fSopenharmony_ci bool isShowing_ = false; 766e0dac50fSopenharmony_ci 767e0dac50fSopenharmony_ci bool Marshalling(Parcel& parcel) const 768e0dac50fSopenharmony_ci { 769e0dac50fSopenharmony_ci return parcel.WriteInt32(rect_.posX_) && parcel.WriteInt32(rect_.posY_) && 770e0dac50fSopenharmony_ci parcel.WriteUint32(rect_.width_) && parcel.WriteUint32(rect_.height_) && 771e0dac50fSopenharmony_ci parcel.WriteUint32(static_cast<uint32_t>(gravity_)) && 772e0dac50fSopenharmony_ci parcel.WriteBool(isShowing_); 773e0dac50fSopenharmony_ci } 774e0dac50fSopenharmony_ci 775e0dac50fSopenharmony_ci static KeyboardPanelInfo* Unmarshalling(Parcel& parcel) 776e0dac50fSopenharmony_ci { 777e0dac50fSopenharmony_ci KeyboardPanelInfo* keyboardPanelInfo = new(std::nothrow)KeyboardPanelInfo; 778e0dac50fSopenharmony_ci if (keyboardPanelInfo == nullptr) { 779e0dac50fSopenharmony_ci return nullptr; 780e0dac50fSopenharmony_ci } 781e0dac50fSopenharmony_ci bool res = parcel.ReadInt32(keyboardPanelInfo->rect_.posX_) && 782e0dac50fSopenharmony_ci parcel.ReadInt32(keyboardPanelInfo->rect_.posY_) && parcel.ReadUint32(keyboardPanelInfo->rect_.width_) && 783e0dac50fSopenharmony_ci parcel.ReadUint32(keyboardPanelInfo->rect_.height_); 784e0dac50fSopenharmony_ci if (!res) { 785e0dac50fSopenharmony_ci delete keyboardPanelInfo; 786e0dac50fSopenharmony_ci return nullptr; 787e0dac50fSopenharmony_ci } 788e0dac50fSopenharmony_ci keyboardPanelInfo->gravity_ = static_cast<WindowGravity>(parcel.ReadUint32()); 789e0dac50fSopenharmony_ci keyboardPanelInfo->isShowing_ = parcel.ReadBool(); 790e0dac50fSopenharmony_ci 791e0dac50fSopenharmony_ci return keyboardPanelInfo; 792e0dac50fSopenharmony_ci } 793e0dac50fSopenharmony_ci}; 794e0dac50fSopenharmony_ci 795e0dac50fSopenharmony_ci/** 796e0dac50fSopenharmony_ci * @brief Enumerates avoid area type. 797e0dac50fSopenharmony_ci */ 798e0dac50fSopenharmony_cienum class AvoidAreaType : uint32_t { 799e0dac50fSopenharmony_ci TYPE_SYSTEM, // area of SystemUI 800e0dac50fSopenharmony_ci TYPE_CUTOUT, // cutout of screen 801e0dac50fSopenharmony_ci TYPE_SYSTEM_GESTURE, // area for system gesture 802e0dac50fSopenharmony_ci TYPE_KEYBOARD, // area for soft input keyboard 803e0dac50fSopenharmony_ci TYPE_NAVIGATION_INDICATOR, // area for navigation indicator 804e0dac50fSopenharmony_ci}; 805e0dac50fSopenharmony_ci 806e0dac50fSopenharmony_ci/** 807e0dac50fSopenharmony_ci * @brief Enumerates occupied area type. 808e0dac50fSopenharmony_ci */ 809e0dac50fSopenharmony_cienum class OccupiedAreaType : uint32_t { 810e0dac50fSopenharmony_ci TYPE_INPUT, // area of input window 811e0dac50fSopenharmony_ci}; 812e0dac50fSopenharmony_ci 813e0dac50fSopenharmony_ci/** 814e0dac50fSopenharmony_ci * @brief Enumerates color space. 815e0dac50fSopenharmony_ci */ 816e0dac50fSopenharmony_cienum class ColorSpace : uint32_t { 817e0dac50fSopenharmony_ci COLOR_SPACE_DEFAULT = 0, // Default color space. 818e0dac50fSopenharmony_ci COLOR_SPACE_WIDE_GAMUT, // Wide gamut color space. The specific wide color gamut depends on the screen. 819e0dac50fSopenharmony_ci}; 820e0dac50fSopenharmony_ci 821e0dac50fSopenharmony_ci/** 822e0dac50fSopenharmony_ci * @brief Enumerates window animation. 823e0dac50fSopenharmony_ci */ 824e0dac50fSopenharmony_cienum class WindowAnimation : uint32_t { 825e0dac50fSopenharmony_ci NONE, 826e0dac50fSopenharmony_ci DEFAULT, 827e0dac50fSopenharmony_ci INPUTE, 828e0dac50fSopenharmony_ci CUSTOM, 829e0dac50fSopenharmony_ci}; 830e0dac50fSopenharmony_ci 831e0dac50fSopenharmony_ci/** 832e0dac50fSopenharmony_ci * @brief Enumerates window maximize mode. 833e0dac50fSopenharmony_ci */ 834e0dac50fSopenharmony_cienum class MaximizeMode : uint32_t { 835e0dac50fSopenharmony_ci MODE_AVOID_SYSTEM_BAR, 836e0dac50fSopenharmony_ci MODE_FULL_FILL, 837e0dac50fSopenharmony_ci MODE_RECOVER, 838e0dac50fSopenharmony_ci MODE_END, 839e0dac50fSopenharmony_ci}; 840e0dac50fSopenharmony_ci 841e0dac50fSopenharmony_ci/** 842e0dac50fSopenharmony_ci * @class AvoidArea 843e0dac50fSopenharmony_ci * 844e0dac50fSopenharmony_ci * @brief Area needed to avoid. 845e0dac50fSopenharmony_ci */ 846e0dac50fSopenharmony_ciclass AvoidArea : public Parcelable { 847e0dac50fSopenharmony_cipublic: 848e0dac50fSopenharmony_ci Rect topRect_ { 0, 0, 0, 0 }; 849e0dac50fSopenharmony_ci Rect leftRect_ { 0, 0, 0, 0 }; 850e0dac50fSopenharmony_ci Rect rightRect_ { 0, 0, 0, 0 }; 851e0dac50fSopenharmony_ci Rect bottomRect_ { 0, 0, 0, 0 }; 852e0dac50fSopenharmony_ci 853e0dac50fSopenharmony_ci bool operator==(const AvoidArea& a) const 854e0dac50fSopenharmony_ci { 855e0dac50fSopenharmony_ci return (leftRect_ == a.leftRect_ && topRect_ == a.topRect_ && 856e0dac50fSopenharmony_ci rightRect_ == a.rightRect_ && bottomRect_ == a.bottomRect_); 857e0dac50fSopenharmony_ci } 858e0dac50fSopenharmony_ci 859e0dac50fSopenharmony_ci bool operator!=(const AvoidArea& a) const 860e0dac50fSopenharmony_ci { 861e0dac50fSopenharmony_ci return !this->operator==(a); 862e0dac50fSopenharmony_ci } 863e0dac50fSopenharmony_ci 864e0dac50fSopenharmony_ci bool isEmptyAvoidArea() const 865e0dac50fSopenharmony_ci { 866e0dac50fSopenharmony_ci return topRect_.IsUninitializedRect() && leftRect_.IsUninitializedRect() && 867e0dac50fSopenharmony_ci rightRect_.IsUninitializedRect() && bottomRect_.IsUninitializedRect(); 868e0dac50fSopenharmony_ci } 869e0dac50fSopenharmony_ci 870e0dac50fSopenharmony_ci static inline bool WriteParcel(Parcel& parcel, const Rect& rect) 871e0dac50fSopenharmony_ci { 872e0dac50fSopenharmony_ci return parcel.WriteInt32(rect.posX_) && parcel.WriteInt32(rect.posY_) && 873e0dac50fSopenharmony_ci parcel.WriteUint32(rect.width_) && parcel.WriteUint32(rect.height_); 874e0dac50fSopenharmony_ci } 875e0dac50fSopenharmony_ci 876e0dac50fSopenharmony_ci static inline bool ReadParcel(Parcel& parcel, Rect& rect) 877e0dac50fSopenharmony_ci { 878e0dac50fSopenharmony_ci return parcel.ReadInt32(rect.posX_) && parcel.ReadInt32(rect.posY_) && 879e0dac50fSopenharmony_ci parcel.ReadUint32(rect.width_) && parcel.ReadUint32(rect.height_); 880e0dac50fSopenharmony_ci } 881e0dac50fSopenharmony_ci 882e0dac50fSopenharmony_ci virtual bool Marshalling(Parcel& parcel) const override 883e0dac50fSopenharmony_ci { 884e0dac50fSopenharmony_ci return (WriteParcel(parcel, leftRect_) && WriteParcel(parcel, topRect_) && 885e0dac50fSopenharmony_ci WriteParcel(parcel, rightRect_) && WriteParcel(parcel, bottomRect_)); 886e0dac50fSopenharmony_ci } 887e0dac50fSopenharmony_ci 888e0dac50fSopenharmony_ci static AvoidArea* Unmarshalling(Parcel& parcel) 889e0dac50fSopenharmony_ci { 890e0dac50fSopenharmony_ci AvoidArea *avoidArea = new(std::nothrow) AvoidArea(); 891e0dac50fSopenharmony_ci if (avoidArea == nullptr) { 892e0dac50fSopenharmony_ci return nullptr; 893e0dac50fSopenharmony_ci } 894e0dac50fSopenharmony_ci if (ReadParcel(parcel, avoidArea->leftRect_) && ReadParcel(parcel, avoidArea->topRect_) && 895e0dac50fSopenharmony_ci ReadParcel(parcel, avoidArea->rightRect_) && ReadParcel(parcel, avoidArea->bottomRect_)) { 896e0dac50fSopenharmony_ci return avoidArea; 897e0dac50fSopenharmony_ci } 898e0dac50fSopenharmony_ci delete avoidArea; 899e0dac50fSopenharmony_ci return nullptr; 900e0dac50fSopenharmony_ci } 901e0dac50fSopenharmony_ci 902e0dac50fSopenharmony_ci std::string ToString() const 903e0dac50fSopenharmony_ci { 904e0dac50fSopenharmony_ci std::stringstream ss; 905e0dac50fSopenharmony_ci if (isEmptyAvoidArea()) { 906e0dac50fSopenharmony_ci ss << "empty"; 907e0dac50fSopenharmony_ci return ss.str(); 908e0dac50fSopenharmony_ci } 909e0dac50fSopenharmony_ci if (!topRect_.IsUninitializedRect()) { 910e0dac50fSopenharmony_ci ss << "top " << topRect_.ToString() << " "; 911e0dac50fSopenharmony_ci } 912e0dac50fSopenharmony_ci if (!bottomRect_.IsUninitializedRect()) { 913e0dac50fSopenharmony_ci ss << "bottom " << bottomRect_.ToString() << " "; 914e0dac50fSopenharmony_ci } 915e0dac50fSopenharmony_ci if (!leftRect_.IsUninitializedRect()) { 916e0dac50fSopenharmony_ci ss << "left " << leftRect_.ToString() << " "; 917e0dac50fSopenharmony_ci } 918e0dac50fSopenharmony_ci if (!rightRect_.IsUninitializedRect()) { 919e0dac50fSopenharmony_ci ss << "right " << rightRect_.ToString() << " "; 920e0dac50fSopenharmony_ci } 921e0dac50fSopenharmony_ci return ss.str(); 922e0dac50fSopenharmony_ci } 923e0dac50fSopenharmony_ci}; 924e0dac50fSopenharmony_ci 925e0dac50fSopenharmony_ci/** 926e0dac50fSopenharmony_ci * @brief Enumerates window update type. 927e0dac50fSopenharmony_ci */ 928e0dac50fSopenharmony_cienum class WindowUpdateType : int32_t { 929e0dac50fSopenharmony_ci WINDOW_UPDATE_ADDED = 1, 930e0dac50fSopenharmony_ci WINDOW_UPDATE_REMOVED, 931e0dac50fSopenharmony_ci WINDOW_UPDATE_FOCUSED, 932e0dac50fSopenharmony_ci WINDOW_UPDATE_BOUNDS, 933e0dac50fSopenharmony_ci WINDOW_UPDATE_ACTIVE, 934e0dac50fSopenharmony_ci WINDOW_UPDATE_PROPERTY, 935e0dac50fSopenharmony_ci WINDOW_UPDATE_ALL, 936e0dac50fSopenharmony_ci}; 937e0dac50fSopenharmony_ci 938e0dac50fSopenharmony_ci/** 939e0dac50fSopenharmony_ci * @brief Enumerates picture in picture window state. 940e0dac50fSopenharmony_ci */ 941e0dac50fSopenharmony_cienum class PiPWindowState : uint32_t { 942e0dac50fSopenharmony_ci STATE_UNDEFINED = 0, 943e0dac50fSopenharmony_ci STATE_STARTING = 1, 944e0dac50fSopenharmony_ci STATE_STARTED = 2, 945e0dac50fSopenharmony_ci STATE_STOPPING = 3, 946e0dac50fSopenharmony_ci STATE_STOPPED = 4, 947e0dac50fSopenharmony_ci STATE_RESTORING = 5, 948e0dac50fSopenharmony_ci}; 949e0dac50fSopenharmony_ci 950e0dac50fSopenharmony_ci/** 951e0dac50fSopenharmony_ci * @brief Enumerates picture in picture template type. 952e0dac50fSopenharmony_ci */ 953e0dac50fSopenharmony_cienum class PiPTemplateType : uint32_t { 954e0dac50fSopenharmony_ci VIDEO_PLAY = 0, 955e0dac50fSopenharmony_ci VIDEO_CALL = 1, 956e0dac50fSopenharmony_ci VIDEO_MEETING = 2, 957e0dac50fSopenharmony_ci VIDEO_LIVE = 3, 958e0dac50fSopenharmony_ci END, 959e0dac50fSopenharmony_ci}; 960e0dac50fSopenharmony_ci 961e0dac50fSopenharmony_ci/** 962e0dac50fSopenharmony_ci * @brief Enumerates picture in picture control group. 963e0dac50fSopenharmony_ci */ 964e0dac50fSopenharmony_cienum class PiPControlGroup : uint32_t { 965e0dac50fSopenharmony_ci VIDEO_PLAY_START = 100, 966e0dac50fSopenharmony_ci VIDEO_PREVIOUS_NEXT = 101, 967e0dac50fSopenharmony_ci FAST_FORWARD_BACKWARD = 102, 968e0dac50fSopenharmony_ci VIDEO_PLAY_END, 969e0dac50fSopenharmony_ci 970e0dac50fSopenharmony_ci VIDEO_CALL_START = 200, 971e0dac50fSopenharmony_ci VIDEO_CALL_MICROPHONE_SWITCH = 201, 972e0dac50fSopenharmony_ci VIDEO_CALL_HANG_UP_BUTTON = 202, 973e0dac50fSopenharmony_ci VIDEO_CALL_CAMERA_SWITCH = 203, 974e0dac50fSopenharmony_ci VIDEO_CALL_MUTE_SWITCH = 204, 975e0dac50fSopenharmony_ci VIDEO_CALL_END, 976e0dac50fSopenharmony_ci 977e0dac50fSopenharmony_ci VIDEO_MEETING_START = 300, 978e0dac50fSopenharmony_ci VIDEO_MEETING_HANG_UP_BUTTON = 301, 979e0dac50fSopenharmony_ci VIDEO_MEETING_CAMERA_SWITCH = 302, 980e0dac50fSopenharmony_ci VIDEO_MEETING_MUTE_SWITCH = 303, 981e0dac50fSopenharmony_ci VIDEO_MEETING_MICROPHONE_SWITCH = 304, 982e0dac50fSopenharmony_ci VIDEO_MEETING_END, 983e0dac50fSopenharmony_ci 984e0dac50fSopenharmony_ci VIDEO_LIVE_START = 400, 985e0dac50fSopenharmony_ci VIDEO_PLAY_PAUSE = 401, 986e0dac50fSopenharmony_ci VIDEO_LIVE_MUTE_SWITCH = 402, 987e0dac50fSopenharmony_ci VIDEO_LIVE_END, 988e0dac50fSopenharmony_ci END, 989e0dac50fSopenharmony_ci}; 990e0dac50fSopenharmony_ci 991e0dac50fSopenharmony_ci/** 992e0dac50fSopenharmony_ci * @brief Enumerates picture in picture state. 993e0dac50fSopenharmony_ci */ 994e0dac50fSopenharmony_cienum class PiPState : int32_t { 995e0dac50fSopenharmony_ci ABOUT_TO_START = 1, 996e0dac50fSopenharmony_ci STARTED = 2, 997e0dac50fSopenharmony_ci ABOUT_TO_STOP = 3, 998e0dac50fSopenharmony_ci STOPPED = 4, 999e0dac50fSopenharmony_ci ABOUT_TO_RESTORE = 5, 1000e0dac50fSopenharmony_ci ERROR = 6, 1001e0dac50fSopenharmony_ci}; 1002e0dac50fSopenharmony_ci 1003e0dac50fSopenharmony_ci/** 1004e0dac50fSopenharmony_ci * @brief Enumerates picture in picture control status. 1005e0dac50fSopenharmony_ci */ 1006e0dac50fSopenharmony_cienum class PiPControlStatus : int32_t { 1007e0dac50fSopenharmony_ci PLAY = 1, 1008e0dac50fSopenharmony_ci PAUSE = 0, 1009e0dac50fSopenharmony_ci OPEN = 1, 1010e0dac50fSopenharmony_ci CLOSE = 0, 1011e0dac50fSopenharmony_ci ENABLED = -2, 1012e0dac50fSopenharmony_ci DISABLED = -3, 1013e0dac50fSopenharmony_ci}; 1014e0dac50fSopenharmony_ci 1015e0dac50fSopenharmony_ci/** 1016e0dac50fSopenharmony_ci * @brief Enumerates picture in picture control type. 1017e0dac50fSopenharmony_ci */ 1018e0dac50fSopenharmony_cienum class PiPControlType : uint32_t { 1019e0dac50fSopenharmony_ci VIDEO_PLAY_PAUSE = 0, 1020e0dac50fSopenharmony_ci VIDEO_PREVIOUS = 1, 1021e0dac50fSopenharmony_ci VIDEO_NEXT = 2, 1022e0dac50fSopenharmony_ci FAST_FORWARD = 3, 1023e0dac50fSopenharmony_ci FAST_BACKWARD = 4, 1024e0dac50fSopenharmony_ci HANG_UP_BUTTON = 5, 1025e0dac50fSopenharmony_ci MICROPHONE_SWITCH = 6, 1026e0dac50fSopenharmony_ci CAMERA_SWITCH = 7, 1027e0dac50fSopenharmony_ci MUTE_SWITCH = 8, 1028e0dac50fSopenharmony_ci END, 1029e0dac50fSopenharmony_ci}; 1030e0dac50fSopenharmony_ci 1031e0dac50fSopenharmony_cistruct PiPControlStatusInfo { 1032e0dac50fSopenharmony_ci PiPControlType controlType; 1033e0dac50fSopenharmony_ci PiPControlStatus status; 1034e0dac50fSopenharmony_ci}; 1035e0dac50fSopenharmony_ci 1036e0dac50fSopenharmony_cistruct PiPControlEnableInfo { 1037e0dac50fSopenharmony_ci PiPControlType controlType; 1038e0dac50fSopenharmony_ci PiPControlStatus enabled; 1039e0dac50fSopenharmony_ci}; 1040e0dac50fSopenharmony_ci 1041e0dac50fSopenharmony_cistruct PiPTemplateInfo { 1042e0dac50fSopenharmony_ci uint32_t pipTemplateType; 1043e0dac50fSopenharmony_ci uint32_t priority; 1044e0dac50fSopenharmony_ci std::vector<uint32_t> controlGroup; 1045e0dac50fSopenharmony_ci std::vector<PiPControlStatusInfo> pipControlStatusInfoList; 1046e0dac50fSopenharmony_ci std::vector<PiPControlEnableInfo> pipControlEnableInfoList; 1047e0dac50fSopenharmony_ci}; 1048e0dac50fSopenharmony_ci 1049e0dac50fSopenharmony_ciusing OnCallback = std::function<void(int64_t, int64_t)>; 1050e0dac50fSopenharmony_ci 1051e0dac50fSopenharmony_ci/** 1052e0dac50fSopenharmony_ci * @struct VsyncCallback 1053e0dac50fSopenharmony_ci * 1054e0dac50fSopenharmony_ci * @brief Vsync callback 1055e0dac50fSopenharmony_ci */ 1056e0dac50fSopenharmony_cistruct VsyncCallback { 1057e0dac50fSopenharmony_ci OnCallback onCallback; 1058e0dac50fSopenharmony_ci}; 1059e0dac50fSopenharmony_ci 1060e0dac50fSopenharmony_cistruct WindowLimits { 1061e0dac50fSopenharmony_ci uint32_t maxWidth_ = INT32_MAX; 1062e0dac50fSopenharmony_ci uint32_t maxHeight_ = INT32_MAX; 1063e0dac50fSopenharmony_ci uint32_t minWidth_ = 1; 1064e0dac50fSopenharmony_ci uint32_t minHeight_ = 1; 1065e0dac50fSopenharmony_ci float maxRatio_ = FLT_MAX; 1066e0dac50fSopenharmony_ci float minRatio_ = 0.0f; 1067e0dac50fSopenharmony_ci float vpRatio_ = 1.0f; 1068e0dac50fSopenharmony_ci 1069e0dac50fSopenharmony_ci WindowLimits() {} 1070e0dac50fSopenharmony_ci WindowLimits(uint32_t maxWidth, uint32_t maxHeight, uint32_t minWidth, uint32_t minHeight, float maxRatio, 1071e0dac50fSopenharmony_ci float minRatio) : maxWidth_(maxWidth), maxHeight_(maxHeight), minWidth_(minWidth), minHeight_(minHeight), 1072e0dac50fSopenharmony_ci maxRatio_(maxRatio), minRatio_(minRatio) {} 1073e0dac50fSopenharmony_ci WindowLimits(uint32_t maxWidth, uint32_t maxHeight, uint32_t minWidth, uint32_t minHeight, float maxRatio, 1074e0dac50fSopenharmony_ci float minRatio, float vpRatio) : maxWidth_(maxWidth), maxHeight_(maxHeight), minWidth_(minWidth), 1075e0dac50fSopenharmony_ci minHeight_(minHeight), maxRatio_(maxRatio), minRatio_(minRatio), vpRatio_(vpRatio) {} 1076e0dac50fSopenharmony_ci 1077e0dac50fSopenharmony_ci bool IsEmpty() const 1078e0dac50fSopenharmony_ci { 1079e0dac50fSopenharmony_ci return (maxWidth_ == 0 || minWidth_ == 0 || maxHeight_ == 0 || minHeight_ == 0); 1080e0dac50fSopenharmony_ci } 1081e0dac50fSopenharmony_ci}; 1082e0dac50fSopenharmony_ci 1083e0dac50fSopenharmony_ci/** 1084e0dac50fSopenharmony_ci * @struct TitleButtonRect 1085e0dac50fSopenharmony_ci * 1086e0dac50fSopenharmony_ci * @brief An area of title buttons relative to the upper right corner of the window. 1087e0dac50fSopenharmony_ci */ 1088e0dac50fSopenharmony_cistruct TitleButtonRect { 1089e0dac50fSopenharmony_ci int32_t posX_; 1090e0dac50fSopenharmony_ci int32_t posY_; 1091e0dac50fSopenharmony_ci uint32_t width_; 1092e0dac50fSopenharmony_ci uint32_t height_; 1093e0dac50fSopenharmony_ci 1094e0dac50fSopenharmony_ci bool operator==(const TitleButtonRect& a) const 1095e0dac50fSopenharmony_ci { 1096e0dac50fSopenharmony_ci return (posX_ == a.posX_ && posY_ == a.posY_ && width_ == a.width_ && height_ == a.height_); 1097e0dac50fSopenharmony_ci } 1098e0dac50fSopenharmony_ci 1099e0dac50fSopenharmony_ci bool operator!=(const TitleButtonRect& a) const 1100e0dac50fSopenharmony_ci { 1101e0dac50fSopenharmony_ci return !this->operator==(a); 1102e0dac50fSopenharmony_ci } 1103e0dac50fSopenharmony_ci 1104e0dac50fSopenharmony_ci bool IsUninitializedRect() const 1105e0dac50fSopenharmony_ci { 1106e0dac50fSopenharmony_ci return (posX_ == 0 && posY_ == 0 && width_ == 0 && height_ == 0); 1107e0dac50fSopenharmony_ci } 1108e0dac50fSopenharmony_ci 1109e0dac50fSopenharmony_ci bool IsInsideOf(const TitleButtonRect& a) const 1110e0dac50fSopenharmony_ci { 1111e0dac50fSopenharmony_ci return (posX_ >= a.posX_ && posY_ >= a.posY_ && 1112e0dac50fSopenharmony_ci posX_ + width_ <= a.posX_ + a.width_ && posY_ + height_ <= a.posY_ + a.height_); 1113e0dac50fSopenharmony_ci } 1114e0dac50fSopenharmony_ci}; 1115e0dac50fSopenharmony_ci 1116e0dac50fSopenharmony_ci/* 1117e0dac50fSopenharmony_ci * Config of keyboard animation 1118e0dac50fSopenharmony_ci */ 1119e0dac50fSopenharmony_ciclass KeyboardAnimationCurve : public Parcelable { 1120e0dac50fSopenharmony_cipublic: 1121e0dac50fSopenharmony_ci KeyboardAnimationCurve() = default; 1122e0dac50fSopenharmony_ci KeyboardAnimationCurve(const std::string& curveType, const std::vector<float>& curveParams, uint32_t duration) 1123e0dac50fSopenharmony_ci : curveType_(curveType), duration_(duration) 1124e0dac50fSopenharmony_ci { 1125e0dac50fSopenharmony_ci curveParams_.assign(curveParams.begin(), curveParams.end()); 1126e0dac50fSopenharmony_ci } 1127e0dac50fSopenharmony_ci 1128e0dac50fSopenharmony_ci virtual bool Marshalling(Parcel& parcel) const override 1129e0dac50fSopenharmony_ci { 1130e0dac50fSopenharmony_ci if (!parcel.WriteString(curveType_)) { 1131e0dac50fSopenharmony_ci return false; 1132e0dac50fSopenharmony_ci } 1133e0dac50fSopenharmony_ci 1134e0dac50fSopenharmony_ci auto paramSize = curveParams_.size(); 1135e0dac50fSopenharmony_ci if (paramSize == 4) { // 4: param size 1136e0dac50fSopenharmony_ci if (!parcel.WriteUint32(static_cast<uint32_t>(paramSize))) { 1137e0dac50fSopenharmony_ci return false; 1138e0dac50fSopenharmony_ci } 1139e0dac50fSopenharmony_ci for (auto& param : curveParams_) { 1140e0dac50fSopenharmony_ci if (!parcel.WriteFloat(param)) { 1141e0dac50fSopenharmony_ci return false; 1142e0dac50fSopenharmony_ci } 1143e0dac50fSopenharmony_ci } 1144e0dac50fSopenharmony_ci } else { 1145e0dac50fSopenharmony_ci if (!parcel.WriteUint32(0)) { 1146e0dac50fSopenharmony_ci return false; 1147e0dac50fSopenharmony_ci } 1148e0dac50fSopenharmony_ci } 1149e0dac50fSopenharmony_ci 1150e0dac50fSopenharmony_ci if (!parcel.WriteUint32(duration_)) { 1151e0dac50fSopenharmony_ci return false; 1152e0dac50fSopenharmony_ci } 1153e0dac50fSopenharmony_ci return true; 1154e0dac50fSopenharmony_ci } 1155e0dac50fSopenharmony_ci 1156e0dac50fSopenharmony_ci static KeyboardAnimationCurve* Unmarshalling(Parcel& parcel) 1157e0dac50fSopenharmony_ci { 1158e0dac50fSopenharmony_ci KeyboardAnimationCurve* config = new KeyboardAnimationCurve; 1159e0dac50fSopenharmony_ci uint32_t paramSize = 0; 1160e0dac50fSopenharmony_ci if (!parcel.ReadString(config->curveType_) || !parcel.ReadUint32(paramSize)) { 1161e0dac50fSopenharmony_ci delete config; 1162e0dac50fSopenharmony_ci return nullptr; 1163e0dac50fSopenharmony_ci } 1164e0dac50fSopenharmony_ci 1165e0dac50fSopenharmony_ci if (paramSize == 4) { // 4: paramSize 1166e0dac50fSopenharmony_ci for (uint32_t i = 0; i < paramSize; i++) { 1167e0dac50fSopenharmony_ci float param = 0.0f; 1168e0dac50fSopenharmony_ci if (!parcel.ReadFloat(param)) { 1169e0dac50fSopenharmony_ci delete config; 1170e0dac50fSopenharmony_ci return nullptr; 1171e0dac50fSopenharmony_ci } else { 1172e0dac50fSopenharmony_ci config->curveParams_.push_back(param); 1173e0dac50fSopenharmony_ci } 1174e0dac50fSopenharmony_ci } 1175e0dac50fSopenharmony_ci } 1176e0dac50fSopenharmony_ci 1177e0dac50fSopenharmony_ci if (!parcel.ReadUint32(config->duration_)) { 1178e0dac50fSopenharmony_ci delete config; 1179e0dac50fSopenharmony_ci return nullptr; 1180e0dac50fSopenharmony_ci } 1181e0dac50fSopenharmony_ci return config; 1182e0dac50fSopenharmony_ci } 1183e0dac50fSopenharmony_ci 1184e0dac50fSopenharmony_ci std::string curveType_ = ""; 1185e0dac50fSopenharmony_ci std::vector<float> curveParams_ = {}; 1186e0dac50fSopenharmony_ci uint32_t duration_ = 0; 1187e0dac50fSopenharmony_ci}; 1188e0dac50fSopenharmony_ci 1189e0dac50fSopenharmony_cistruct KeyboardAnimationConfig { 1190e0dac50fSopenharmony_ci KeyboardAnimationCurve curveIn; 1191e0dac50fSopenharmony_ci KeyboardAnimationCurve curveOut; 1192e0dac50fSopenharmony_ci}; 1193e0dac50fSopenharmony_ci 1194e0dac50fSopenharmony_cienum class CaseType { 1195e0dac50fSopenharmony_ci CASE_WINDOW_MANAGER = 0, 1196e0dac50fSopenharmony_ci CASE_WINDOW, 1197e0dac50fSopenharmony_ci CASE_STAGE 1198e0dac50fSopenharmony_ci}; 1199e0dac50fSopenharmony_ci 1200e0dac50fSopenharmony_cienum class MaximizePresentation { 1201e0dac50fSopenharmony_ci FOLLOW_APP_IMMERSIVE_SETTING = 0, // follow app set imersiveStateEnable 1202e0dac50fSopenharmony_ci EXIT_IMMERSIVE = 1, // imersiveStateEnable will be set as false 1203e0dac50fSopenharmony_ci ENTER_IMMERSIVE = 2, // imersiveStateEnable will be set as true 1204e0dac50fSopenharmony_ci // imersiveStateEnable will be set as true, titleHoverShowEnabled and dockHoverShowEnabled will be set as false 1205e0dac50fSopenharmony_ci ENTER_IMMERSIVE_DISABLE_TITLE_AND_DOCK_HOVER = 3, 1206e0dac50fSopenharmony_ci}; 1207e0dac50fSopenharmony_ci 1208e0dac50fSopenharmony_cienum ForceHideState : uint32_t { 1209e0dac50fSopenharmony_ci NOT_HIDDEN = 0, 1210e0dac50fSopenharmony_ci HIDDEN_WHEN_FOCUSED, 1211e0dac50fSopenharmony_ci HIDDEN_WHEN_UNFOCUSED 1212e0dac50fSopenharmony_ci}; 1213e0dac50fSopenharmony_ci 1214e0dac50fSopenharmony_cienum class ExtensionWindowAttribute : int32_t { 1215e0dac50fSopenharmony_ci SYSTEM_WINDOW = 0, 1216e0dac50fSopenharmony_ci SUB_WINDOW = 1, 1217e0dac50fSopenharmony_ci UNKNOWN = 2 1218e0dac50fSopenharmony_ci}; 1219e0dac50fSopenharmony_ci 1220e0dac50fSopenharmony_cistruct SystemWindowOptions { 1221e0dac50fSopenharmony_ci int32_t windowType = -1; 1222e0dac50fSopenharmony_ci}; 1223e0dac50fSopenharmony_ci 1224e0dac50fSopenharmony_cienum class ModalityType : uint8_t { 1225e0dac50fSopenharmony_ci WINDOW_MODALITY, 1226e0dac50fSopenharmony_ci APPLICATION_MODALITY, 1227e0dac50fSopenharmony_ci}; 1228e0dac50fSopenharmony_ci 1229e0dac50fSopenharmony_cistruct SubWindowOptions { 1230e0dac50fSopenharmony_ci std::string title; 1231e0dac50fSopenharmony_ci bool decorEnabled = false; 1232e0dac50fSopenharmony_ci bool isModal = false; 1233e0dac50fSopenharmony_ci bool isTopmost = false; 1234e0dac50fSopenharmony_ci ModalityType modalityType = ModalityType::WINDOW_MODALITY; 1235e0dac50fSopenharmony_ci}; 1236e0dac50fSopenharmony_ci 1237e0dac50fSopenharmony_cistruct ExtensionWindowConfig { 1238e0dac50fSopenharmony_ci std::string windowName; 1239e0dac50fSopenharmony_ci ExtensionWindowAttribute windowAttribute = ExtensionWindowAttribute::UNKNOWN; 1240e0dac50fSopenharmony_ci Rect windowRect; 1241e0dac50fSopenharmony_ci SubWindowOptions subWindowOptions; 1242e0dac50fSopenharmony_ci SystemWindowOptions systemWindowOptions; 1243e0dac50fSopenharmony_ci}; 1244e0dac50fSopenharmony_ci 1245e0dac50fSopenharmony_ci/** 1246e0dac50fSopenharmony_ci * @class KeyboardLayoutParams 1247e0dac50fSopenharmony_ci * 1248e0dac50fSopenharmony_ci * @brief Keyboard need adjust layout 1249e0dac50fSopenharmony_ci */ 1250e0dac50fSopenharmony_ciclass KeyboardLayoutParams : public Parcelable { 1251e0dac50fSopenharmony_cipublic: 1252e0dac50fSopenharmony_ci WindowGravity gravity_ = WindowGravity::WINDOW_GRAVITY_BOTTOM; 1253e0dac50fSopenharmony_ci Rect LandscapeKeyboardRect_ { 0, 0, 0, 0 }; 1254e0dac50fSopenharmony_ci Rect PortraitKeyboardRect_ { 0, 0, 0, 0 }; 1255e0dac50fSopenharmony_ci Rect LandscapePanelRect_ { 0, 0, 0, 0 }; 1256e0dac50fSopenharmony_ci Rect PortraitPanelRect_ { 0, 0, 0, 0 }; 1257e0dac50fSopenharmony_ci 1258e0dac50fSopenharmony_ci bool operator==(const KeyboardLayoutParams& params) const 1259e0dac50fSopenharmony_ci { 1260e0dac50fSopenharmony_ci return (gravity_ == params.gravity_ && LandscapeKeyboardRect_ == params.LandscapeKeyboardRect_ && 1261e0dac50fSopenharmony_ci PortraitKeyboardRect_ == params.PortraitKeyboardRect_ && 1262e0dac50fSopenharmony_ci LandscapePanelRect_ == params.LandscapePanelRect_ && 1263e0dac50fSopenharmony_ci PortraitPanelRect_ == params.PortraitPanelRect_); 1264e0dac50fSopenharmony_ci } 1265e0dac50fSopenharmony_ci 1266e0dac50fSopenharmony_ci bool operator!=(const KeyboardLayoutParams& params) const 1267e0dac50fSopenharmony_ci { 1268e0dac50fSopenharmony_ci return !this->operator==(params); 1269e0dac50fSopenharmony_ci } 1270e0dac50fSopenharmony_ci 1271e0dac50fSopenharmony_ci bool isEmpty() const 1272e0dac50fSopenharmony_ci { 1273e0dac50fSopenharmony_ci return LandscapeKeyboardRect_.IsUninitializedRect() && PortraitKeyboardRect_.IsUninitializedRect() && 1274e0dac50fSopenharmony_ci LandscapePanelRect_.IsUninitializedRect() && PortraitPanelRect_.IsUninitializedRect(); 1275e0dac50fSopenharmony_ci } 1276e0dac50fSopenharmony_ci 1277e0dac50fSopenharmony_ci static inline bool WriteParcel(Parcel& parcel, const Rect& rect) 1278e0dac50fSopenharmony_ci { 1279e0dac50fSopenharmony_ci return parcel.WriteInt32(rect.posX_) && parcel.WriteInt32(rect.posY_) && 1280e0dac50fSopenharmony_ci parcel.WriteUint32(rect.width_) && parcel.WriteUint32(rect.height_); 1281e0dac50fSopenharmony_ci } 1282e0dac50fSopenharmony_ci 1283e0dac50fSopenharmony_ci static inline bool ReadParcel(Parcel& parcel, Rect& rect) 1284e0dac50fSopenharmony_ci { 1285e0dac50fSopenharmony_ci return parcel.ReadInt32(rect.posX_) && parcel.ReadInt32(rect.posY_) && 1286e0dac50fSopenharmony_ci parcel.ReadUint32(rect.width_) && parcel.ReadUint32(rect.height_); 1287e0dac50fSopenharmony_ci } 1288e0dac50fSopenharmony_ci 1289e0dac50fSopenharmony_ci virtual bool Marshalling(Parcel& parcel) const override 1290e0dac50fSopenharmony_ci { 1291e0dac50fSopenharmony_ci return (parcel.WriteUint32(static_cast<uint32_t>(gravity_)) && 1292e0dac50fSopenharmony_ci WriteParcel(parcel, LandscapeKeyboardRect_) && 1293e0dac50fSopenharmony_ci WriteParcel(parcel, PortraitKeyboardRect_) && 1294e0dac50fSopenharmony_ci WriteParcel(parcel, LandscapePanelRect_) && 1295e0dac50fSopenharmony_ci WriteParcel(parcel, PortraitPanelRect_)); 1296e0dac50fSopenharmony_ci } 1297e0dac50fSopenharmony_ci 1298e0dac50fSopenharmony_ci static KeyboardLayoutParams* Unmarshalling(Parcel& parcel) 1299e0dac50fSopenharmony_ci { 1300e0dac50fSopenharmony_ci KeyboardLayoutParams *params = new(std::nothrow) KeyboardLayoutParams(); 1301e0dac50fSopenharmony_ci if (params == nullptr) { 1302e0dac50fSopenharmony_ci return nullptr; 1303e0dac50fSopenharmony_ci } 1304e0dac50fSopenharmony_ci params->gravity_ = static_cast<WindowGravity>(parcel.ReadUint32()); 1305e0dac50fSopenharmony_ci if (ReadParcel(parcel, params->LandscapeKeyboardRect_) && 1306e0dac50fSopenharmony_ci ReadParcel(parcel, params->PortraitKeyboardRect_) && 1307e0dac50fSopenharmony_ci ReadParcel(parcel, params->LandscapePanelRect_) && 1308e0dac50fSopenharmony_ci ReadParcel(parcel, params->PortraitPanelRect_)) { 1309e0dac50fSopenharmony_ci return params; 1310e0dac50fSopenharmony_ci } 1311e0dac50fSopenharmony_ci delete params; 1312e0dac50fSopenharmony_ci return nullptr; 1313e0dac50fSopenharmony_ci } 1314e0dac50fSopenharmony_ci}; 1315e0dac50fSopenharmony_ci} 1316e0dac50fSopenharmony_ci} 1317e0dac50fSopenharmony_ci#endif // OHOS_ROSEN_WM_COMMON_H 1318