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_GESTURES_MULTI_FINGERS_RECOGNIZER_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_MULTI_FINGERS_RECOGNIZER_H
18 
19 #include <functional>
20 #include <map>
21 
22 #include "core/gestures/gesture_recognizer.h"
23 
24 namespace OHOS::Ace {
25 
26 // ClickRecognizer identifies only single click events.
27 // For long press and double click, see: LongPressRecognizer and DoubleClickRecognizer.
28 class MultiFingersRecognizer : public GestureRecognizer {
29     DECLARE_ACE_TYPE(MultiFingersRecognizer, GestureRecognizer);
30 
31 public:
32     MultiFingersRecognizer() = default;
33     ~MultiFingersRecognizer() override = default;
34 
35     void OnAccepted(size_t touchId) override;
36     void OnRejected(size_t touchId) override;
37     void AddToReferee(size_t touchId, const RefPtr<GestureRecognizer>& recognizer) override;
38     void DelFromReferee(size_t touchId, const RefPtr<GestureRecognizer>& recognizer) override;
39     bool IsInReferee(size_t touchId);
40 
41     void Adjudicate(const RefPtr<GestureRecognizer>& recognizer, GestureDisposal disposal);
42 
OnAccepted()43     virtual void OnAccepted() {}
OnRejected()44     virtual void OnRejected() {}
45 
SetRefereePointer(size_t touchId)46     void SetRefereePointer(size_t touchId)
47     {
48         refereePointers_.emplace(touchId);
49     }
50 
51     std::set<size_t> refereePointers_;
52 
53     void SetFingerList(const std::map<int32_t, TouchEvent> touchPoints, const Offset& coordinateOffset,
54         std::list<FingerInfo>& fingerList);
55 
56 private:
57     size_t acceptedCount_ = 0;
58 };
59 
60 } // namespace OHOS::Ace
61 
62 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_MULTI_FINGERS_RECOGNIZER_H
63