diff --git a/dmserver/include/display_manager_service_inner.h b/dmserver/include/display_manager_service_inner.h index 1540ffde7a2c09f327851960368a5e8ba6562531..c16ec7a27f41bcbfd2c0560c61e7f6e00a255387 100644 --- a/dmserver/include/display_manager_service_inner.h +++ b/dmserver/include/display_manager_service_inner.h @@ -37,6 +37,7 @@ public: ScreenId GetRSScreenId(DisplayId displayId) const; const sptr GetScreenInfoByDisplayId(DisplayId displayId) const; const sptr GetScreenByDisplayId(DisplayId); + const sptr GetScreenModesByDisplayId(DisplayId displayId); 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 a53ccf8afe2a5e2b7ceb9813a1f463b8c3721e2d..edaaa5cd4ec4fe75112d2c2904302cb7147f6ebf 100644 --- a/dmserver/src/display_manager_service_inner.cpp +++ b/dmserver/src/display_manager_service_inner.cpp @@ -92,6 +92,23 @@ const sptr DisplayManagerServiceInner::GetScreenInfoByDisplayId(Disp DisplayManagerService::GetInstance().GetScreenIdByDisplayId(displayId)); } +const sptr DisplayManagerServiceInner::GetScreenModesByDisplayId(DisplayId displayId) +{ + const sptr display = GetDisplayById(displayId); + if (display == nullptr) { + WLOGFE("can not get display."); + return nullptr; + } + ScreenId dmsScreenId = display->GetAbstractScreenId(); + sptr abstractScreen = + DisplayManagerService::GetInstance().abstractScreenController_->GetAbstractScreen(dmsScreenId); + if (abstractScreen == nullptr) { + WLOGFE("can not get screenMode."); + return nullptr; + } + return abstractScreen->GetActiveScreenMode(); +} + void DisplayManagerServiceInner::RegisterDisplayChangeListener(sptr listener) { DisplayManagerService::GetInstance().RegisterDisplayChangeListener(listener); diff --git a/wmserver/src/input_window_monitor.cpp b/wmserver/src/input_window_monitor.cpp index 4b921aa4e26ae105a55e1addd16e49de1ea54873..f8ad19acadab1e946b306807243bccf1c9ac6558 100644 --- a/wmserver/src/input_window_monitor.cpp +++ b/wmserver/src/input_window_monitor.cpp @@ -79,19 +79,24 @@ void InputWindowMonitor::UpdateInputWindowByDisplayId(DisplayId displayId) void InputWindowMonitor::UpdateDisplaysInfo(const sptr& container, DisplayId displayId) { + sptr screenMode = + DisplayManagerServiceInner::GetInstance().GetScreenModesByDisplayId(displayId); + if (screenMode == nullptr) { + return; + } MMI::PhysicalDisplayInfo physicalDisplayInfo = { .id = static_cast(container->GetScreenId()), .leftDisplayId = static_cast(DISPLAY_ID_INVALD), .upDisplayId = static_cast(DISPLAY_ID_INVALD), - .topLeftX = container->GetDisplayRect().posX_, - .topLeftY = container->GetDisplayRect().posY_, - .width = static_cast(container->GetDisplayRect().width_), - .height = static_cast(container->GetDisplayRect().height_), + .topLeftX = 0, + .topLeftY = 0, + .width = static_cast(screenMode->width_), + .height = static_cast(screenMode->height_), .name = "physical_display0", .seatId = "seat0", .seatName = "default0", - .logicWidth = static_cast(container->GetDisplayRect().width_), - .logicHeight = static_cast(container->GetDisplayRect().height_), + .logicWidth = static_cast(screenMode->width_), + .logicHeight = static_cast(screenMode->height_), }; UpdateDisplayDirection(physicalDisplayInfo, displayId); auto physicalDisplayIter = std::find_if(physicalDisplays_.begin(), physicalDisplays_.end(),