From 7c35dd582e594c802c207d7eb57ad68ed2d714a8 Mon Sep 17 00:00:00 2001 From: l00574490 Date: Tue, 25 Jan 2022 17:02:34 +0800 Subject: [PATCH] modify split Signed-off-by: l00574490 Change-Id: I51c249044496e4220121819d0f479a14909e15b9 --- wmserver/include/window_layout_policy.h | 1 + wmserver/include/window_node_container.h | 1 + wmserver/src/window_layout_policy.cpp | 12 +++++++++++- wmserver/src/window_node_container.cpp | 10 +++++++++- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/wmserver/include/window_layout_policy.h b/wmserver/include/window_layout_policy.h index c1f005f5..77625249 100644 --- a/wmserver/include/window_layout_policy.h +++ b/wmserver/include/window_layout_policy.h @@ -49,6 +49,7 @@ public: const sptr& appNode, const sptr& aboveAppNode); ~WindowLayoutPolicy() = default; void UpdateDisplayInfo(const Rect& primaryRect, const Rect& secondaryRect, const Rect& displayRect); + void UpdateSplitInfo(const Rect& primaryRect, const Rect& secondaryRect); void AddWindowNode(sptr& node); void RemoveWindowNode(sptr& node); void UpdateWindowNode(sptr& node); diff --git a/wmserver/include/window_node_container.h b/wmserver/include/window_node_container.h index 74a734fe..fb16b727 100644 --- a/wmserver/include/window_node_container.h +++ b/wmserver/include/window_node_container.h @@ -51,6 +51,7 @@ public: std::shared_ptr GetDisplayNode() const; void LayoutDividerWindow(sptr& node); void UpdateDisplayInfo(); + void UpdateSplitInfo(); bool isVerticalDisplay() const; class DisplayRects : public RefBase { diff --git a/wmserver/src/window_layout_policy.cpp b/wmserver/src/window_layout_policy.cpp index 619d30a0..4068b603 100644 --- a/wmserver/src/window_layout_policy.cpp +++ b/wmserver/src/window_layout_policy.cpp @@ -47,6 +47,17 @@ void WindowLayoutPolicy::UpdateDisplayInfo(const Rect& primaryRect, UpdateDefaultFoatingRect(); } +void WindowLayoutPolicy::UpdateSplitInfo(const Rect& primaryRect, const Rect& secondaryRect) +{ + dependRects.priRect_ = primaryRect; + dependRects.secRect_ = secondaryRect; + dependRects.limitPriRect_ = dependRects.priRect_; + dependRects.limitSecRect_ = dependRects.secRect_; + + UpdateSplitLimitRect(dependRects.limitFullRect_, dependRects.limitPriRect_); + UpdateSplitLimitRect(dependRects.limitFullRect_, dependRects.limitSecRect_); +} + void WindowLayoutPolicy::LayoutWindowTree() { InitLimitRects(); @@ -131,7 +142,6 @@ void WindowLayoutPolicy::RemoveWindowNode(sptr& node) if (avoidTypes_.find(type) != avoidTypes_.end()) { LayoutWindowTree(); } else if (type == WindowType::WINDOW_TYPE_DOCK_SLICE) { // split screen mode - // TODO: change split screen LayoutWindowTree(); } } diff --git a/wmserver/src/window_node_container.cpp b/wmserver/src/window_node_container.cpp index 4b377d35..5256ecaa 100644 --- a/wmserver/src/window_node_container.cpp +++ b/wmserver/src/window_node_container.cpp @@ -517,6 +517,14 @@ void WindowNodeContainer::UpdateDisplayInfo() layoutPolicy_->UpdateDisplayInfo(primaryRect, secondaryRect, displayRect); } +void WindowNodeContainer::UpdateSplitInfo() +{ + // update for split + const Rect& primaryRect = displayRects_->GetRectByWindowMode(WindowMode::WINDOW_MODE_SPLIT_PRIMARY); + const Rect& secondaryRect = displayRects_->GetRectByWindowMode(WindowMode::WINDOW_MODE_SPLIT_SECONDARY); + layoutPolicy_->UpdateSplitInfo(primaryRect, secondaryRect); +} + void WindowNodeContainer::LayoutDividerWindow(sptr& node) { layoutPolicy_->UpdateLayoutRect(node); @@ -709,7 +717,7 @@ WMError WindowNodeContainer::HandleModeChangeToSplit(sptr& triggerNo displayRects_->SetSplitRect(DEFAULT_SPLIT_RATIO); SendSplitScreenEvent(triggerNode->GetWindowMode()); } - UpdateDisplayInfo(); + UpdateSplitInfo(); return WMError::WM_OK; }