1 /* 2 * Copyright (c) 2021-2023 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_ROSEN_WINDOW_IMPL_H 17 #define OHOS_ROSEN_WINDOW_IMPL_H 18 19 #include <map> 20 #include <string> 21 22 #include <ability_context.h> 23 #include <i_input_event_consumer.h> 24 #include <key_event.h> 25 #include <refbase.h> 26 #include <ui_content.h> 27 #include <ui/rs_surface_node.h> 28 #include <struct_multimodal.h> 29 30 #include "prepare_terminate_callback_stub.h" 31 #include "input_transfer_station.h" 32 #include "vsync_station.h" 33 #include "window.h" 34 #include "window_property.h" 35 #include "window_transition_info.h" 36 #include "wm_common_inner.h" 37 #include "wm_common.h" 38 39 using OHOS::AppExecFwk::DisplayOrientation; 40 41 namespace OHOS { 42 namespace Rosen { 43 namespace { 44 template<typename T1, typename T2, typename Ret> 45 using EnableIfSame = typename std::enable_if<std::is_same_v<T1, T2>, Ret>::type; 46 } 47 union ColorParam { 48 #if BIG_ENDIANNESS 49 struct { 50 uint8_t alpha; 51 uint8_t red; 52 uint8_t green; 53 uint8_t blue; 54 } argb; 55 #else 56 struct { 57 uint8_t blue; 58 uint8_t green; 59 uint8_t red; 60 uint8_t alpha; 61 } argb; 62 #endif 63 uint32_t value; 64 }; 65 66 const std::map<OHOS::AppExecFwk::DisplayOrientation, Orientation> ABILITY_TO_WMS_ORIENTATION_MAP { 67 {OHOS::AppExecFwk::DisplayOrientation::UNSPECIFIED, Orientation::UNSPECIFIED}, 68 {OHOS::AppExecFwk::DisplayOrientation::LANDSCAPE, Orientation::HORIZONTAL}, 69 {OHOS::AppExecFwk::DisplayOrientation::PORTRAIT, Orientation::VERTICAL}, 70 {OHOS::AppExecFwk::DisplayOrientation::FOLLOWRECENT, Orientation::LOCKED}, 71 {OHOS::AppExecFwk::DisplayOrientation::LANDSCAPE_INVERTED, Orientation::REVERSE_HORIZONTAL}, 72 {OHOS::AppExecFwk::DisplayOrientation::PORTRAIT_INVERTED, Orientation::REVERSE_VERTICAL}, 73 {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION, Orientation::SENSOR}, 74 {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION_LANDSCAPE, Orientation::SENSOR_HORIZONTAL}, 75 {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION_PORTRAIT, Orientation::SENSOR_VERTICAL}, 76 {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION_RESTRICTED, Orientation::AUTO_ROTATION_RESTRICTED}, 77 {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED, 78 Orientation::AUTO_ROTATION_LANDSCAPE_RESTRICTED}, 79 {OHOS::AppExecFwk::DisplayOrientation::AUTO_ROTATION_PORTRAIT_RESTRICTED, 80 Orientation::AUTO_ROTATION_PORTRAIT_RESTRICTED}, 81 {OHOS::AppExecFwk::DisplayOrientation::LOCKED, Orientation::LOCKED}, 82 }; 83 84 class WindowImpl : public Window, AAFwk::PrepareTerminateCallbackStub { 85 #define CALL_LIFECYCLE_LISTENER(windowLifecycleCb, listeners) \ 86 do { \ 87 for (auto& listener : (listeners)) { \ 88 if (listener != nullptr) { \ 89 listener->windowLifecycleCb(); \ 90 } \ 91 } \ 92 } while (0) 93 94 #define CALL_LIFECYCLE_LISTENER_WITH_PARAM(windowLifecycleCb, listeners, param) \ 95 do { \ 96 for (auto& listener : (listeners)) { \ 97 if (listener != nullptr) { \ 98 listener->windowLifecycleCb(param); \ 99 } \ 100 } \ 101 } while (0) 102 103 #define CALL_UI_CONTENT(uiContentCb) \ 104 do { \ 105 std::lock_guard<std::recursive_mutex> lock(mutex_); \ 106 if (uiContent_ != nullptr) { \ 107 uiContent_->uiContentCb(); \ 108 } \ 109 } while (0) 110 111 public: 112 explicit WindowImpl(const sptr<WindowOption>& option); 113 ~WindowImpl(); 114 115 static sptr<Window> Find(const std::string& id); 116 static sptr<Window> GetTopWindowWithContext(const std::shared_ptr<AbilityRuntime::Context>& context = nullptr); 117 static sptr<Window> GetTopWindowWithId(uint32_t mainWinId); 118 static sptr<Window> GetWindowWithId(uint32_t winId); 119 static std::vector<sptr<Window>> GetSubWindow(uint32_t parantId); 120 static void UpdateConfigurationForAll(const std::shared_ptr<AppExecFwk::Configuration>& configuration); 121 virtual std::shared_ptr<RSSurfaceNode> GetSurfaceNode() const override; 122 virtual Rect GetRect() const override; 123 virtual Rect GetRequestRect() const override; 124 virtual WindowType GetType() const override; 125 virtual WindowMode GetMode() const override; 126 virtual float GetAlpha() const override; 127 virtual WindowState GetWindowState() const override; 128 virtual WMError SetFocusable(bool isFocusable) override; 129 virtual bool GetFocusable() const override; 130 virtual WMError SetTouchable(bool isTouchable) override; 131 virtual bool GetTouchable() const override; 132 virtual const std::string& GetWindowName() const override; 133 virtual uint32_t GetWindowId() const override; 134 uint64_t GetDisplayId() const override; 135 virtual uint32_t GetWindowFlags() const override; 136 uint32_t GetRequestWindowModeSupportType() const override; 137 bool IsMainHandlerAvailable() const override; GetNativeDestroyCallback()138 inline NotifyNativeWinDestroyFunc GetNativeDestroyCallback() 139 { 140 return notifyNativefunc_; 141 } 142 virtual SystemBarProperty GetSystemBarPropertyByType(WindowType type) const override; 143 virtual bool IsFullScreen() const override; 144 virtual bool IsLayoutFullScreen() const override; 145 virtual WMError SetWindowType(WindowType type) override; 146 virtual WMError SetWindowMode(WindowMode mode) override; 147 virtual WMError SetAlpha(float alpha) override; 148 virtual WMError SetTransform(const Transform& trans) override; 149 virtual WMError AddWindowFlag(WindowFlag flag) override; 150 virtual WMError RemoveWindowFlag(WindowFlag flag) override; 151 virtual WMError SetWindowFlags(uint32_t flags) override; 152 virtual WMError SetSystemBarProperty(WindowType type, const SystemBarProperty& property) override; 153 virtual WMError UpdateSystemBarProperty(bool status); 154 virtual WMError SetLayoutFullScreen(bool status) override; 155 virtual WMError SetFullScreen(bool status) override; 156 virtual const Transform& GetTransform() const override; 157 virtual const Transform& GetZoomTransform() const; 158 virtual WMError UpdateSurfaceNodeAfterCustomAnimation(bool isAdd) override; SetWindowState(WindowState state)159 inline void SetWindowState(WindowState state) 160 { 161 state_ = state; 162 } 163 virtual WMError GetAvoidAreaByType(AvoidAreaType type, AvoidArea& avoidArea) override; 164 165 WMError Create(uint32_t parentId, 166 const std::shared_ptr<AbilityRuntime::Context>& context = nullptr); 167 virtual WMError Destroy() override; 168 virtual WMError Show(uint32_t reason = 0, bool withAnimation = false, bool withFocus = true) override; 169 virtual WMError Hide(uint32_t reason = 0, bool withAnimation = false, bool isFromInnerkits = true) override; 170 virtual WMError MoveTo(int32_t x, int32_t y, bool isMoveToGlobal = false) override; 171 virtual WMError Resize(uint32_t width, uint32_t height) override; 172 float GetVirtualPixelRatio() override; 173 virtual WMError SetWindowGravity(WindowGravity gravity, uint32_t percent) override; 174 virtual WMError SetKeepScreenOn(bool keepScreenOn) override; 175 virtual bool IsKeepScreenOn() const override; 176 virtual WMError SetTurnScreenOn(bool turnScreenOn) override; 177 virtual bool IsTurnScreenOn() const override; 178 virtual WMError SetBackgroundColor(const std::string& color) override; 179 virtual WMError SetTransparent(bool isTransparent) override; 180 virtual bool IsTransparent() const override; 181 virtual WMError SetBrightness(float brightness) override; 182 virtual float GetBrightness() const override; 183 virtual WMError SetCallingWindow(uint32_t windowId) override; 184 virtual WMError SetPrivacyMode(bool isPrivacyMode) override; 185 virtual bool IsPrivacyMode() const override; 186 virtual void SetSystemPrivacyMode(bool isSystemPrivacyMode) override; 187 virtual WMError DisableAppWindowDecor() override; 188 virtual WMError BindDialogTarget(sptr<IRemoteObject> targetToken) override; 189 WMError RaiseToAppTop() override; 190 virtual WMError SetAspectRatio(float ratio) override; 191 virtual WMError ResetAspectRatio() override; 192 virtual WMError SetSnapshotSkip(bool isSkip) override; 193 // window effect 194 virtual WMError SetCornerRadius(float cornerRadius) override; 195 virtual WMError SetShadowRadius(float radius) override; 196 virtual WMError SetShadowColor(std::string color) override; 197 virtual WMError SetShadowOffsetX(float offsetX) override; 198 virtual WMError SetShadowOffsetY(float offsetY) override; 199 virtual WMError SetBlur(float radius) override; 200 virtual WMError SetBackdropBlur(float radius) override; 201 virtual WMError SetBackdropBlurStyle(WindowBlurStyle blurStyle) override; 202 203 virtual bool IsDecorEnable() const override; 204 virtual WMError Maximize() override; 205 virtual WMError MaximizeFloating() override; 206 virtual WMError Minimize() override; 207 virtual WMError Recover() override; 208 virtual WMError Close() override; 209 virtual void StartMove() override; 210 virtual WMError SetGlobalMaximizeMode(MaximizeMode mode) override; 211 virtual MaximizeMode GetGlobalMaximizeMode() const override; 212 virtual WMError SetImmersiveModeEnabledState(bool enable) override; 213 virtual bool GetImmersiveModeEnabledState() const override; 214 215 virtual WMError RequestFocus() const override; 216 virtual void SetInputEventConsumer(const std::shared_ptr<IInputEventConsumer>& inputEventConsumer) override; 217 218 virtual WMError RegisterLifeCycleListener(const sptr<IWindowLifeCycle>& listener) override; 219 virtual WMError RegisterWindowChangeListener(const sptr<IWindowChangeListener>& listener) override; 220 virtual WMError UnregisterLifeCycleListener(const sptr<IWindowLifeCycle>& listener) override; 221 virtual WMError UnregisterWindowChangeListener(const sptr<IWindowChangeListener>& listener) override; 222 virtual WMError RegisterAvoidAreaChangeListener(sptr<IAvoidAreaChangedListener>& listener) override; 223 virtual WMError UnregisterAvoidAreaChangeListener(sptr<IAvoidAreaChangedListener>& listener) override; 224 virtual WMError RegisterDragListener(const sptr<IWindowDragListener>& listener) override; 225 virtual WMError UnregisterDragListener(const sptr<IWindowDragListener>& listener) override; 226 virtual WMError RegisterDisplayMoveListener(sptr<IDisplayMoveListener>& listener) override; 227 virtual WMError UnregisterDisplayMoveListener(sptr<IDisplayMoveListener>& listener) override; 228 virtual void RegisterWindowDestroyedListener(const NotifyNativeWinDestroyFunc& func) override; UnregisterWindowDestroyedListener()229 virtual void UnregisterWindowDestroyedListener() override { notifyNativefunc_ = nullptr; } 230 virtual WMError RegisterOccupiedAreaChangeListener(const sptr<IOccupiedAreaChangeListener>& listener) override; 231 virtual WMError UnregisterOccupiedAreaChangeListener(const sptr<IOccupiedAreaChangeListener>& listener) override; 232 virtual WMError RegisterTouchOutsideListener(const sptr<ITouchOutsideListener>& listener) override; 233 virtual WMError UnregisterTouchOutsideListener(const sptr<ITouchOutsideListener>& listener) override; 234 virtual WMError RegisterAnimationTransitionController( 235 const sptr<IAnimationTransitionController>& listener) override; 236 virtual WMError RegisterScreenshotListener(const sptr<IScreenshotListener>& listener) override; 237 virtual WMError UnregisterScreenshotListener(const sptr<IScreenshotListener>& listener) override; 238 virtual WMError RegisterDialogTargetTouchListener(const sptr<IDialogTargetTouchListener>& listener) override; 239 virtual WMError UnregisterDialogTargetTouchListener(const sptr<IDialogTargetTouchListener>& listener) override; 240 virtual void RegisterDialogDeathRecipientListener(const sptr<IDialogDeathRecipientListener>& listener) override; 241 virtual void UnregisterDialogDeathRecipientListener(const sptr<IDialogDeathRecipientListener>& listener) override; 242 virtual void SetAceAbilityHandler(const sptr<IAceAbilityHandler>& handler) override; 243 virtual void SetRequestWindowModeSupportType(uint32_t windowModeSupportType) override; 244 void UpdateRect(const struct Rect& rect, bool decoStatus, WindowSizeChangeReason reason, 245 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr); 246 void ScheduleUpdateRectTask(const Rect& rectToAce, const Rect& lastOriRect, WindowSizeChangeReason reason, 247 const std::shared_ptr<RSTransaction>& rsTransaction, const sptr<class Display>& display); 248 void UpdateMode(WindowMode mode); 249 void UpdateWindowModeSupportType(uint32_t windowModeSupportType); 250 virtual void ConsumeKeyEvent(std::shared_ptr<MMI::KeyEvent>& inputEvent) override; 251 virtual void ConsumePointerEvent(const std::shared_ptr<MMI::PointerEvent>& inputEvent) override; 252 virtual void RequestVsync(const std::shared_ptr<VsyncCallback>& vsyncCallback) override; 253 virtual int64_t GetVSyncPeriod() override; 254 void UpdateFocusStatus(bool focused); 255 virtual bool IsFocused() const override; 256 virtual void UpdateConfiguration(const std::shared_ptr<AppExecFwk::Configuration>& configuration) override; 257 void UpdateAvoidArea(const sptr<AvoidArea>& avoidArea, AvoidAreaType type); 258 void UpdateWindowState(WindowState state); 259 WmErrorCode UpdateSubWindowStateAndNotify(uint32_t parentId); 260 WmErrorCode UpdateWindowStateWhenShow(); 261 WmErrorCode UpdateWindowStateWhenHide(); 262 sptr<WindowProperty> GetWindowProperty(); 263 void UpdateDragEvent(const PointInfo& point, DragEvent event); 264 void UpdateDisplayId(DisplayId from, DisplayId to); 265 void UpdateOccupiedAreaChangeInfo(const sptr<OccupiedAreaChangeInfo>& info, 266 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr); 267 void UpdateActiveStatus(bool isActive); 268 void NotifyTouchOutside(); 269 void NotifyScreenshot(); 270 void NotifyTouchDialogTarget(int32_t posX = 0, int32_t posY = 0) override; 271 void NotifyDestroy(); 272 void NotifyForeground(); 273 void NotifyBackground(); 274 void UpdateZoomTransform(const Transform& trans, bool isDisplayZoomOn); 275 void PerformBack() override; 276 void NotifyForegroundInteractiveStatus(bool interactive); 277 void NotifyMMIServiceOnline(uint32_t winId); 278 virtual bool PreNotifyKeyEvent(const std::shared_ptr<MMI::KeyEvent>& keyEvent) override; 279 virtual WMError NapiSetUIContent(const std::string& contentInfo, napi_env env, napi_value storage, 280 BackupAndRestoreType type, sptr<IRemoteObject> token, AppExecFwk::Ability* ability) override; 281 virtual WMError SetUIContentByName(const std::string& contentInfo, napi_env env, napi_value storage, 282 AppExecFwk::Ability* ability) override; 283 virtual WMError SetUIContentByAbc(const std::string& abcPath, napi_env env, napi_value storage, 284 AppExecFwk::Ability* ability) override; 285 virtual std::string GetContentInfo(BackupAndRestoreType type = BackupAndRestoreType::CONTINUATION) override; 286 WMError SetRestoredRouterStack(const std::string& routerStack) override; 287 virtual const std::shared_ptr<AbilityRuntime::Context> GetContext() const override; 288 virtual Ace::UIContent* GetUIContent() const override; 289 virtual Ace::UIContent* GetUIContentWithId(uint32_t winId) const override; 290 virtual void OnNewWant(const AAFwk::Want& want) override; 291 virtual void SetRequestedOrientation(Orientation) override; 292 virtual Orientation GetRequestedOrientation() override; 293 virtual void SetNeedRemoveWindowInputChannel(bool needRemoveWindowInputChannel) override; 294 virtual WMError SetTouchHotAreas(const std::vector<Rect>& rects) override; 295 virtual void GetRequestedTouchHotAreas(std::vector<Rect>& rects) const override; 296 virtual WMError SetAPPWindowLabel(const std::string& label) override; 297 virtual WMError SetAPPWindowIcon(const std::shared_ptr<Media::PixelMap>& icon) override; 298 299 // colorspace, gamut 300 virtual bool IsSupportWideGamut() override; 301 virtual void SetColorSpace(ColorSpace colorSpace) override; 302 virtual ColorSpace GetColorSpace() override; 303 304 virtual void DumpInfo(const std::vector<std::string>& params, std::vector<std::string>& info) override; 305 virtual std::shared_ptr<Media::PixelMap> Snapshot() override; 306 virtual WMError NotifyMemoryLevel(int32_t level) override; 307 virtual bool IsAllowHaveSystemSubWindow() override; 308 virtual KeyboardAnimationConfig GetKeyboardAnimationConfig() override; 309 void RestoreSplitWindowMode(uint32_t mode); 310 311 virtual void SetNeedDefaultAnimation(bool needDefaultAnimation) override; 312 313 virtual void DoPrepareTerminate() override; 314 void PendingClose(); 315 316 WMError SetTextFieldAvoidInfo(double textFieldPositionY, double textFieldHeight) override; 317 virtual WMError SetSystemBarProperties(const std::map<WindowType, SystemBarProperty>& properties, 318 const std::map<WindowType, SystemBarPropertyFlag>& propertyFlags) override; 319 virtual WMError GetSystemBarProperties(std::map<WindowType, SystemBarProperty>& properties) override; 320 virtual WMError SetSpecificBarProperty(WindowType type, const SystemBarProperty& property) override; 321 /* 322 * Keyboard 323 */ 324 WMError ShowKeyboard(KeyboardViewMode mode) override; 325 326 /* 327 * Gesture Back 328 */ SetGestureBackEnabled(bool enable)329 WMError SetGestureBackEnabled(bool enable) override { return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; } GetGestureBackEnabled(bool & enable)330 WMError GetGestureBackEnabled(bool& enable) override { return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; } 331 332 /* 333 * Window Property 334 */ 335 static void UpdateConfigurationSyncForAll(const std::shared_ptr<AppExecFwk::Configuration>& configuration); 336 void UpdateConfigurationSync(const std::shared_ptr<AppExecFwk::Configuration>& configuration) override; 337 338 private: 339 template<typename T> WMError RegisterListener(std::vector<sptr<T>>& holder, const sptr<T>& listener); 340 template<typename T> WMError UnregisterListener(std::vector<sptr<T>>& holder, const sptr<T>& listener); ClearUselessListeners(std::map<uint32_t,T> & listeners,uint32_t winId)341 template<typename T> void ClearUselessListeners(std::map<uint32_t, T>& listeners, uint32_t winId) 342 { 343 listeners.erase(winId); 344 } ClearUselessListeners(std::unordered_map<uint32_t,T> & listeners,uint32_t winId)345 template<typename T> void ClearUselessListeners(std::unordered_map<uint32_t, T>& listeners, uint32_t winId) 346 { 347 listeners.erase(winId); 348 } 349 template<typename T> EnableIfSame<T, IWindowLifeCycle, std::vector<sptr<IWindowLifeCycle>>> GetListeners(); 350 template<typename T> 351 EnableIfSame<T, IWindowChangeListener, std::vector<sptr<IWindowChangeListener>>> GetListeners(); 352 template<typename T> 353 EnableIfSame<T, IAvoidAreaChangedListener, std::vector<sptr<IAvoidAreaChangedListener>>> GetListeners(); 354 template<typename T> EnableIfSame<T, IDisplayMoveListener, std::vector<sptr<IDisplayMoveListener>>> GetListeners(); 355 template<typename T> EnableIfSame<T, IScreenshotListener, std::vector<sptr<IScreenshotListener>>> GetListeners(); 356 template<typename T> 357 EnableIfSame<T, ITouchOutsideListener, std::vector<sptr<ITouchOutsideListener>>> GetListeners(); 358 template<typename T> 359 EnableIfSame<T, IDialogTargetTouchListener, std::vector<sptr<IDialogTargetTouchListener>>> GetListeners(); 360 template<typename T> EnableIfSame<T, IWindowDragListener, std::vector<sptr<IWindowDragListener>>> GetListeners(); 361 template<typename T> 362 EnableIfSame<T, IOccupiedAreaChangeListener, std::vector<sptr<IOccupiedAreaChangeListener>>> GetListeners(); 363 template<typename T> 364 EnableIfSame<T, IDialogDeathRecipientListener, wptr<IDialogDeathRecipientListener>> GetListener(); 365 366 void NotifyAfterForeground(bool needNotifyListeners = true, bool needNotifyUiContent = true); 367 void NotifyAfterBackground(bool needNotifyListeners = true, bool needNotifyUiContent = true); 368 void NotifyAfterFocused(); 369 void NotifyAfterUnfocused(bool needNotifyUiContent = true); 370 void NotifyAfterResumed(); 371 void NotifyAfterPaused(); 372 void NotifyBeforeDestroy(std::string windowName); 373 void NotifyBeforeSubWindowDestroy(sptr<WindowImpl> window); 374 void NotifyAfterActive(); 375 void NotifyAfterInactive(); 376 void NotifyForegroundFailed(WMError ret); 377 void NotifyBackgroundFailed(WMError ret); 378 bool IsStretchableReason(WindowSizeChangeReason reason); 379 380 void InitWindowProperty(const sptr<WindowOption>& option); 381 void ClearListenersById(uint32_t winId); 382 void NotifySizeChange(Rect rect, WindowSizeChangeReason reason, 383 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr); 384 void NotifyAvoidAreaChange(const sptr<AvoidArea>& avoidArea, AvoidAreaType type); 385 void NotifyDisplayMoveChange(DisplayId from, DisplayId to); 386 void NotifyOccupiedAreaChange(const sptr<OccupiedAreaChangeInfo>& info, 387 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr); 388 void NotifyModeChange(WindowMode mode, bool hasDeco = true); 389 void NotifyDragEvent(const PointInfo& point, DragEvent event); 390 void ResetInputWindow(uint32_t winId); 391 void DestroyDialogWindow(); 392 void DestroyFloatingWindow(); 393 void DestroySubWindow(); 394 void ClearVsyncStation(); 395 void SetDefaultOption(); // for api7 396 bool IsWindowValid() const; 397 static sptr<Window> FindWindowById(uint32_t WinId); 398 void TransferPointerEvent(const std::shared_ptr<MMI::PointerEvent>& pointerEvent); 399 void ConsumeMoveOrDragEvent(const std::shared_ptr<MMI::PointerEvent>& pointerEvent); 400 void ReadyToMoveOrDragWindow(const std::shared_ptr<MMI::PointerEvent>& pointerEvent, 401 const MMI::PointerEvent::PointerItem& pointerItem); 402 void EndMoveOrDragWindow(int32_t posX, int32_t posY, int32_t pointId, int32_t sourceType); 403 void ResetMoveOrDragState(); 404 bool IsPointerEventConsumed(); 405 bool IsPointInDragHotZone(int32_t startPointPosX, int32_t startPointPosY, int32_t sourceType); 406 void AdjustWindowAnimationFlag(bool withAnimation = false); 407 void MapFloatingWindowToAppIfNeeded(); 408 void MapDialogWindowToAppIfNeeded(); 409 WMError UpdateProperty(PropertyChangeAction action); 410 WMError Destroy(bool needNotifyServer, bool needClearListener = true); 411 WMError SetBackgroundColor(uint32_t color); 412 uint32_t GetBackgroundColor() const; 413 void InitAbilityInfo(); 414 std::shared_ptr<AppExecFwk::AbilityInfo> GetOriginalAbilityInfo() const; 415 void RecordLifeCycleExceptionEvent(LifeCycleEvent event, WMError errCode) const; 416 std::string TransferLifeCycleEventToString(LifeCycleEvent type) const; 417 Rect GetSystemAlarmWindowDefaultSize(Rect defaultRect); 418 void HandleModeChangeHotZones(int32_t posX, int32_t posY); 419 WMError NotifyWindowTransition(TransitionReason reason); 420 void UpdatePointerEventForStretchableWindow(const std::shared_ptr<MMI::PointerEvent>& pointerEvent); 421 void UpdateDragType(int32_t startPointPosX, int32_t startPointPosY); 422 void HandleBackKeyPressedEvent(const std::shared_ptr<MMI::KeyEvent>& keyEvent); 423 bool CheckCameraFloatingWindowMultiCreated(WindowType type); 424 void GetConfigurationFromAbilityInfo(); 425 void UpdateTitleButtonVisibility(); 426 void SetWindowModeSupportType(uint32_t windowModeSupportType); 427 uint32_t GetWindowModeSupportType() const; 428 WMError PreProcessShow(uint32_t reason, bool withAnimation); 429 bool NeedToStopShowing(); 430 void CalculateStartRectExceptHotZone(float virtualPixelRatio); 431 void SetSystemConfig(); 432 void TransformSurfaceNode(const Transform& trans); 433 bool IsAppMainOrSunOrFloatingWindow(); 434 bool IsAppMainOrSubOrFloatingWindow(); 435 WMError WindowCreateCheck(uint32_t parentId); 436 uint32_t CalculatePointerDirection(int32_t pointerX, int32_t pointerY); 437 void HandlePointerStyle(const std::shared_ptr<MMI::PointerEvent>& pointerEvent); 438 RSSurfaceNode::SharedPtr CreateSurfaceNode(std::string name, WindowType type); 439 void UpdateWindowStateUnfrozen(); 440 void UpdateViewportConfig(const Rect& rect, const sptr<class Display>& display, WindowSizeChangeReason reason, 441 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr, 442 const std::map<AvoidAreaType, AvoidArea>& avoidAreas = {}); 443 void UpdateDecorEnable(bool needNotify = false); 444 WMError SetFloatingMaximize(bool isEnter); 445 WMError SetUIContentInner(const std::string& contentInfo, napi_env env, napi_value storage, 446 WindowSetUIContentType setUIContentType, BackupAndRestoreType restoreType, AppExecFwk::Ability* ability); 447 std::shared_ptr<std::vector<uint8_t>> GetAbcContent(const std::string& abcPath); 448 std::string GetRestoredRouterStack(); 449 450 // colorspace, gamut 451 using ColorSpaceConvertMap = struct { 452 ColorSpace colorSpace; 453 GraphicColorGamut surfaceColorGamut; 454 }; 455 static const ColorSpaceConvertMap colorSpaceConvertMap[]; 456 static ColorSpace GetColorSpaceFromSurfaceGamut(GraphicColorGamut colorGamut); 457 static GraphicColorGamut GetSurfaceGamutFromColorSpace(ColorSpace colorSpace); 458 void ChangePropertyByApiVersion(); 459 void PerfLauncherHotAreaIfNeed(const std::shared_ptr<MMI::PointerEvent>& pointerEvent); 460 void SetDefaultDisplayIdIfNeed(); 461 462 static std::map<std::string, std::pair<uint32_t, sptr<Window>>> windowMap_; 463 static std::map<uint32_t, std::vector<sptr<WindowImpl>>> subWindowMap_; 464 static std::map<uint32_t, std::vector<sptr<WindowImpl>>> appFloatingWindowMap_; 465 static std::map<uint32_t, std::vector<sptr<WindowImpl>>> appDialogWindowMap_; 466 sptr<WindowProperty> property_; 467 WindowState state_ { WindowState::STATE_INITIAL }; 468 WindowState subWindowState_ {WindowState::STATE_INITIAL}; 469 WindowTag windowTag_; 470 sptr<IAceAbilityHandler> aceAbilityHandler_; 471 static std::map<uint32_t, std::vector<sptr<IScreenshotListener>>> screenshotListeners_; 472 static std::map<uint32_t, std::vector<sptr<ITouchOutsideListener>>> touchOutsideListeners_; 473 static std::map<uint32_t, std::vector<sptr<IDialogTargetTouchListener>>> dialogTargetTouchListeners_; 474 static std::map<uint32_t, std::vector<sptr<IWindowLifeCycle>>> lifecycleListeners_; 475 static std::map<uint32_t, std::vector<sptr<IWindowChangeListener>>> windowChangeListeners_; 476 static std::map<uint32_t, std::vector<sptr<IAvoidAreaChangedListener>>> avoidAreaChangeListeners_; 477 std::vector<sptr<IWindowDragListener>> windowDragListeners_; 478 std::vector<sptr<IDisplayMoveListener>> displayMoveListeners_; 479 static std::map<uint32_t, std::vector<sptr<IOccupiedAreaChangeListener>>> occupiedAreaChangeListeners_; 480 static std::map<uint32_t, sptr<IDialogDeathRecipientListener>> dialogDeathRecipientListener_; 481 std::shared_ptr<IInputEventConsumer> inputEventConsumer_; 482 sptr<IAnimationTransitionController> animationTransitionController_; 483 NotifyNativeWinDestroyFunc notifyNativefunc_; 484 std::shared_ptr<RSSurfaceNode> surfaceNode_; 485 std::string name_; 486 std::unique_ptr<Ace::UIContent> uiContent_; 487 std::shared_ptr<AbilityRuntime::Context> context_; 488 std::recursive_mutex mutex_; 489 std::recursive_mutex windowStateMutex_; 490 static std::recursive_mutex globalMutex_; 491 const float SYSTEM_ALARM_WINDOW_WIDTH_RATIO = 0.8; 492 const float SYSTEM_ALARM_WINDOW_HEIGHT_RATIO = 0.3; 493 WindowSizeChangeReason lastSizeChangeReason_ = WindowSizeChangeReason::END; 494 495 sptr<MoveDragProperty> moveDragProperty_; 496 SystemConfig windowSystemConfig_; 497 bool isOriginRectSet_ = false; 498 bool needRemoveWindowInputChannel_ = false; 499 bool isMainHandlerAvailable_ = true; 500 bool isAppFloatingWindow_ = false; 501 bool isFocused_ = false; 502 uint32_t mouseStyleID_ = 0; 503 bool isIgnoreSafeAreaNeedNotify_ = false; 504 bool isIgnoreSafeArea_ = false; 505 bool needDefaultAnimation_ = true; 506 bool postTaskDone_ = false; 507 const std::map<DragType, uint32_t> STYLEID_MAP = { 508 {DragType::DRAG_UNDEFINED, MMI::MOUSE_ICON::DEFAULT}, 509 {DragType::DRAG_BOTTOM_OR_TOP, MMI::MOUSE_ICON::NORTH_SOUTH}, 510 {DragType::DRAG_LEFT_OR_RIGHT, MMI::MOUSE_ICON::WEST_EAST}, 511 {DragType::DRAG_LEFT_TOP_CORNER, MMI::MOUSE_ICON::NORTH_WEST_SOUTH_EAST}, 512 {DragType::DRAG_RIGHT_TOP_CORNER, MMI::MOUSE_ICON::NORTH_EAST_SOUTH_WEST} 513 }; ConvertRadiusToSigma(float radius)514 static float ConvertRadiusToSigma(float radius) 515 { 516 constexpr float BlurSigmaScale = 0.57735f; 517 return radius > 0.0f ? BlurSigmaScale * radius + SK_ScalarHalf : 0.0f; 518 } 519 std::shared_ptr<AppExecFwk::EventHandler> handler_ = nullptr; 520 std::string restoredRouterStack_; // It was set and get in same thread, which is js thread. 521 bool needNotifyFocusLater_ = false; 522 bool escKeyEventTriggered_ = false; 523 bool enableImmersiveMode_ = false; 524 std::shared_ptr<VsyncStation> vsyncStation_ = nullptr; 525 }; 526 } // namespace Rosen 527 } // namespace OHOS 528 #endif // OHOS_ROSEN_WINDOW_IMPL_H 529