From 9cfb19740fcd6d2b638d2b59efa4e3a4bf54ce6f Mon Sep 17 00:00:00 2001 From: wangxinpeng Date: Tue, 15 Feb 2022 12:08:59 +0800 Subject: [PATCH] update screen rotation to IMS Signed-off-by: wangxinpeng Change-Id: I4146a1c2f3225ea168566767baa6568c2ba09ff7 --- .../include/display_manager_service_inner.h | 1 + .../src/display_manager_service_inner.cpp | 6 ++++ wmserver/include/input_window_monitor.h | 3 +- wmserver/src/input_window_monitor.cpp | 28 +++++++++++++++++-- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/dmserver/include/display_manager_service_inner.h b/dmserver/include/display_manager_service_inner.h index 45b11938fa..b537d11d8a 100644 --- a/dmserver/include/display_manager_service_inner.h +++ b/dmserver/include/display_manager_service_inner.h @@ -35,6 +35,7 @@ public: const sptr GetDisplayById(DisplayId displayId); std::vector GetAllDisplayIds(); ScreenId GetRSScreenId(DisplayId displayId) const; + const sptr GetScreenInfoByDisplayId(DisplayId displayId) const; void UpdateRSTree(DisplayId displayId, std::shared_ptr& surfaceNode, bool isAdd); void RegisterDisplayChangeListener(sptr listener); }; diff --git a/dmserver/src/display_manager_service_inner.cpp b/dmserver/src/display_manager_service_inner.cpp index 787459b27e..a53ccf8afe 100644 --- a/dmserver/src/display_manager_service_inner.cpp +++ b/dmserver/src/display_manager_service_inner.cpp @@ -86,6 +86,12 @@ ScreenId DisplayManagerServiceInner::GetRSScreenId(DisplayId displayId) const return DisplayManagerService::GetInstance().GetRSScreenId(displayId); } +const sptr DisplayManagerServiceInner::GetScreenInfoByDisplayId(DisplayId displayId) const +{ + return DisplayManagerService::GetInstance().GetScreenInfoById( + DisplayManagerService::GetInstance().GetScreenIdByDisplayId(displayId)); +} + void DisplayManagerServiceInner::RegisterDisplayChangeListener(sptr listener) { DisplayManagerService::GetInstance().RegisterDisplayChangeListener(listener); diff --git a/wmserver/include/input_window_monitor.h b/wmserver/include/input_window_monitor.h index 36657492d8..397eaef029 100644 --- a/wmserver/include/input_window_monitor.h +++ b/wmserver/include/input_window_monitor.h @@ -41,7 +41,8 @@ private: const int INVALID_WINDOW_ID = -1; void TraverseWindowNodes(const std::vector>& windowNodes, std::vector::iterator& iter); - void UpdateDisplaysInfo(const sptr& container); + void UpdateDisplaysInfo(const sptr& container, DisplayId displayId); + void UpdateDisplayDirection(MMI::PhysicalDisplayInfo& physicalDisplayInfo, DisplayId displayId); }; } } diff --git a/wmserver/src/input_window_monitor.cpp b/wmserver/src/input_window_monitor.cpp index 8a6a3baccd..3746328354 100644 --- a/wmserver/src/input_window_monitor.cpp +++ b/wmserver/src/input_window_monitor.cpp @@ -19,6 +19,7 @@ #include +#include "display_manager_service_inner.h" #include "dm_common.h" #include "window_manager_hilog.h" @@ -56,7 +57,7 @@ void InputWindowMonitor::UpdateInputWindowByDisplayId(DisplayId displayId) WLOGFE("can not get window node container."); return; } - UpdateDisplaysInfo(container); + UpdateDisplaysInfo(container, displayId); std::vector> windowNodes; container->TraverseContainer(windowNodes); auto iter = std::find_if(logicalDisplays_.begin(), logicalDisplays_.end(), @@ -76,7 +77,7 @@ void InputWindowMonitor::UpdateInputWindowByDisplayId(DisplayId displayId) MMI::InputManager::GetInstance()->UpdateDisplayInfo(physicalDisplays_, logicalDisplays_); } -void InputWindowMonitor::UpdateDisplaysInfo(const sptr& container) +void InputWindowMonitor::UpdateDisplaysInfo(const sptr& container, DisplayId displayId) { MMI::PhysicalDisplayInfo physicalDisplayInfo = { .id = static_cast(container->GetScreenId()), @@ -91,8 +92,8 @@ void InputWindowMonitor::UpdateDisplaysInfo(const sptr& con .seatName = "default0", .logicWidth = static_cast(container->GetDisplayRect().width_), .logicHeight = static_cast(container->GetDisplayRect().height_), - .direction = MMI::Direction0 }; + UpdateDisplayDirection(physicalDisplayInfo, displayId); auto physicalDisplayIter = std::find_if(physicalDisplays_.begin(), physicalDisplays_.end(), [&physicalDisplayInfo](MMI::PhysicalDisplayInfo& physicalDisplay) { return physicalDisplay.id == physicalDisplayInfo.id; @@ -154,5 +155,26 @@ void InputWindowMonitor::TraverseWindowNodes(const std::vector> iter->windowsInfo_.emplace_back(windowInfo); } } + +void InputWindowMonitor::UpdateDisplayDirection(MMI::PhysicalDisplayInfo& physicalDisplayInfo, DisplayId displayId) +{ + Rotation rotation = DisplayManagerServiceInner::GetInstance().GetScreenInfoByDisplayId(displayId)->rotation_; + switch (rotation) { + case Rotation::ROTATION_0: + physicalDisplayInfo.direction = MMI::Direction0; + break; + case Rotation::ROTATION_90: + physicalDisplayInfo.direction = MMI::Direction90; + break; + case Rotation::ROTATION_180: + physicalDisplayInfo.direction = MMI::Direction180; + break; + case Rotation::ROTATION_270: + physicalDisplayInfo.direction = MMI::Direction270; + break; + default: + break; + } +} } } \ No newline at end of file -- Gitee