diff --git a/dmserver/include/display_manager_service_inner.h b/dmserver/include/display_manager_service_inner.h index 45b11938fa1303dfe075f3cf8f786b91af74a80b..b537d11d8ac585599a4c009f95abdf1ec86d9217 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 787459b27ef2278801e87770935eb91959b1f1ec..a53ccf8afe2a5e2b7ceb9813a1f463b8c3721e2d 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 36657492d853e4300ed20ace8d1ff6f4d85052b8..397eaef02962b999895becf50eb0ace0cb55f4a5 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 8a6a3baccd2c801f849a2b6eb5e08d14aab5bf61..37463283547ac0c9ff81193a2c4dc1a09653b76a 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