1 /* 2 * Copyright (c) 2022 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 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_PIPELINE_CONTAINER_WINDOW_MANAGER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_PIPELINE_CONTAINER_WINDOW_MANAGER_H 18 19 #include <functional> 20 21 #include "base/memory/ace_type.h" 22 #include "core/components/common/layout/constants.h" 23 24 namespace OHOS::Ace { 25 26 using WindowCallback = std::function<void(void)>; 27 using WindowModeCallback = std::function<WindowMode(void)>; 28 using WindowTypeCallback = std::function<WindowType(void)>; 29 using WindowSetMaximizeModeCallback = std::function<void(MaximizeMode)>; 30 using WindowGetMaximizeModeCallback = std::function<MaximizeMode(void)>; 31 32 class WindowManager : public virtual AceType { 33 DECLARE_ACE_TYPE(WindowManager, AceType); 34 35 public: 36 WindowManager() = default; 37 ~WindowManager() override = default; 38 SetAppIconId(int32_t id)39 void SetAppIconId(int32_t id) 40 { 41 appIconId_ = id; 42 } 43 GetAppIconId()44 int32_t GetAppIconId() const 45 { 46 return appIconId_; 47 } 48 SetAppLabelId(int32_t id)49 void SetAppLabelId(int32_t id) 50 { 51 appLabelId_ = id; 52 } 53 GetAppLabelId()54 int32_t GetAppLabelId() const 55 { 56 return appLabelId_; 57 } 58 SetWindowMinimizeCallBack(WindowCallback && callback)59 void SetWindowMinimizeCallBack(WindowCallback&& callback) 60 { 61 windowMinimizeCallback_ = std::move(callback); 62 } 63 SetWindowMaximizeCallBack(WindowCallback && callback)64 void SetWindowMaximizeCallBack(WindowCallback&& callback) 65 { 66 windowMaximizeCallback_ = std::move(callback); 67 } 68 SetWindowMaximizeFloatingCallBack(WindowCallback && callback)69 void SetWindowMaximizeFloatingCallBack(WindowCallback&& callback) 70 { 71 windowMaximizeFloatingCallback_ = std::move(callback); 72 } 73 SetWindowRecoverCallBack(WindowCallback && callback)74 void SetWindowRecoverCallBack(WindowCallback&& callback) 75 { 76 windowRecoverCallback_ = std::move(callback); 77 } 78 SetWindowCloseCallBack(WindowCallback && callback)79 void SetWindowCloseCallBack(WindowCallback&& callback) 80 { 81 windowCloseCallback_ = std::move(callback); 82 } 83 SetWindowSplitPrimaryCallBack(WindowCallback && callback)84 void SetWindowSplitPrimaryCallBack(WindowCallback&& callback) 85 { 86 windowSplitPrimaryCallback_ = std::move(callback); 87 } 88 SetWindowSplitSecondaryCallBack(WindowCallback && callback)89 void SetWindowSplitSecondaryCallBack(WindowCallback&& callback) 90 { 91 windowSplitSecondaryCallback_ = std::move(callback); 92 } 93 SetWindowGetModeCallBack(WindowModeCallback && callback)94 void SetWindowGetModeCallBack(WindowModeCallback&& callback) 95 { 96 windowGetModeCallback_ = std::move(callback); 97 } 98 SetWindowGetTypeCallBack(WindowTypeCallback && callback)99 void SetWindowGetTypeCallBack(WindowTypeCallback&& callback) 100 { 101 windowGetTypeCallback_ = std::move(callback); 102 } 103 SetWindowStartMoveCallBack(WindowCallback && callback)104 void SetWindowStartMoveCallBack(WindowCallback&& callback) 105 { 106 windowStartMoveCallback_ = std::move(callback); 107 } 108 SetWindowSetMaximizeModeCallBack(WindowSetMaximizeModeCallback && callback)109 void SetWindowSetMaximizeModeCallBack(WindowSetMaximizeModeCallback&& callback) 110 { 111 windowSetMaximizeModeCallback_ = std::move(callback); 112 } 113 SetWindowGetMaximizeModeCallBack(WindowGetMaximizeModeCallback && callback)114 void SetWindowGetMaximizeModeCallBack(WindowGetMaximizeModeCallback&& callback) 115 { 116 windowGetMaximizeModeCallback_ = std::move(callback); 117 } 118 WindowMinimize()119 void WindowMinimize() const 120 { 121 if (windowMinimizeCallback_) { 122 windowMinimizeCallback_(); 123 } 124 } 125 126 void WindowMaximize(bool supportFloatingMaximize = false) 127 { 128 if (supportFloatingMaximize && windowMaximizeFloatingCallback_) { 129 windowMaximizeFloatingCallback_(); 130 maximizeMode_ = GetWindowMaximizeMode(); 131 } 132 if (!supportFloatingMaximize && windowMaximizeCallback_) { 133 windowMaximizeCallback_(); 134 } 135 } 136 WindowRecover()137 void WindowRecover() 138 { 139 if (windowRecoverCallback_) { 140 windowRecoverCallback_(); 141 maximizeMode_ = MaximizeMode::MODE_RECOVER; 142 } 143 } 144 145 void FireWindowSplitCallBack(bool isPrimary = true) const 146 { 147 if (isPrimary && windowSplitPrimaryCallback_) { 148 windowSplitPrimaryCallback_(); 149 } 150 if (!isPrimary && windowSplitSecondaryCallback_) { 151 windowSplitSecondaryCallback_(); 152 } 153 } 154 WindowClose()155 void WindowClose() const 156 { 157 if (windowCloseCallback_) { 158 windowCloseCallback_(); 159 } 160 } 161 WindowStartMove()162 void WindowStartMove() const 163 { 164 if (windowStartMoveCallback_) { 165 windowStartMoveCallback_(); 166 } 167 } 168 GetWindowMode()169 WindowMode GetWindowMode() const 170 { 171 if (windowGetModeCallback_) { 172 return windowGetModeCallback_(); 173 } 174 return WindowMode::WINDOW_MODE_UNDEFINED; 175 } 176 GetWindowType()177 WindowType GetWindowType() const 178 { 179 if (windowGetTypeCallback_) { 180 return windowGetTypeCallback_(); 181 } 182 return WindowType::WINDOW_TYPE_UNDEFINED; 183 } 184 SetWindowMaximizeMode(MaximizeMode mode)185 void SetWindowMaximizeMode(MaximizeMode mode) 186 { 187 if (windowSetMaximizeModeCallback_) { 188 windowSetMaximizeModeCallback_(mode); 189 } 190 } 191 GetWindowMaximizeMode()192 MaximizeMode GetWindowMaximizeMode() const 193 { 194 if (windowGetMaximizeModeCallback_) { 195 return windowGetMaximizeModeCallback_(); 196 } 197 return MaximizeMode::MODE_RECOVER; 198 } 199 GetCurrentWindowMaximizeMode()200 MaximizeMode GetCurrentWindowMaximizeMode() const 201 { 202 return maximizeMode_; 203 } 204 SetCurrentWindowMaximizeMode(MaximizeMode mode)205 void SetCurrentWindowMaximizeMode(MaximizeMode mode) 206 { 207 maximizeMode_ = mode; 208 } 209 210 private: 211 int32_t appLabelId_ = 0; 212 int32_t appIconId_ = 0; 213 MaximizeMode maximizeMode_ = MaximizeMode::MODE_RECOVER; 214 WindowCallback windowMinimizeCallback_; 215 WindowCallback windowRecoverCallback_; 216 WindowCallback windowCloseCallback_; 217 WindowCallback windowSplitPrimaryCallback_; 218 WindowCallback windowSplitSecondaryCallback_; 219 WindowCallback windowStartMoveCallback_; 220 WindowCallback windowMaximizeCallback_; 221 WindowCallback windowMaximizeFloatingCallback_; 222 WindowSetMaximizeModeCallback windowSetMaximizeModeCallback_; 223 WindowGetMaximizeModeCallback windowGetMaximizeModeCallback_; 224 WindowModeCallback windowGetModeCallback_; 225 WindowTypeCallback windowGetTypeCallback_; 226 }; 227 228 } // namespace OHOS::Ace 229 230 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_PIPELINE_CONTAINER_WINDOW_MANAGER_H 231