1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 2022-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_DISPLAY_GROUP_CONTROLLER_H 17e0dac50fSopenharmony_ci#define OHOS_ROSEN_DISPLAY_GROUP_CONTROLLER_H 18e0dac50fSopenharmony_ci 19e0dac50fSopenharmony_ci#include <refbase.h> 20e0dac50fSopenharmony_ci 21e0dac50fSopenharmony_ci#include "avoid_area_controller.h" 22e0dac50fSopenharmony_ci#include "display_group_info.h" 23e0dac50fSopenharmony_ci#include "display_info.h" 24e0dac50fSopenharmony_ci#include "display_manager_service_inner.h" 25e0dac50fSopenharmony_ci#include "window_layout_policy.h" 26e0dac50fSopenharmony_ci#include "window_manager.h" 27e0dac50fSopenharmony_ci#include "window_node.h" 28e0dac50fSopenharmony_ci#include "window_pair.h" 29e0dac50fSopenharmony_ci#include "wm_common.h" 30e0dac50fSopenharmony_ci 31e0dac50fSopenharmony_cinamespace OHOS { 32e0dac50fSopenharmony_cinamespace Rosen { 33e0dac50fSopenharmony_ciusing SysBarNodeMap = std::unordered_map<WindowType, sptr<WindowNode>>; 34e0dac50fSopenharmony_ciusing SysBarTintMap = std::unordered_map<WindowType, SystemBarRegionTint>; 35e0dac50fSopenharmony_ciclass WindowNodeContainer; 36e0dac50fSopenharmony_ci 37e0dac50fSopenharmony_ciclass DisplayGroupController : public RefBase { 38e0dac50fSopenharmony_cipublic: 39e0dac50fSopenharmony_ci DisplayGroupController(const sptr<WindowNodeContainer>& windowNodeContainer) 40e0dac50fSopenharmony_ci : windowNodeContainer_(windowNodeContainer) {} 41e0dac50fSopenharmony_ci ~DisplayGroupController() = default; 42e0dac50fSopenharmony_ci 43e0dac50fSopenharmony_ci void InitNewDisplay(DisplayId displayId); 44e0dac50fSopenharmony_ci void UpdateDisplayGroupWindowTree(); 45e0dac50fSopenharmony_ci void PreProcessWindowNode(const sptr<WindowNode>& node, WindowUpdateType type); 46e0dac50fSopenharmony_ci void PostProcessWindowNode(const sptr<WindowNode>& node); 47e0dac50fSopenharmony_ci void ProcessDisplayCreate(DisplayId defaultDisplayId, sptr<DisplayInfo> displayInfo, 48e0dac50fSopenharmony_ci const std::map<DisplayId, Rect>& displayRectMap); 49e0dac50fSopenharmony_ci void ProcessDisplayDestroy(DisplayId defaultDisplayId, sptr<DisplayInfo> displayInfo, 50e0dac50fSopenharmony_ci const std::map<DisplayId, Rect>& displayRectMap, 51e0dac50fSopenharmony_ci std::vector<uint32_t>& windowIds); 52e0dac50fSopenharmony_ci void ProcessDisplayChange(DisplayId defaultDisplayId, sptr<DisplayInfo> displayInfo, 53e0dac50fSopenharmony_ci const std::map<DisplayId, Rect>& displayRectMap, 54e0dac50fSopenharmony_ci DisplayStateChangeType type); 55e0dac50fSopenharmony_ci sptr<WindowPair> GetWindowPairByDisplayId(DisplayId displayId); 56e0dac50fSopenharmony_ci void SetSplitRatioConfig(const SplitRatioConfig& splitRatioConfig); 57e0dac50fSopenharmony_ci 58e0dac50fSopenharmony_ci DisplayGroupWindowTree displayGroupWindowTree_; 59e0dac50fSopenharmony_ci std::map<DisplayId, SysBarNodeMap> sysBarNodeMaps_; 60e0dac50fSopenharmony_ci std::map<DisplayId, SysBarTintMap> sysBarTintMaps_; 61e0dac50fSopenharmony_ci 62e0dac50fSopenharmony_ciprivate: 63e0dac50fSopenharmony_ci std::vector<sptr<WindowNode>>* GetWindowNodesByDisplayIdAndRootType(DisplayId displayId, WindowRootNodeType type); 64e0dac50fSopenharmony_ci void AddWindowNodeOnWindowTree(sptr<WindowNode>& node, WindowRootNodeType rootType); 65e0dac50fSopenharmony_ci void ProcessNotCrossNodesOnDestroyedDisplay(DisplayId displayId, std::vector<uint32_t>& windowIds); 66e0dac50fSopenharmony_ci void ProcessDisplaySizeChangeOrRotation(DisplayId defaultDisplayId, DisplayId displayId, 67e0dac50fSopenharmony_ci const std::map<DisplayId, Rect>& displayRectMap, DisplayStateChangeType type); 68e0dac50fSopenharmony_ci void ProcessCrossNodes(DisplayId defaultDisplayId, DisplayStateChangeType type); 69e0dac50fSopenharmony_ci void MoveCrossNodeToTargetDisplay(const sptr<WindowNode>& node, DisplayId targetDisplayId); 70e0dac50fSopenharmony_ci void MoveNotCrossNodeToDefaultDisplay(const sptr<WindowNode>& node, DisplayId displayId); 71e0dac50fSopenharmony_ci void UpdateWindowDisplayIdIfNeeded(const sptr<WindowNode>& node); 72e0dac50fSopenharmony_ci void UpdateWindowShowingDisplays(const sptr<WindowNode>& node); 73e0dac50fSopenharmony_ci void UpdateWindowDisplayId(const sptr<WindowNode>& node, DisplayId newDisplayId); 74e0dac50fSopenharmony_ci void ClearMapOfDestroyedDisplay(DisplayId displayId); 75e0dac50fSopenharmony_ci void ChangeToRectInDisplayGroup(const sptr<WindowNode>& node, DisplayId displayId); 76e0dac50fSopenharmony_ci void UpdateNodeSizeChangeReasonWithRotation(DisplayId displayId, const std::map<DisplayId, Rect>& displayRectMap); 77e0dac50fSopenharmony_ci void ProcessWindowPairWhenDisplayChange(bool rotateDisplay = false); 78e0dac50fSopenharmony_ci void UpdateSplitRatioPoints(DisplayId displayId); 79e0dac50fSopenharmony_ci void ProcessSystemBarRotation(const sptr<WindowNode>& node, const std::map<DisplayId, Rect>& displayRectMap); 80e0dac50fSopenharmony_ci 81e0dac50fSopenharmony_ci sptr<WindowNodeContainer> windowNodeContainer_; 82e0dac50fSopenharmony_ci std::map<DisplayId, sptr<WindowPair>> windowPairMap_; 83e0dac50fSopenharmony_ci DisplayId defaultDisplayId_ { 0 }; 84e0dac50fSopenharmony_ci}; 85e0dac50fSopenharmony_ci} // namespace Rosen 86e0dac50fSopenharmony_ci} // namespace OHOS 87e0dac50fSopenharmony_ci#endif // OHOS_ROSEN_DISPLAY_GROUP_CONTROLLER_H 88