• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2025-2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 // LCOV_EXCL_START
17 #include "window_magnification_manager.h"
18 #include "accessibility_display_manager.h"
19 #include "accessible_ability_manager_service.h"
20 #include "magnification_menu_manager.h"
21 #include "utils.h"
22 #include "magnification_def.h"
23 
24 namespace OHOS {
25 namespace Accessibility {
26 
WindowMagnificationManager(std::shared_ptr<MagnificationWindowProxy> proxy)27 WindowMagnificationManager::WindowMagnificationManager(
28     std::shared_ptr<MagnificationWindowProxy> proxy) : windowProxy_(proxy)
29 {
30 }
31 
EnableWindowMagnification(int32_t centerX,int32_t centerY)32 void WindowMagnificationManager::EnableWindowMagnification(int32_t centerX, int32_t centerY)
33 {
34     HILOG_INFO("centerX = %{public}d, centerY = %{public}d.", centerX, centerY);
35     CHECK_PROXY_PTR_VOID()
36     float scale = Singleton<AccessibleAbilityManagerService>::GetInstance().GetMagnificationScale();
37     windowProxy_->InitMagnificationParam(scale);
38     windowProxy_->EnableMagnification(WINDOW_MAGNIFICATION, centerX, centerY);
39 }
40 
ShowWindowMagnification()41 void WindowMagnificationManager::ShowWindowMagnification()
42 {
43     CHECK_PROXY_PTR_VOID()
44     windowProxy_->ShowMagnification(WINDOW_MAGNIFICATION);
45 }
46 
ShowWindowMagnificationWithPosition(PointerPos pos)47 void WindowMagnificationManager::ShowWindowMagnificationWithPosition(PointerPos pos)
48 {
49     if (pos.posX == 0 && pos.posY == 0) {
50         ShowWindowMagnification();
51     } else {
52         EnableWindowMagnification(pos.posX, pos.posY);
53     }
54 }
55 
DisableWindowMagnification(bool needClear)56 void WindowMagnificationManager::DisableWindowMagnification(bool needClear)
57 {
58     HILOG_INFO();
59     CHECK_PROXY_PTR_VOID()
60     std::lock_guard<ffrt::mutex> lock(mutex_);
61     windowProxy_->DisableMagnification(WINDOW_MAGNIFICATION, needClear);
62 }
63 
SetScale(float deltaSpan)64 void WindowMagnificationManager::SetScale(float deltaSpan)
65 {
66     HILOG_DEBUG();
67     CHECK_PROXY_PTR_VOID()
68     windowProxy_->SetScale(WINDOW_MAGNIFICATION, deltaSpan);
69 }
70 
MoveMagnificationWindow(int32_t deltaX,int32_t deltaY)71 void WindowMagnificationManager::MoveMagnificationWindow(int32_t deltaX, int32_t deltaY)
72 {
73     CHECK_PROXY_PTR_VOID()
74     windowProxy_->MoveMagnification(WINDOW_MAGNIFICATION, deltaX, deltaY);
75 }
76 
IsTapOnHotArea(int32_t posX,int32_t posY)77 bool WindowMagnificationManager::IsTapOnHotArea(int32_t posX, int32_t posY)
78 {
79     if (windowProxy_ == nullptr) {
80         HILOG_ERROR("windowProxy_ is nullptr.");
81         return false;
82     }
83     return windowProxy_->IsTapOnHotArea(posX, posY);
84 }
85 
RefreshWindowParam(RotationType type)86 void WindowMagnificationManager::RefreshWindowParam(RotationType type)
87 {
88     HILOG_DEBUG();
89     CHECK_PROXY_PTR_VOID()
90     windowProxy_->RefreshWindowParam(WINDOW_MAGNIFICATION, type);
91 }
92 
IsTapOnMagnificationWindow(int32_t posX,int32_t posY)93 bool WindowMagnificationManager::IsTapOnMagnificationWindow(int32_t posX, int32_t posY)
94 {
95     if (windowProxy_ == nullptr) {
96         HILOG_ERROR("windowProxy_ is nullptr.");
97         return false;
98     }
99     return windowProxy_->IsTapOnMagnificationWindow(posX, posY);
100 }
101 
ConvertCoordinates(int32_t posX,int32_t posY)102 PointerPos WindowMagnificationManager::ConvertCoordinates(int32_t posX, int32_t posY)
103 {
104     PointerPos pos = {posX, posY};
105     if (windowProxy_ == nullptr) {
106         HILOG_ERROR("windowProxy_ is nullptr.");
107         return pos;
108     }
109     return windowProxy_->ConvertCoordinates(posX, posY);
110 }
111 
FixSourceCenter(bool needFix)112 void WindowMagnificationManager::FixSourceCenter(bool needFix)
113 {
114     CHECK_PROXY_PTR_VOID()
115     windowProxy_->FixSourceCenter(needFix);
116 }
117 
PersistScale()118 void WindowMagnificationManager::PersistScale()
119 {
120     CHECK_PROXY_PTR_VOID()
121     float scale = windowProxy_->GetScale();
122     HILOG_DEBUG("scale = %{public}f", scale);
123     Singleton<AccessibleAbilityManagerService>::GetInstance().SetMagnificationScale(scale);
124     Singleton<AccessibleAbilityManagerService>::GetInstance().AnnouncedForMagnification(
125         AnnounceType::ANNOUNCE_MAGNIFICATION_SCALE);
126 }
127 
GetSourceCenter()128 PointerPos WindowMagnificationManager::GetSourceCenter()
129 {
130     PointerPos pos = {0, 0};
131     if (windowProxy_ == nullptr) {
132         HILOG_ERROR("windowProxy_ is nullptr.");
133         return pos;
134     }
135     return windowProxy_->GetSourceCenter();
136 }
137 
FollowFocuseElement(int32_t centerX,int32_t centerY)138 void WindowMagnificationManager::FollowFocuseElement(int32_t centerX, int32_t centerY)
139 {
140     HILOG_DEBUG();
141     CHECK_PROXY_PTR_VOID()
142     windowProxy_->FollowFocuseElement(WINDOW_MAGNIFICATION, centerX, centerY);
143 }
144 
IsMagnificationWindowShow()145 bool WindowMagnificationManager::IsMagnificationWindowShow()
146 {
147     if (windowProxy_ == nullptr) {
148         HILOG_ERROR("windowProxy_ is nullptr.");
149         return false;
150     }
151     return windowProxy_->IsMagnificationWindowShow(WINDOW_MAGNIFICATION);
152 }
153 
GetScale()154 float WindowMagnificationManager::GetScale()
155 {
156     if (windowProxy_ == nullptr) {
157         HILOG_ERROR("windowProxy_ is nullptr.");
158         return DEFAULT_SCALE;
159     }
160     return windowProxy_->GetScale();
161 }
162 } // namespace Accessibility
163 } // namespace OHOS
164 // LCOV_EXCL_STOP