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 virtual bool PreNotifyKeyEvent(const std::shared_ptr<MMI::KeyEvent>& keyEvent) override; 278 virtual WMError NapiSetUIContent(const std::string& contentInfo, napi_env env, napi_value storage, 279 BackupAndRestoreType type, sptr<IRemoteObject> token, AppExecFwk::Ability* ability) override; 280 virtual WMError SetUIContentByName(const std::string& contentInfo, napi_env env, napi_value storage, 281 AppExecFwk::Ability* ability) override; 282 virtual WMError SetUIContentByAbc(const std::string& abcPath, napi_env env, napi_value storage, 283 AppExecFwk::Ability* ability) override; 284 virtual std::string GetContentInfo(BackupAndRestoreType type = BackupAndRestoreType::CONTINUATION) override; 285 WMError SetRestoredRouterStack(const std::string& routerStack) override; 286 virtual const std::shared_ptr<AbilityRuntime::Context> GetContext() const override; 287 virtual Ace::UIContent* GetUIContent() const override; 288 virtual Ace::UIContent* GetUIContentWithId(uint32_t winId) const override; 289 virtual void OnNewWant(const AAFwk::Want& want) override; 290 virtual void SetRequestedOrientation(Orientation) override; 291 virtual Orientation GetRequestedOrientation() override; 292 virtual void SetNeedRemoveWindowInputChannel(bool needRemoveWindowInputChannel) override; 293 virtual WMError SetTouchHotAreas(const std::vector<Rect>& rects) override; 294 virtual void GetRequestedTouchHotAreas(std::vector<Rect>& rects) const override; 295 virtual WMError SetAPPWindowLabel(const std::string& label) override; 296 virtual WMError SetAPPWindowIcon(const std::shared_ptr<Media::PixelMap>& icon) override; 297 298 // colorspace, gamut 299 virtual bool IsSupportWideGamut() override; 300 virtual void SetColorSpace(ColorSpace colorSpace) override; 301 virtual ColorSpace GetColorSpace() override; 302 303 virtual void DumpInfo(const std::vector<std::string>& params, std::vector<std::string>& info) override; 304 virtual std::shared_ptr<Media::PixelMap> Snapshot() override; 305 virtual WMError NotifyMemoryLevel(int32_t level) override; 306 virtual bool IsAllowHaveSystemSubWindow() override; 307 virtual KeyboardAnimationConfig GetKeyboardAnimationConfig() override; 308 void RestoreSplitWindowMode(uint32_t mode); 309 310 virtual void SetNeedDefaultAnimation(bool needDefaultAnimation) override; 311 312 virtual void DoPrepareTerminate() override; 313 void PendingClose(); 314 315 WMError SetTextFieldAvoidInfo(double textFieldPositionY, double textFieldHeight) override; 316 virtual WMError SetSystemBarProperties(const std::map<WindowType, SystemBarProperty>& properties, 317 const std::map<WindowType, SystemBarPropertyFlag>& propertyFlags) override; 318 virtual WMError GetSystemBarProperties(std::map<WindowType, SystemBarProperty>& properties) override; 319 virtual WMError SetSpecificBarProperty(WindowType type, const SystemBarProperty& property) override; 320 321 /* 322 * Gesture Back 323 */ SetGestureBackEnabled(bool enable)324 WMError SetGestureBackEnabled(bool enable) override { return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; } GetGestureBackEnabled(bool & enable)325 WMError GetGestureBackEnabled(bool& enable) override { return WMError::WM_ERROR_DEVICE_NOT_SUPPORT; } 326 327 /* 328 * Window Property 329 */ 330 static void UpdateConfigurationSyncForAll(const std::shared_ptr<AppExecFwk::Configuration>& configuration); 331 void UpdateConfigurationSync(const std::shared_ptr<AppExecFwk::Configuration>& configuration) override; 332 333 private: 334 template<typename T> WMError RegisterListener(std::vector<sptr<T>>& holder, const sptr<T>& listener); 335 template<typename T> WMError UnregisterListener(std::vector<sptr<T>>& holder, const sptr<T>& listener); ClearUselessListeners(std::map<uint32_t,T> & listeners,uint32_t winId)336 template<typename T> void ClearUselessListeners(std::map<uint32_t, T>& listeners, uint32_t winId) 337 { 338 listeners.erase(winId); 339 } 340 template<typename T> EnableIfSame<T, IWindowLifeCycle, std::vector<sptr<IWindowLifeCycle>>> GetListeners(); 341 template<typename T> 342 EnableIfSame<T, IWindowChangeListener, std::vector<sptr<IWindowChangeListener>>> GetListeners(); 343 template<typename T> 344 EnableIfSame<T, IAvoidAreaChangedListener, std::vector<sptr<IAvoidAreaChangedListener>>> GetListeners(); 345 template<typename T> EnableIfSame<T, IDisplayMoveListener, std::vector<sptr<IDisplayMoveListener>>> GetListeners(); 346 template<typename T> EnableIfSame<T, IScreenshotListener, std::vector<sptr<IScreenshotListener>>> GetListeners(); 347 template<typename T> 348 EnableIfSame<T, ITouchOutsideListener, std::vector<sptr<ITouchOutsideListener>>> GetListeners(); 349 template<typename T> 350 EnableIfSame<T, IDialogTargetTouchListener, std::vector<sptr<IDialogTargetTouchListener>>> GetListeners(); 351 template<typename T> EnableIfSame<T, IWindowDragListener, std::vector<sptr<IWindowDragListener>>> GetListeners(); 352 template<typename T> 353 EnableIfSame<T, IOccupiedAreaChangeListener, std::vector<sptr<IOccupiedAreaChangeListener>>> GetListeners(); 354 template<typename T> 355 EnableIfSame<T, IDialogDeathRecipientListener, wptr<IDialogDeathRecipientListener>> GetListener(); 356 357 void NotifyAfterForeground(bool needNotifyListeners = true, bool needNotifyUiContent = true); 358 void NotifyAfterBackground(bool needNotifyListeners = true, bool needNotifyUiContent = true); 359 void NotifyAfterFocused(); 360 void NotifyAfterUnfocused(bool needNotifyUiContent = true); 361 void NotifyAfterResumed(); 362 void NotifyAfterPaused(); 363 void NotifyBeforeDestroy(std::string windowName); 364 void NotifyBeforeSubWindowDestroy(sptr<WindowImpl> window); 365 void NotifyAfterActive(); 366 void NotifyAfterInactive(); 367 void NotifyForegroundFailed(WMError ret); 368 void NotifyBackgroundFailed(WMError ret); 369 bool IsStretchableReason(WindowSizeChangeReason reason); 370 371 void InitWindowProperty(const sptr<WindowOption>& option); 372 void ClearListenersById(uint32_t winId); 373 void NotifySizeChange(Rect rect, WindowSizeChangeReason reason, 374 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr); 375 void NotifyAvoidAreaChange(const sptr<AvoidArea>& avoidArea, AvoidAreaType type); 376 void NotifyDisplayMoveChange(DisplayId from, DisplayId to); 377 void NotifyOccupiedAreaChange(const sptr<OccupiedAreaChangeInfo>& info, 378 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr); 379 void NotifyModeChange(WindowMode mode, bool hasDeco = true); 380 void NotifyDragEvent(const PointInfo& point, DragEvent event); 381 void DestroyDialogWindow(); 382 void DestroyFloatingWindow(); 383 void DestroySubWindow(); 384 void ClearVsyncStation(); 385 void SetDefaultOption(); // for api7 386 bool IsWindowValid() const; 387 static sptr<Window> FindWindowById(uint32_t WinId); 388 void TransferPointerEvent(const std::shared_ptr<MMI::PointerEvent>& pointerEvent); 389 void ConsumeMoveOrDragEvent(const std::shared_ptr<MMI::PointerEvent>& pointerEvent); 390 void ReadyToMoveOrDragWindow(const std::shared_ptr<MMI::PointerEvent>& pointerEvent, 391 const MMI::PointerEvent::PointerItem& pointerItem); 392 void EndMoveOrDragWindow(int32_t posX, int32_t posY, int32_t pointId, int32_t sourceType); 393 void ResetMoveOrDragState(); 394 bool IsPointerEventConsumed(); 395 bool IsPointInDragHotZone(int32_t startPointPosX, int32_t startPointPosY, int32_t sourceType); 396 void AdjustWindowAnimationFlag(bool withAnimation = false); 397 void MapFloatingWindowToAppIfNeeded(); 398 void MapDialogWindowToAppIfNeeded(); 399 WMError UpdateProperty(PropertyChangeAction action); 400 WMError Destroy(bool needNotifyServer, bool needClearListener = true); 401 WMError SetBackgroundColor(uint32_t color); 402 uint32_t GetBackgroundColor() const; 403 void InitAbilityInfo(); 404 std::shared_ptr<AppExecFwk::AbilityInfo> GetOriginalAbilityInfo() const; 405 void RecordLifeCycleExceptionEvent(LifeCycleEvent event, WMError errCode) const; 406 std::string TransferLifeCycleEventToString(LifeCycleEvent type) const; 407 Rect GetSystemAlarmWindowDefaultSize(Rect defaultRect); 408 void HandleModeChangeHotZones(int32_t posX, int32_t posY); 409 WMError NotifyWindowTransition(TransitionReason reason); 410 void UpdatePointerEventForStretchableWindow(const std::shared_ptr<MMI::PointerEvent>& pointerEvent); 411 void UpdateDragType(int32_t startPointPosX, int32_t startPointPosY); 412 void HandleBackKeyPressedEvent(const std::shared_ptr<MMI::KeyEvent>& keyEvent); 413 bool CheckCameraFloatingWindowMultiCreated(WindowType type); 414 void GetConfigurationFromAbilityInfo(); 415 void UpdateTitleButtonVisibility(); 416 void SetWindowModeSupportType(uint32_t windowModeSupportType); 417 uint32_t GetWindowModeSupportType() const; 418 WMError PreProcessShow(uint32_t reason, bool withAnimation); 419 bool NeedToStopShowing(); 420 void CalculateStartRectExceptHotZone(float virtualPixelRatio); 421 void SetSystemConfig(); 422 void TransformSurfaceNode(const Transform& trans); 423 bool IsAppMainOrSunOrFloatingWindow(); 424 bool IsAppMainOrSubOrFloatingWindow(); 425 WMError WindowCreateCheck(uint32_t parentId); 426 uint32_t CalculatePointerDirection(int32_t pointerX, int32_t pointerY); 427 void HandlePointerStyle(const std::shared_ptr<MMI::PointerEvent>& pointerEvent); 428 RSSurfaceNode::SharedPtr CreateSurfaceNode(std::string name, WindowType type); 429 void UpdateWindowStateUnfrozen(); 430 void UpdateViewportConfig(const Rect& rect, const sptr<class Display>& display, WindowSizeChangeReason reason, 431 const std::shared_ptr<RSTransaction>& rsTransaction = nullptr, 432 const std::map<AvoidAreaType, AvoidArea>& avoidAreas = {}); 433 void UpdateDecorEnable(bool needNotify = false); 434 WMError SetFloatingMaximize(bool isEnter); 435 WMError SetUIContentInner(const std::string& contentInfo, napi_env env, napi_value storage, 436 WindowSetUIContentType setUIContentType, BackupAndRestoreType restoreType, AppExecFwk::Ability* ability); 437 std::shared_ptr<std::vector<uint8_t>> GetAbcContent(const std::string& abcPath); 438 std::string GetRestoredRouterStack(); 439 440 // colorspace, gamut 441 using ColorSpaceConvertMap = struct { 442 ColorSpace colorSpace; 443 GraphicColorGamut surfaceColorGamut; 444 }; 445 static const ColorSpaceConvertMap colorSpaceConvertMap[]; 446 static ColorSpace GetColorSpaceFromSurfaceGamut(GraphicColorGamut colorGamut); 447 static GraphicColorGamut GetSurfaceGamutFromColorSpace(ColorSpace colorSpace); 448 void ChangePropertyByApiVersion(); 449 void PerfLauncherHotAreaIfNeed(const std::shared_ptr<MMI::PointerEvent>& pointerEvent); 450 void SetDefaultDisplayIdIfNeed(); 451 452 static std::map<std::string, std::pair<uint32_t, sptr<Window>>> windowMap_; 453 static std::map<uint32_t, std::vector<sptr<WindowImpl>>> subWindowMap_; 454 static std::map<uint32_t, std::vector<sptr<WindowImpl>>> appFloatingWindowMap_; 455 static std::map<uint32_t, std::vector<sptr<WindowImpl>>> appDialogWindowMap_; 456 sptr<WindowProperty> property_; 457 WindowState state_ { WindowState::STATE_INITIAL }; 458 WindowState subWindowState_ {WindowState::STATE_INITIAL}; 459 WindowTag windowTag_; 460 sptr<IAceAbilityHandler> aceAbilityHandler_; 461 static std::map<uint32_t, std::vector<sptr<IScreenshotListener>>> screenshotListeners_; 462 static std::map<uint32_t, std::vector<sptr<ITouchOutsideListener>>> touchOutsideListeners_; 463 static std::map<uint32_t, std::vector<sptr<IDialogTargetTouchListener>>> dialogTargetTouchListeners_; 464 static std::map<uint32_t, std::vector<sptr<IWindowLifeCycle>>> lifecycleListeners_; 465 static std::map<uint32_t, std::vector<sptr<IWindowChangeListener>>> windowChangeListeners_; 466 static std::map<uint32_t, std::vector<sptr<IAvoidAreaChangedListener>>> avoidAreaChangeListeners_; 467 std::vector<sptr<IWindowDragListener>> windowDragListeners_; 468 std::vector<sptr<IDisplayMoveListener>> displayMoveListeners_; 469 static std::map<uint32_t, std::vector<sptr<IOccupiedAreaChangeListener>>> occupiedAreaChangeListeners_; 470 static std::map<uint32_t, sptr<IDialogDeathRecipientListener>> dialogDeathRecipientListener_; 471 std::shared_ptr<IInputEventConsumer> inputEventConsumer_; 472 sptr<IAnimationTransitionController> animationTransitionController_; 473 NotifyNativeWinDestroyFunc notifyNativefunc_; 474 std::shared_ptr<RSSurfaceNode> surfaceNode_; 475 std::string name_; 476 std::unique_ptr<Ace::UIContent> uiContent_; 477 std::shared_ptr<AbilityRuntime::Context> context_; 478 std::recursive_mutex mutex_; 479 std::recursive_mutex windowStateMutex_; 480 static std::recursive_mutex globalMutex_; 481 const float SYSTEM_ALARM_WINDOW_WIDTH_RATIO = 0.8; 482 const float SYSTEM_ALARM_WINDOW_HEIGHT_RATIO = 0.3; 483 WindowSizeChangeReason lastSizeChangeReason_ = WindowSizeChangeReason::END; 484 485 sptr<MoveDragProperty> moveDragProperty_; 486 SystemConfig windowSystemConfig_; 487 bool isOriginRectSet_ = false; 488 bool needRemoveWindowInputChannel_ = false; 489 bool isMainHandlerAvailable_ = true; 490 bool isAppFloatingWindow_ = false; 491 bool isFocused_ = false; 492 uint32_t mouseStyleID_ = 0; 493 bool isIgnoreSafeAreaNeedNotify_ = false; 494 bool isIgnoreSafeArea_ = false; 495 bool needDefaultAnimation_ = true; 496 bool postTaskDone_ = false; 497 const std::map<DragType, uint32_t> STYLEID_MAP = { 498 {DragType::DRAG_UNDEFINED, MMI::MOUSE_ICON::DEFAULT}, 499 {DragType::DRAG_BOTTOM_OR_TOP, MMI::MOUSE_ICON::NORTH_SOUTH}, 500 {DragType::DRAG_LEFT_OR_RIGHT, MMI::MOUSE_ICON::WEST_EAST}, 501 {DragType::DRAG_LEFT_TOP_CORNER, MMI::MOUSE_ICON::NORTH_WEST_SOUTH_EAST}, 502 {DragType::DRAG_RIGHT_TOP_CORNER, MMI::MOUSE_ICON::NORTH_EAST_SOUTH_WEST} 503 }; ConvertRadiusToSigma(float radius)504 static float ConvertRadiusToSigma(float radius) 505 { 506 constexpr float BlurSigmaScale = 0.57735f; 507 return radius > 0.0f ? BlurSigmaScale * radius + SK_ScalarHalf : 0.0f; 508 } 509 std::shared_ptr<AppExecFwk::EventHandler> handler_ = nullptr; 510 std::string restoredRouterStack_; // It was set and get in same thread, which is js thread. 511 bool needNotifyFocusLater_ = false; 512 bool escKeyEventTriggered_ = false; 513 bool enableImmersiveMode_ = false; 514 std::shared_ptr<VsyncStation> vsyncStation_ = nullptr; 515 }; 516 } // namespace Rosen 517 } // namespace OHOS 518 #endif // OHOS_ROSEN_WINDOW_IMPL_H 519