• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 #include "window.h"
17 #include "window_helper.h"
18 #include "window_impl.h"
19 #include "window_manager_hilog.h"
20 #include "wm_common.h"
21 
22 namespace OHOS {
23 namespace Rosen {
24 namespace {
25     constexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_WINDOW, "WindowImpl"};
26 }
Create(const std::string & windowName,sptr<WindowOption> & option,const std::shared_ptr<OHOS::AbilityRuntime::Context> & context)27 sptr<Window> Window::Create(const std::string& windowName, sptr<WindowOption>& option,
28     const std::shared_ptr<OHOS::AbilityRuntime::Context>& context)
29 {
30     if (windowName.empty()) {
31         WLOGFE("window name is empty");
32         return nullptr;
33     }
34     if (option == nullptr) {
35         option = new(std::nothrow) WindowOption();
36         if (option == nullptr) {
37             WLOGFE("malloc option failed");
38             return nullptr;
39         }
40     }
41     WindowType type = option->GetWindowType();
42     if (!(WindowHelper::IsAppWindow(type) || WindowHelper::IsSystemWindow(type))) {
43         WLOGFE("window type is invalid %{public}d", type);
44         return nullptr;
45     }
46     option->SetWindowName(windowName);
47     sptr<WindowImpl> windowImpl = new(std::nothrow) WindowImpl(option);
48     if (windowImpl == nullptr) {
49         WLOGFE("malloc windowImpl failed");
50         return nullptr;
51     }
52     WMError error = windowImpl->Create(option->GetParentName(), context);
53     if (error != WMError::WM_OK) {
54         return nullptr;
55     }
56     return windowImpl;
57 }
58 
Find(const std::string & windowName)59 sptr<Window> Window::Find(const std::string& windowName)
60 {
61     return WindowImpl::Find(windowName);
62 }
63 
GetTopWindowWithContext(const std::shared_ptr<AbilityRuntime::Context> & context)64 sptr<Window> Window::GetTopWindowWithContext(const std::shared_ptr<AbilityRuntime::Context>& context)
65 {
66     return WindowImpl::GetTopWindowWithContext(context);
67 }
68 
GetTopWindowWithId(uint32_t mainWinId)69 sptr<Window> Window::GetTopWindowWithId(uint32_t mainWinId)
70 {
71     return WindowImpl::GetTopWindowWithId(mainWinId);
72 }
73 
GetSubWindow(uint32_t parentId)74 std::vector<sptr<Window>> Window::GetSubWindow(uint32_t parentId)
75 {
76     return WindowImpl::GetSubWindow(parentId);
77 }
78 
Marshalling(Parcel & parcel) const79 bool OccupiedAreaChangeInfo::Marshalling(Parcel& parcel) const
80 {
81     return parcel.WriteInt32(rect_.posX_) && parcel.WriteInt32(rect_.posY_) &&
82         parcel.WriteUint32(rect_.width_) && parcel.WriteUint32(rect_.height_) &&
83         parcel.WriteUint32(static_cast<uint32_t>(type_));
84 }
85 
Unmarshalling(Parcel & parcel)86 OccupiedAreaChangeInfo* OccupiedAreaChangeInfo::Unmarshalling(Parcel& parcel)
87 {
88     OccupiedAreaChangeInfo* occupiedAreaChangeInfo = new OccupiedAreaChangeInfo();
89     bool res = parcel.ReadInt32(occupiedAreaChangeInfo->rect_.posX_) &&
90         parcel.ReadInt32(occupiedAreaChangeInfo->rect_.posY_) &&
91         parcel.ReadUint32(occupiedAreaChangeInfo->rect_.width_) &&
92         parcel.ReadUint32(occupiedAreaChangeInfo->rect_.height_);
93     if (!res) {
94         delete occupiedAreaChangeInfo;
95         return nullptr;
96     }
97     occupiedAreaChangeInfo->type_ = static_cast<OccupiedAreaType>(parcel.ReadUint32());
98     return occupiedAreaChangeInfo;
99 }
100 } // namespace Rosen
101 } // namespace OHOS
102