From: Lee Morgan Date: Tue, 12 May 2015 12:08:00 +0000 (+0100) Subject: Removed boost from builder X-Git-Tag: dali_1.0.43~4^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=55a9edf280ac4e4eb085fcfd40496aa5db1a32a5 Removed boost from builder Change-Id: I7c58a0bf2a9c1a10e947257f007f2d4704d07526 --- diff --git a/automated-tests/coverage.sh b/automated-tests/coverage.sh index 678dea7..ad7d29b 100755 --- a/automated-tests/coverage.sh +++ b/automated-tests/coverage.sh @@ -13,7 +13,7 @@ for i in `find . -name "*.dir"` ; do if [[ $? -eq 0 ]] then lcov $LCOV_OPTS --directory . -c -o dali.info - lcov $LCOV_OPTS --remove dali.info "*boost*" "/usr/include/*" "*/automated-tests/*" -o dali.info + lcov $LCOV_OPTS --remove dali.info "/usr/include/*" "*/automated-tests/*" -o dali.info fi ) done diff --git a/dali-toolkit/internal/builder/builder-impl.cpp b/dali-toolkit/internal/builder/builder-impl.cpp index 3bf70f2..6046ddd 100644 --- a/dali-toolkit/internal/builder/builder-impl.cpp +++ b/dali-toolkit/internal/builder/builder-impl.cpp @@ -20,7 +20,6 @@ // EXTERNAL INCLUDES #include -#include #include #include #include @@ -30,6 +29,7 @@ #include #include #include +#include #include // INTERNAL INCLUDES @@ -56,8 +56,8 @@ extern bool SetPropertyFromNode( const TreeNode& node, Property::Value& value ); extern bool SetPropertyFromNode( const TreeNode& node, Property::Value& value, const Replacement& replacements ); extern bool SetPropertyFromNode( const TreeNode& node, Property::Type type, Property::Value& value ); extern bool SetPropertyFromNode( const TreeNode& node, Property::Type type, Property::Value& value, const Replacement& replacements ); -extern Actor SetupSignalAction(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor, boost::function quitAction, Dali::Toolkit::Internal::Builder* const builder); -extern Actor SetupPropertyNotification(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor, boost::function quitAction, Dali::Toolkit::Internal::Builder* const builder); +extern Actor SetupSignalAction(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor, Dali::Toolkit::Internal::Builder* const builder); +extern Actor SetupPropertyNotification(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor, Dali::Toolkit::Internal::Builder* const builder); extern Actor SetupActor( const TreeNode& node, Actor& actor, const Replacement& constant ); #if defined(DEBUG_ENABLED) @@ -217,22 +217,6 @@ void CollectAllStyles( const TreeNode& stylesCollection, const TreeNode& style, } } -struct QuitAction -{ -public: - QuitAction( Builder& builder ) - : mBuilder( builder ) - { - } - - void operator()(void) - { - mBuilder.EmitQuitSignal(); - } - -private: - Builder& mBuilder; -}; } // namespace anon @@ -361,9 +345,8 @@ void Builder::ApplyProperties( const TreeNode& root, const TreeNode& node, SetupActor( node, actor, constant ); // add signals - QuitAction quitAction( *this ); - SetupSignalAction( mSlotDelegate.GetConnectionTracker(), root, node, actor, quitAction, this ); - SetupPropertyNotification( mSlotDelegate.GetConnectionTracker(), root, node, actor, quitAction, this ); + SetupSignalAction( mSlotDelegate.GetConnectionTracker(), root, node, actor, this ); + SetupPropertyNotification( mSlotDelegate.GetConnectionTracker(), root, node, actor, this ); } } else diff --git a/dali-toolkit/internal/builder/builder-signals.cpp b/dali-toolkit/internal/builder/builder-signals.cpp index 32c43d4..b3372f2 100644 --- a/dali-toolkit/internal/builder/builder-signals.cpp +++ b/dali-toolkit/internal/builder/builder-signals.cpp @@ -16,11 +16,11 @@ */ // EXTERNAL INCLUDES -#include #include #include #include #include + #include #include @@ -128,6 +128,16 @@ struct GenericAction }; }; +struct QuitAction +{ + Dali::IntrusivePtr builder; + + void operator()(void) + { + builder->EmitQuitSignal(); + } +}; + // Delay an animation play; ie wait as its not on stage yet struct DelayedAnimationPlay { @@ -391,12 +401,63 @@ void GetParameters(const TreeNode& child, Property::Map& params) } } -void DoNothing(void) {}; +// Shim for the property notifcation signal +template +struct PropertyNotifcationSignalShim +{ + T mFunctor; + + PropertyNotifcationSignalShim(T& functor) : mFunctor(functor) {} + + void operator()(PropertyNotification& /* source */) + { + mFunctor(); + } +}; + +// Specializations for the different signal connection calls between actor & PropertyNotification +template +struct SignalConnector {}; + +// Actor specialization +template <> +struct SignalConnector { + Actor& mActor; + ConnectionTracker* mTracker; + const std::string& mName; + + SignalConnector(ConnectionTracker* tracker, Actor& actor, const std::string& name) + : mActor(actor), mTracker(tracker), mName(name) {} + + template + void Connect(T& functor) + { + mActor.ConnectSignal( mTracker, mName, functor); + } +}; + +// PropertyNotification specialization +template <> +struct SignalConnector +{ + PropertyNotification& mNotification; + ConnectionTracker* mTracker; + + SignalConnector(ConnectionTracker* tracker, PropertyNotification ¬ification) + : mNotification(notification), mTracker(tracker) {} + + template + void Connect(T& functor) + { + mNotification.NotifySignal().Connect( mTracker, PropertyNotifcationSignalShim(functor) ); + } +}; /** - * Get an action as boost function callback + * Set an action functor on a signal */ -boost::function GetAction(const TreeNode &root, const TreeNode &child, Actor actor, boost::function quitAction, Dali::Toolkit::Internal::Builder* const builder) +template +void SetActionOnSignal(const TreeNode &root, const TreeNode &child, Actor actor, Dali::Toolkit::Internal::Builder* const builder, SignalConnector& connector) { OptionalString childActorName(IsString( IsChild(&child, "child-actor")) ); OptionalString actorName(IsString( IsChild(&child, "actor")) ); @@ -406,8 +467,6 @@ boost::function GetAction(const TreeNode &root, const TreeNode &chi OptionalString actionName = IsString( IsChild(&child, "action") ); DALI_ASSERT_ALWAYS(actionName && "Signal must have an action"); - boost::function callback = DoNothing; - if(childActorName) { ChildActorAction action; @@ -415,7 +474,7 @@ boost::function GetAction(const TreeNode &root, const TreeNode &chi action.childName = *childActorName; action.actionName = *actionName; GetParameters(child, action.parameters); - callback = action; + connector.Connect( action ); } else if(actorName) { @@ -429,7 +488,7 @@ boost::function GetAction(const TreeNode &root, const TreeNode &chi { DALI_SCRIPT_WARNING("Cannot set property for set property action\n"); } - callback = action; + connector.Connect( action ); } else { @@ -437,12 +496,14 @@ boost::function GetAction(const TreeNode &root, const TreeNode &chi action.actorName = *actorName; action.actionName = *actionName; GetParameters(child, action.parameters); - callback = action; + connector.Connect( action ); } } else if("quit" == *actionName) { - callback = quitAction; + QuitAction action; + action.builder = builder; + connector.Connect( action ); } else if("play" == *actionName) { @@ -456,7 +517,7 @@ boost::function GetAction(const TreeNode &root, const TreeNode &chi action.animNode = animNode; action.builder = builder; // @todo; put constants into the map - callback = action; + connector.Connect( action ); } else { @@ -535,12 +596,9 @@ boost::function GetAction(const TreeNode &root, const TreeNode &chi action.ranges.push_back(*range); action.wrapRanges.push_back(wrap); } - - callback = action; + connector.Connect(action); } } - - } else if("removeConstraints" == *actionName ) { @@ -574,7 +632,7 @@ boost::function GetAction(const TreeNode &root, const TreeNode &chi } } } - callback = action; + connector.Connect(action); } } else @@ -584,10 +642,8 @@ boost::function GetAction(const TreeNode &root, const TreeNode &chi action.actorName = actor.GetName(); action.actionName = *actionName; GetParameters(child, action.parameters); - callback = action; + connector.Connect( action ); } - - return callback; } @@ -646,7 +702,7 @@ Actor SetupPropertyNotification(const TreeNode &child, Actor actor, Dali::Toolki /** * Setup signals and actions on an actor */ -Actor SetupSignalAction(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor, boost::function quitAction, Dali::Toolkit::Internal::Builder* const builder ) +Actor SetupSignalAction(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor, Dali::Toolkit::Internal::Builder* const builder ) { DALI_ASSERT_ALWAYS(actor); @@ -663,9 +719,8 @@ Actor SetupSignalAction(ConnectionTracker* tracker, const TreeNode &root, const OptionalString name( IsString( IsChild( key_child.second, "name")) ); DALI_ASSERT_ALWAYS(name && "Signal must have a name"); - boost::function callback = GetAction(root, key_child.second, actor, quitAction, builder ); - - actor.ConnectSignal(tracker, *name, callback); + SignalConnector connector(tracker, actor, *name); + SetActionOnSignal(root, key_child.second, actor, builder, connector); } } @@ -675,7 +730,7 @@ Actor SetupSignalAction(ConnectionTracker* tracker, const TreeNode &root, const /** * Setup Property notifications for an actor */ -Actor SetupPropertyNotification(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor, boost::function quitAction, Dali::Toolkit::Internal::Builder* const builder ) +Actor SetupPropertyNotification(ConnectionTracker* tracker, const TreeNode &root, const TreeNode &child, Actor actor, Dali::Toolkit::Internal::Builder* const builder ) { DALI_ASSERT_ALWAYS(actor); @@ -687,10 +742,6 @@ Actor SetupPropertyNotification(ConnectionTracker* tracker, const TreeNode &root { const TreeNode::KeyNodePair& key_child = *iter; - // Actor actions reference by pointer because of circular reference actor->signal - // So this callback should only go onto the actor maintained list. - boost::function callback = GetAction(root, key_child.second, actor, quitAction, builder ); - OptionalString prop(IsString( IsChild(key_child.second, "property")) ); DALI_ASSERT_ALWAYS(prop && "Notification signal must specify a property"); @@ -704,33 +755,38 @@ Actor SetupPropertyNotification(ConnectionTracker* tracker, const TreeNode &root { PropertyNotification notification = actor.AddPropertyNotification( actor.GetPropertyIndex(*prop), LessThanCondition(1.f) ); - notification.NotifySignal().Connect( tracker, FunctorDelegate::New(callback) ); + SignalConnector connector(tracker, notification); + SetActionOnSignal(root, key_child.second, actor, builder, connector); } else if("LessThan" == *cond) { PropertyNotification notification = actor.AddPropertyNotification( actor.GetPropertyIndex(*prop), LessThanCondition(GetConditionArg0(key_child.second)) ); - notification.NotifySignal().Connect( tracker, FunctorDelegate::New(callback) ); + SignalConnector connector(tracker, notification); + SetActionOnSignal(root, key_child.second, actor, builder, connector); } else if("GreaterThan" == *cond) { PropertyNotification notification = actor.AddPropertyNotification( actor.GetPropertyIndex(*prop), GreaterThanCondition(GetConditionArg0(key_child.second)) ); - notification.NotifySignal().Connect( tracker, FunctorDelegate::New(callback) ); + SignalConnector connector(tracker, notification); + SetActionOnSignal(root, key_child.second, actor, builder, connector); } else if("Inside" == *cond) { PropertyNotification notification = actor.AddPropertyNotification( actor.GetPropertyIndex(*prop), InsideCondition(GetConditionArg0(key_child.second), GetConditionArg1(key_child.second)) ); - notification.NotifySignal().Connect( tracker, FunctorDelegate::New(callback) ); + SignalConnector connector(tracker, notification); + SetActionOnSignal(root, key_child.second, actor, builder, connector); } else if("Outside" == *cond) { PropertyNotification notification = actor.AddPropertyNotification( actor.GetPropertyIndex(*prop), OutsideCondition(GetConditionArg0(key_child.second), GetConditionArg1(key_child.second)) ); - notification.NotifySignal().Connect( tracker, FunctorDelegate::New(callback) ); + SignalConnector connector(tracker, notification); + SetActionOnSignal(root, key_child.second, actor, builder, connector); } else { diff --git a/packaging/dali-toolkit.spec b/packaging/dali-toolkit.spec index 9614bfb..434e3d4 100644 --- a/packaging/dali-toolkit.spec +++ b/packaging/dali-toolkit.spec @@ -13,7 +13,6 @@ Requires: dali # Do NOT put an adaptor here - it is an application choice which adaptor to use BuildRequires: pkgconfig BuildRequires: pkgconfig(dlog) -BuildRequires: boost-devel BuildRequires: pkgconfig(dali) BuildRequires: pkgconfig(dali-core) @@ -28,7 +27,6 @@ user interface functionality. Summary: Application development package for the OpenGLES Canvas toolkit Group: Development/Building Requires: %{name} = %{version}-%{release} -Requires: boost-devel %description devel Application development package for the OpenGLES Canvas toolkit - headers and package config