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 #include "core/components_ng/event/event_hub.h" 17 18 #include "base/utils/utils.h" 19 #include "core/components_ng/base/frame_node.h" 20 21 namespace OHOS::Ace::NG { 22 AttachHost(const WeakPtr<FrameNode> & host)23void EventHub::AttachHost(const WeakPtr<FrameNode>& host) 24 { 25 host_ = host; 26 } 27 GetFrameNode() const28RefPtr<FrameNode> EventHub::GetFrameNode() const 29 { 30 return host_.Upgrade(); 31 } 32 AddSupportedState(UIState state)33void EventHub::AddSupportedState(UIState state) 34 { 35 if (!stateStyleMgr_) { 36 stateStyleMgr_ = MakeRefPtr<StateStyleManager>(host_); 37 } 38 stateStyleMgr_->AddSupportedState(state); 39 } 40 SetSupportedStates(UIState state)41void EventHub::SetSupportedStates(UIState state) 42 { 43 if (!stateStyleMgr_) { 44 stateStyleMgr_ = MakeRefPtr<StateStyleManager>(host_); 45 } 46 stateStyleMgr_->SetSupportedStates(state); 47 } 48 SetCurrentUIState(UIState state,bool flag)49void EventHub::SetCurrentUIState(UIState state, bool flag) 50 { 51 if (!stateStyleMgr_) { 52 stateStyleMgr_ = MakeRefPtr<StateStyleManager>(host_); 53 } 54 stateStyleMgr_->SetCurrentUIState(state, flag); 55 } 56 IsCurrentStateOn(UIState state)57bool EventHub::IsCurrentStateOn(UIState state) 58 { 59 if (!stateStyleMgr_) { 60 return false; 61 } 62 return stateStyleMgr_->IsCurrentStateOn(state); 63 } 64 CreateGetEventTargetImpl() const65GetEventTargetImpl EventHub::CreateGetEventTargetImpl() const 66 { 67 auto impl = [weak = host_]() -> std::optional<EventTarget> { 68 auto host = weak.Upgrade(); 69 CHECK_NULL_RETURN_NOLOG(host, std::nullopt); 70 EventTarget eventTarget; 71 eventTarget.id = std::to_string(host->GetId()); 72 eventTarget.type = host->GetTag(); 73 auto geometryNode = host->GetGeometryNode(); 74 auto offset = geometryNode->GetFrameOffset(); 75 auto size = geometryNode->GetFrameSize(); 76 eventTarget.area.SetOffset(DimensionOffset(offset)); 77 eventTarget.area.SetHeight(Dimension(size.Height())); 78 eventTarget.area.SetWidth(Dimension(size.Width())); 79 eventTarget.origin = DimensionOffset(host->GetOffsetRelativeToWindow() - offset); 80 return eventTarget; 81 }; 82 return impl; 83 } 84 MarkModifyDone()85void EventHub::MarkModifyDone() 86 { 87 if (stateStyleMgr_) { 88 // focused style is managered in focus event hub. 89 if (stateStyleMgr_->HasStateStyle(UI_STATE_PRESSED)) { 90 GetOrCreateGestureEventHub()->AddTouchEvent(stateStyleMgr_->GetPressedListener()); 91 } 92 if (stateStyleMgr_->HasStateStyle(UI_STATE_DISABLED)) { 93 if (enabled_) { 94 stateStyleMgr_->ResetCurrentUIState(UI_STATE_DISABLED); 95 } else { 96 stateStyleMgr_->UpdateCurrentUIState(UI_STATE_DISABLED); 97 } 98 } 99 } 100 101 if (gestureEventHub_) { 102 gestureEventHub_->OnModifyDone(); 103 } 104 OnModifyDone(); 105 } 106 107 } // namespace OHOS::Ace::NG