diff --git a/service/window_manager/include/screen_pointer.h b/service/window_manager/include/screen_pointer.h index b5a521911ea95fa759ef46207e61f578b40a6d06..6a1a13e408bbdff8920581bb036d7175991d2cfb 100644 --- a/service/window_manager/include/screen_pointer.h +++ b/service/window_manager/include/screen_pointer.h @@ -73,6 +73,11 @@ public: { return surfaceNode_; } + + void SetDPI(float dpi) + { + dpi_ = dpi; + } float GetDPI() const { diff --git a/service/window_manager/src/pointer_drawing_manager.cpp b/service/window_manager/src/pointer_drawing_manager.cpp index 547c4ac256d45c086b21287585cde2b2d9db0612..95b8b626f43a9adb209026ec950aaed95746496e 100644 --- a/service/window_manager/src/pointer_drawing_manager.cpp +++ b/service/window_manager/src/pointer_drawing_manager.cpp @@ -2289,10 +2289,10 @@ void PointerDrawingManager::UpdateDisplayInfo(const DisplayInfo &displayInfo) if (screenPointers_.count(static_cast(displayInfo.uniqueId))) { auto sp = screenPointers_[displayInfo.uniqueId]; CHKPV(sp); + sp->OnDisplayInfo(displayInfo); if (sp->IsMain()) { UpdateMirrorScreens(sp, displayInfo); } - sp->OnDisplayInfo(displayInfo); } } #endif // OHOS_BUILD_ENABLE_HARDWARE_CURSOR @@ -3380,7 +3380,6 @@ void PointerDrawingManager::OnScreenModeChange(const std::vectorInit()) { MMI_HILOGE("ScreenPointer::Init failed, screenId=%{public}u", sid); } - UpdateDisplayInfo(displayInfo_); } } @@ -3402,6 +3401,7 @@ void PointerDrawingManager::OnScreenModeChange(const std::vector sp, con void PointerDrawingManager::UpdateMirrorScreens(std::shared_ptr sp, DisplayInfo displayInfo) { - if (sp->GetRotation() != static_cast(displayInfo.direction)) { - uint32_t mainWidth = sp->GetScreenWidth(); - uint32_t mainHeight = sp->GetScreenHeight(); - auto mirrorScreens = GetMirrorScreenPointers(); - for (auto mirrorScreen : mirrorScreens) { - if (mirrorScreen != nullptr) { + uint32_t mainWidth = sp->GetScreenWidth(); + uint32_t mainHeight = sp->GetScreenHeight(); + std::lock_guard lock(mtx_); + for (auto it : screenPointers_) { + if (it.second == nullptr) { + continue; + } + if (it.second->IsMirror()) { + auto& mirrorScreen = it.second; + if (sp->GetRotation() != static_cast(displayInfo.direction)) { mirrorScreen->SetRotation(static_cast(displayInfo.direction)); mirrorScreen->UpdatePadding(mainWidth, mainHeight); } + MMI_HILOGD("update mirror screen dpi, mainScreen dpi: %{public}f, original mirrorScreen dpi: %{public}f", + sp->GetDPI(), mirrorScreen->GetDPI()); + mirrorScreen->SetDPI(sp->GetDPI()); } } }