}
}
- ApplyProperties( root, node, handle, replacements );
-
- if( actor)
+ if( actor )
{
// add children of all the styles
if( OptionalChild actors = IsChild( node, KEYNAME_ACTORS ) )
parent.Add( actor );
}
}
-
+ else
+ {
+ ApplyProperties( root, node, handle, replacements );
+ }
}
else
{
}
}
+void ScrollViewTwistEffect::SetMaxSwingAngle(const Vector2& maxSwingAngle)
+{
+ mMaxSwingAngle = maxSwingAngle;
+}
+
+Vector2 ScrollViewTwistEffect::GetMaxSwingAngle() const
+{
+ return mMaxSwingAngle;
+}
+
void ScrollViewTwistEffect::SetSwingDropOff(const Vector2& dropOff, const Vector2& distance, AlphaFunction function)
{
- if( mDropOffDistance.LengthSquared() > Math::MACHINE_EPSILON_1 && mDropOff.LengthSquared() > Math::MACHINE_EPSILON_1 )
+ if( distance.LengthSquared() > Math::MACHINE_EPSILON_1 && dropOff.LengthSquared() > Math::MACHINE_EPSILON_1 )
{
mFlags |= FlagDropOff;
mDropOff = dropOff;
mFlags = mFlags & ~FlagDefaultDropOff;
}
+void ScrollViewTwistEffect::GetSwingDropOff( Vector2& dropOff, Vector2& distance, AlphaFunction& function ) const
+{
+ dropOff = mDropOff;
+ distance = mDropOffDistance;
+ function = mDropOffFunction;
+}
+
void ScrollViewTwistEffect::OnAttach(Toolkit::ScrollView& scrollView)
{
// Create effect-time property if not already created.
/**
* @copydoc Toolkit::ScrollViewEffect::SetMaxSwingAngle
*/
- void SetMaxSwingAngle(const Vector2& maxSwingAngle) { mMaxSwingAngle = maxSwingAngle; }
+ void SetMaxSwingAngle(const Vector2& maxSwingAngle);
+
+ /**
+ * @copydoc Toolkit::ScrollViewEffect::GetMaxSwingAngle
+ */
+ Vector2 GetMaxSwingAngle() const;
/**
* @copydoc Toolkit::ScrollViewEffect::SetSwingDropOff
*/
void SetSwingDropOff(const Vector2& dropOff, const Vector2& distance, AlphaFunction function = NULL);
+ /**
+ * @copydoc Toolkit::ScrollViewEffect::GetSwingDropOff
+ */
+ void GetSwingDropOff( Vector2& dropOff, Vector2& distance, AlphaFunction& function ) const;
+
public:
/**
TypeAction ACTION_TYPE_1( CONTROL_TYPE, Toolkit::Control::ACTION_CONTROL_ACTIVATED, &Internal::Control::DoAction );
+SignalConnectorType SIGNAL_CONNECTOR_1( CONTROL_TYPE, Toolkit::Control::SIGNAL_KEY_EVENT, &Internal::Control::DoConnectSignal );
+SignalConnectorType SIGNAL_CONNECTOR_2( CONTROL_TYPE, Toolkit::Control::SIGNAL_TAPPED, &Internal::Control::DoConnectSignal );
+SignalConnectorType SIGNAL_CONNECTOR_3( CONTROL_TYPE, Toolkit::Control::SIGNAL_PANNED, &Internal::Control::DoConnectSignal );
+SignalConnectorType SIGNAL_CONNECTOR_4( CONTROL_TYPE, Toolkit::Control::SIGNAL_PINCHED, &Internal::Control::DoConnectSignal );
+SignalConnectorType SIGNAL_CONNECTOR_5( CONTROL_TYPE, Toolkit::Control::SIGNAL_LONG_PRESSED, &Internal::Control::DoConnectSignal );
+
/**
* Structure which holds information about the background of a control
*/
return ret;
}
+bool Control::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
+{
+ Dali::BaseHandle handle( object );
+
+ bool connected( false );
+ Toolkit::Control control = Toolkit::Control::DownCast(handle);
+ if ( control )
+ {
+ Control& controlImpl( control.GetImplementation() );
+ connected = true;
+
+ if ( Toolkit::Control::SIGNAL_KEY_EVENT == signalName )
+ {
+ controlImpl.KeyEventSignal().Connect( tracker, functor );
+ }
+ else if( Toolkit::Control::SIGNAL_TAPPED == signalName )
+ {
+ controlImpl.EnableGestureDetection( Gesture::Tap );
+ controlImpl.GetTapGestureDetector().DetectedSignal().Connect( tracker, functor );
+ }
+ else if( Toolkit::Control::SIGNAL_PANNED == signalName )
+ {
+ controlImpl.EnableGestureDetection( Gesture::Pan );
+ controlImpl.GetPanGestureDetector().DetectedSignal().Connect( tracker, functor );
+ }
+ else if( Toolkit::Control::SIGNAL_PINCHED == signalName )
+ {
+ controlImpl.EnableGestureDetection( Gesture::Pinch );
+ controlImpl.GetPinchGestureDetector().DetectedSignal().Connect( tracker, functor );
+ }
+ else if( Toolkit::Control::SIGNAL_LONG_PRESSED == signalName )
+ {
+ controlImpl.EnableGestureDetection( Gesture::LongPress );
+ controlImpl.GetLongPressGestureDetector().DetectedSignal().Connect( tracker, functor );
+ }
+ else
+ {
+ // signalName does not match any signal
+ connected = false;
+ }
+ }
+ return connected;
+}
+
void Control::DoStyleChange( Toolkit::StyleManager styleManager, StyleChange change )
{
if( change.themeChange )
mImpl->SignalDisconnected( slotObserver, callback );
}
-std::size_t Control::GetConnectionCount() const
-{
- return mImpl->GetConnectionCount();
-}
-
Control::Control( ControlBehaviour behaviourFlags )
: CustomActorImpl( behaviourFlags & REQUIRES_TOUCH_EVENTS ),
mImpl(new Impl(*this))
static bool DoAction(BaseObject* object, const std::string& actionName, const std::vector<Property::Value>& attributes);
/**
+ * Connects a callback function with the object's signals.
+ * @param[in] object The object providing the signal.
+ * @param[in] tracker Used to disconnect the signal.
+ * @param[in] signalName The signal to connect to.
+ * @param[in] functor A newly allocated FunctorDelegate.
+ * @return True if the signal was connected.
+ * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the caller is responsible for deleting the unused functor.
+ */
+ static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor );
+
+ /**
* @brief If deriving classes wish to fine tune pinch gesture
* detection then they can access the gesture detector through this
* API and modify the detection.
*/
virtual void SignalDisconnected( SlotObserver* slotObserver, CallbackBase* callback );
- /**
- * @copydoc ConnectionTrackerInterface::GetConnectionCount
- */
- virtual std::size_t GetConnectionCount() const;
-
protected:
/**
{
const char* const Control::ACTION_CONTROL_ACTIVATED = "control-activated";
+
const char* const Control::SIGNAL_KEY_EVENT = "key-event";
+const char* const Control::SIGNAL_TAPPED = "tapped";
+const char* const Control::SIGNAL_PANNED = "panned";
+const char* const Control::SIGNAL_PINCHED = "pinched";
+const char* const Control::SIGNAL_LONG_PRESSED = "long-pressed";
Control Control::New()
{
/// @name Signals
/** @{ */
static const char* const SIGNAL_KEY_EVENT; ///< name "key-event"
+ static const char* const SIGNAL_TAPPED; ///< name "tapped"
+ static const char* const SIGNAL_PANNED; ///< name "panned"
+ static const char* const SIGNAL_PINCHED; ///< name "pinched"
+ static const char* const SIGNAL_LONG_PRESSED; ///< name "long-pressed"
/** @} */
/// @name Actions
GetImpl(*this).SetMaxSwingAngle(maxSwingAngle);
}
+Vector2 ScrollViewTwistEffect::GetMaxSwingAngle() const
+{
+ return GetImpl( *this ).GetMaxSwingAngle();
+}
+
void ScrollViewTwistEffect::SetSwingDropOff(const Vector2& dropOff, const Vector2& distance, AlphaFunction function)
{
GetImpl(*this).SetSwingDropOff(dropOff, distance, function);
}
+void ScrollViewTwistEffect::GetSwingDropOff( Vector2& dropOff, Vector2& distance, AlphaFunction& function ) const
+{
+ GetImpl(*this).GetSwingDropOff(dropOff, distance, function);
+}
+
} // namespace Toolkit
} // namespace Dali
void SetMaxSwingAngle(const Vector2& maxSwingAngle);
/**
+ * @brief Retrieve the maximum swing angle when at zero drop off.
+ *
+ * @return The maximum swing angle for x and y axes
+ */
+ Vector2 GetMaxSwingAngle() const;
+
+ /**
* @brief Set the drop off values to affect the amount of swing
* angle applied to an actor the further it is from the scroll
* position.
*/
void SetSwingDropOff(const Vector2& dropOff, const Vector2& distance, AlphaFunction function = NULL);
+ /**
+ * @brief Get the drop off values that affect the amount of swing angle that is applied to an actor.
+ *
+ * @param[out] dropOff The current drop-off amount.
+ * @param[out] distance The current distance to apply drop-off in pixels.
+ * @param[out] function The current alpha function used to affect how the drop iff is applied over the distance.
+ */
+ void GetSwingDropOff( Vector2& dropOff, Vector2& distance, AlphaFunction& function ) const;
+
protected:
/**