X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Flayouting%2Flayout-controller-impl.h;h=8f78c32da2cd47c207d7f2b72fc0c91dedc02d0f;hb=7c4829108a1196e07f0eb93207ea234e3741642b;hp=08db259cd1cd42ec7ca2f454df93c6c012fbc823;hpb=20b42a9bcaba6b874f2271f03a56da6f884c4053;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/layouting/layout-controller-impl.h b/dali-toolkit/internal/layouting/layout-controller-impl.h index 08db259..8f78c32 100644 --- a/dali-toolkit/internal/layouting/layout-controller-impl.h +++ b/dali-toolkit/internal/layouting/layout-controller-impl.h @@ -16,13 +16,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +#include #include #include #include #include #include #include +#include namespace Dali { @@ -54,9 +55,9 @@ public: void Initialize(); /** - * This marks the given layout and all its parents as dirty. + * This marks the given layout and all its parents as dirty and triggers a transition if set. */ - void RequestLayout( LayoutItem& layout ); + void RequestLayout( LayoutItem& layout, int layoutTransitionType, Actor gainedChild, Actor lostChild ); /** * Measures next level of layouts in the actor hierarchy. @@ -68,6 +69,21 @@ public: */ void PerformLayout( Actor root, int left, int top, int right, int bottom ); + /** + * Perform positioning of actors after layout update + */ + void PerformLayoutPositioning( LayoutPositionDataArray& layoutPositionDataArray, bool all ) const; + + /** + * Perform animation of actors properties after layout update + */ + void PerformLayoutAnimation( LayoutTransition& layoutTransition, LayoutPositionDataArray& layoutPositionDataArray, LayoutDataArray& layoutDataArray, LayoutAnimatorArray& layoutAnimatorArray ); + + /** + * Focus change callback. + */ + void KeyInputFocusChangedCallback( Control gainingActor, Control lostActor ); + protected: // Implementation of Processor /** @@ -76,7 +92,73 @@ protected: // Implementation of Processor virtual void Process(); private: + struct ActorSizeSpec + { + ActorSizeSpec(Actor actor) + : actor( actor ) + , widthSpec( actor.GetProperty( Toolkit::LayoutItem::ChildProperty::WIDTH_SPECIFICATION ) ) + , heightSpec( actor.GetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION ) ) + { + } + + WeakHandle actor; + int widthSpec; + int heightSpec; + }; + std::vector mActorSizeSpecs; + + void UpdateMeasureHierarchyForAnimation( LayoutData& layoutData ); + + void UpdateMeasureHierarchyForAnimation( Actor root, LayoutData& layoutData ); + + void RestoreActorsSpecs(); + + std::list< LayoutTransition > mLayoutTransitions; + struct AnimationFinishedFunctor + { + AnimationFinishedFunctor( LayoutController& layoutController, LayoutTransition& layoutTransition, LayoutPositionDataArray& array ) + : layoutController( layoutController ), + layoutDataPositionArray(), + layoutItem( layoutTransition.layoutItem ), + layoutTransitionType( layoutTransition.layoutTransitionType ) + { + layoutDataPositionArray.swap( array ); + } + + void operator()( Animation& animation ) + { + layoutController.PerformLayoutPositioning( layoutDataPositionArray, true ); + layoutController.mAnimationFinishedFunctors.pop_front(); + if( layoutTransitionType != -1 ) + { + LayoutTransitionDataPtr layoutTransitionDataPtr = layoutItem->GetTransitionData( layoutTransitionType ); + layoutTransitionDataPtr->EmitSignalFinish( layoutTransitionType ); + } + } + + LayoutController& layoutController; + LayoutPositionDataArray layoutDataPositionArray; + LayoutItemPtr layoutItem; + int layoutTransitionType; + }; + bool mLayoutRequested; + Animation mAnimation; + std::list< AnimationFinishedFunctor > mAnimationFinishedFunctors; + + struct FocusChangedFunctor + { + FocusChangedFunctor( LayoutController& layoutController ) + : layoutController( layoutController ) + { + } + + void operator() ( Dali::Toolkit::Control gainingControl, Dali::Toolkit::Control lostActor ); + LayoutController& layoutController; + }; + FocusChangedFunctor mFocusChangedFunctor; + + SlotDelegate mSlotDelegate; }; } // namespace Internal