1 /* 2 * Copyright (c) 2021-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_COMPONENTS_TOUCH_LISTENER_RENDER_TOUCH_LISTENER_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOUCH_LISTENER_RENDER_TOUCH_LISTENER_H 18 19 #include "base/utils/event_callback.h" 20 #include "base/utils/macros.h" 21 #include "core/components/proxy/render_item_proxy.h" 22 #include "core/gestures/raw_recognizer.h" 23 #include "core/gestures/swipe_recognizer.h" 24 #include "core/pipeline/base/component.h" 25 #include "core/pipeline/base/render_node.h" 26 27 namespace OHOS::Ace { 28 29 class ACE_EXPORT RenderTouchListener final : public RenderProxy, public TouchEventTarget { 30 DECLARE_ACE_TYPE(RenderTouchListener, RenderProxy, TouchEventTarget); 31 32 public: 33 RenderTouchListener(); 34 ~RenderTouchListener() override = default; 35 static RefPtr<RenderNode> Create(); 36 void Update(const RefPtr<Component>& component) override; 37 SetOnTouchDown(const OnTouchEventCallback & onTouchDown)38 void SetOnTouchDown(const OnTouchEventCallback& onTouchDown) const 39 { 40 if (onTouchDown) { 41 rawRecognizer_->SetOnTouchDown(onTouchDown); 42 } 43 } SetOnTouchMove(const OnTouchEventCallback & onTouchMove)44 void SetOnTouchMove(const OnTouchEventCallback& onTouchMove) const 45 { 46 if (onTouchMove) { 47 rawRecognizer_->SetOnTouchMove(onTouchMove); 48 } 49 } SetOnTouchUp(const OnTouchEventCallback & onTouchUp)50 void SetOnTouchUp(const OnTouchEventCallback& onTouchUp) const 51 { 52 if (onTouchUp) { 53 rawRecognizer_->SetOnTouchUp(onTouchUp); 54 } 55 } SetOnTouchCancel(const OnTouchEventCallback & onTouchCancel)56 void SetOnTouchCancel(const OnTouchEventCallback& onTouchCancel) const 57 { 58 if (onTouchCancel) { 59 rawRecognizer_->SetOnTouchCancel(onTouchCancel); 60 } 61 } SetOnSwipe(const SwipeCallback & onSwipeCallback)62 void SetOnSwipe(const SwipeCallback& onSwipeCallback) 63 { 64 if (onSwipeCallback) { 65 if (!swipeRecognizer_) { 66 swipeRecognizer_ = AceType::MakeRefPtr<SwipeRecognizer>(); 67 } 68 } 69 } 70 71 bool GetVisible() const override; 72 73 bool DispatchEvent(const TouchEvent& point) override; 74 bool HandleEvent(const TouchEvent& point) override; 75 bool TriggerTouchCallBack(const TouchEvent& changedPoint); 76 SetOnTouchFocusEventCallback(const std::function<void (void)> & onTouchFocusEventCallback)77 void SetOnTouchFocusEventCallback(const std::function<void(void)>& onTouchFocusEventCallback) 78 { 79 onTouchFocusEventCallback_ = onTouchFocusEventCallback; 80 } 81 82 protected: 83 void OnTouchTestHit( 84 const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; 85 86 private: 87 RefPtr<RawRecognizer> rawRecognizer_; 88 RefPtr<SwipeRecognizer> swipeRecognizer_; 89 90 bool isVisible_ = true; 91 Offset coordinateOffset_; 92 std::function<void(const std::shared_ptr<TouchEventInfo>&)> onTouchEventCallback_; 93 std::function<void(void)> onTouchFocusEventCallback_; 94 std::map<int, TouchEvent> touchPointMap_; 95 }; 96 97 } // namespace OHOS::Ace 98 99 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOUCH_LISTENER_RENDER_TOUCH_LISTENER_H 100