2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali/internal/event/events/tap-gesture/tap-gesture-detector-impl.h>
22 #include <cstring> // for strcmp
25 #include <dali/public-api/events/tap-gesture.h>
26 #include <dali/public-api/object/type-registry.h>
27 #include <dali/integration-api/debug.h>
28 #include <dali/internal/event/events/gesture-event-processor.h>
39 const unsigned int DEFAULT_TAPS_REQUIRED = 1u;
40 const unsigned int DEFAULT_TOUCHES_REQUIRED = 1u;
43 const char* const SIGNAL_TAP_DETECTED = "tapDetected";
47 return Dali::TapGestureDetector::New();
50 TypeRegistration mType( typeid(Dali::TapGestureDetector), typeid(Dali::GestureDetector), Create );
52 SignalConnectorType signalConnector1( mType, SIGNAL_TAP_DETECTED, &TapGestureDetector::DoConnectSignal );
56 TapGestureDetectorPtr TapGestureDetector::New()
58 return new TapGestureDetector;
61 TapGestureDetectorPtr TapGestureDetector::New( unsigned int tapsRequired )
63 return new TapGestureDetector( tapsRequired );
66 TapGestureDetector::TapGestureDetector()
67 : GestureDetector( GestureType::TAP ),
68 mMinimumTapsRequired( DEFAULT_TAPS_REQUIRED ),
69 mMaximumTapsRequired( DEFAULT_TAPS_REQUIRED ),
70 mTouchesRequired( DEFAULT_TOUCHES_REQUIRED )
74 TapGestureDetector::TapGestureDetector( unsigned int tapsRequired )
75 : GestureDetector( GestureType::TAP ),
76 mMinimumTapsRequired( tapsRequired ),
77 mMaximumTapsRequired( tapsRequired ),
78 mTouchesRequired( DEFAULT_TOUCHES_REQUIRED )
82 TapGestureDetector::~TapGestureDetector() = default;
84 void TapGestureDetector::SetMinimumTapsRequired(unsigned int taps)
86 if ( mMinimumTapsRequired != taps )
88 mMinimumTapsRequired = taps;
90 if ( !mAttachedActors.empty() )
92 mGestureEventProcessor.GestureDetectorUpdated(this);
97 void TapGestureDetector::SetMaximumTapsRequired(unsigned int taps)
99 if ( mMaximumTapsRequired != taps )
101 mMaximumTapsRequired = taps;
103 if ( !mAttachedActors.empty() )
105 mGestureEventProcessor.GestureDetectorUpdated(this);
110 void TapGestureDetector::SetTouchesRequired(unsigned int touches)
112 if (mTouchesRequired != touches)
114 mTouchesRequired = touches;
116 if (!mAttachedActors.empty())
118 mGestureEventProcessor.GestureDetectorUpdated(this);
123 unsigned int TapGestureDetector::GetMinimumTapsRequired() const
125 return mMinimumTapsRequired;
128 unsigned int TapGestureDetector::GetMaximumTapsRequired() const
130 return mMaximumTapsRequired;
133 unsigned int TapGestureDetector::GetTouchesRequired() const
135 return mTouchesRequired;
138 void TapGestureDetector::EmitTapGestureSignal(Dali::Actor tappedActor, const Dali::TapGesture& tap)
140 // Guard against destruction during signal emission
141 Dali::TapGestureDetector handle( this );
143 mDetectedSignal.Emit( tappedActor, tap );
146 bool TapGestureDetector::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
148 bool connected( true );
149 TapGestureDetector* gesture = static_cast< TapGestureDetector* >(object); // TypeRegistry guarantees that this is the correct type.
151 if ( 0 == strcmp( signalName.c_str(), SIGNAL_TAP_DETECTED ) )
153 gesture->DetectedSignal().Connect( tracker, functor );
157 // signalName does not match any signal
164 void TapGestureDetector::OnActorAttach(Actor& actor)
169 void TapGestureDetector::OnActorDetach(Actor& actor)
174 void TapGestureDetector::OnActorDestroyed(Object& object)
179 } // namespace Internal