X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fpage-turn-view%2Fpage-turn-view-impl.cpp;h=6ede563072e9baa9d89f0b68561d1643176cf5fa;hp=e08a22310332f3ef05faecb94aef713e061b42a5;hb=df92f45e89c92ca9b2286d51116ff7b69e75c569;hpb=e217915091790637a8b4ea7e34480e852d242efd diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp b/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp index e08a223..6ede563 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp @@ -20,10 +20,10 @@ // EXTERNAL INCLUDES #include -#include #include #include #include +#include #include // INTERNAL INCLUDES @@ -31,10 +31,12 @@ using namespace Dali; -namespace //unnamed namespace +namespace //Unnamed namespace { // To register type -TypeRegistration mType( typeid(Toolkit::PageTurnView), typeid(Toolkit::Control), NULL ); + +DALI_TYPE_REGISTRATION_BEGIN( Toolkit::PageTurnView, Toolkit::Control, NULL ) +DALI_TYPE_REGISTRATION_END() // default grid density for page turn effect, 10 pixels by 10 pixels const float DEFAULT_GRID_DENSITY(10.0f); @@ -77,17 +79,17 @@ struct OriginalCenterConstraint mDirection = offset / mDistance; } - Vector2 operator()(const Vector2& current, const PropertyInput& panDisplacement) + void operator()( Vector2& current, const PropertyInputContainer& inputs ) { - float displacement = panDisplacement.GetFloat(); + float displacement = inputs[0]->GetFloat(); if( displacement < mDistance ) { - return mOldCenter + mDirection * displacement; + current = mOldCenter + mDirection * displacement; } else { - return mNewCenter + Vector2(0.25f*(displacement-mDistance), 0.f); + current = mNewCenter + Vector2(0.25f*(displacement-mDistance), 0.f); } } @@ -111,22 +113,21 @@ struct RotationConstraint mStep = 1.f / pageWidth; mSign = isTurnBack ? -1.0f : 1.0f; mConst = isTurnBack ? -1.0f : 0.f; - mRotation = isTurnBack ? Quaternion( -Math::PI, Vector3::YAXIS ) : Quaternion( 0.f, Vector3::YAXIS ); + mRotation = isTurnBack ? Quaternion( Radian( -Math::PI ), Vector3::YAXIS ) : Quaternion( Radian(0.f), Vector3::YAXIS ); } - Quaternion operator()( const Quaternion& current, const PropertyInput& panDisplacement ) + void operator()( Quaternion& current, const PropertyInputContainer& inputs ) { - float displacement = panDisplacement.GetFloat(); - float angle; + float displacement = inputs[0]->GetFloat(); if( displacement < mDistance) { - return mRotation; + current = mRotation; } else { float coef = std::max(-1.0f, mStep*(mDistance-displacement)); - angle = Math::PI*( mConst + mSign*coef ); - return Quaternion( angle, Vector3::YAXIS ); + float angle = Math::PI * ( mConst + mSign * coef ); + current = Quaternion( Radian( angle ), Vector3::YAXIS ); } } @@ -145,22 +146,23 @@ struct RotationConstraint */ struct CurrentCenterConstraint { - CurrentCenterConstraint( float pageWidth) + CurrentCenterConstraint( float pageWidth ) : mPageWidth( pageWidth ) { mThres = pageWidth * PAGE_TURN_OVER_THRESHOLD_RATIO * 0.5f; } - Vector2 operator()( const Vector2& current, const PropertyInput& center, const PropertyInput& originalCenter ) + void operator()( Vector2& current, const PropertyInputContainer& inputs ) { - Vector2 centerPosition = center.GetVector2(); + const Vector2& centerPosition = inputs[0]->GetVector2(); if( centerPosition.x > 0.f ) { - return Vector2( mThres+centerPosition.x*0.5f , centerPosition.y); + current.x = mThres+centerPosition.x * 0.5f; + current.y = centerPosition.y; } else { - Vector2 centerOrigin = originalCenter.GetVector2(); + const Vector2& centerOrigin = inputs[1]->GetVector2(); Vector2 direction = centerOrigin - Vector2(mThres, centerPosition.y); float coef = 1.f+(centerPosition.x*2.f / mPageWidth); // Todo: when coef <= 0, the page is flat, slow down the last moment of the page stretch by 10 times to avoid a small bounce @@ -168,7 +170,7 @@ struct CurrentCenterConstraint { coef = (coef+0.225f)/10.0f; } - return centerOrigin - direction * coef; + current = centerOrigin - direction * coef; } } @@ -182,14 +184,13 @@ struct ShadowBlurStrengthConstraint : mThres( thres ) {} - float operator()( const float current, const PropertyInput& currentCenter, const PropertyInput& originalCenter, const PropertyInput& panDisplacement) + void operator()( float& blurStrength, const PropertyInputContainer& inputs ) { - float displacement = panDisplacement.GetFloat(); - float blurStrength; + float displacement = inputs[2]->GetFloat(); if( EqualsZero(displacement)) { - Vector2 cur = currentCenter.GetVector2(); - Vector2 ori = originalCenter.GetVector2(); + const Vector2& cur = inputs[0]->GetVector2(); + const Vector2& ori = inputs[1]->GetVector2(); blurStrength = 5.f*(ori-cur).Length() / mThres; } else @@ -198,7 +199,6 @@ struct ShadowBlurStrengthConstraint } blurStrength = blurStrength > 1.f ? 1.f : ( blurStrength < 0.f ? 0.f : blurStrength ); - return blurStrength; } float mThres; @@ -259,7 +259,7 @@ const int PageTurnView::NUMBER_OF_CACHED_PAGES = NUMBER_OF_CACHED_PAGES_EACH_SID const float PageTurnView::STATIC_PAGE_INTERVAL_DISTANCE = 1.0f; PageTurnView::PageTurnView( PageFactory& pageFactory, const Vector2& pageSize ) -: Control( REQUIRES_TOUCH_EVENTS ), +: Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ), mPageFactory( pageFactory ), mPageSize( pageSize ), mTotalPageCount( 0 ), @@ -311,7 +311,7 @@ void PageTurnView::OnInitialize() for( int i = 0; i < MAXIMUM_TURNING_NUM; i++ ) { mTurnEffect[i] = Toolkit::PageTurnEffect::New( false ); - mTurnEffect[i].SetProperty( ShaderEffect::GRID_DENSITY, Property::Value( DEFAULT_GRID_DENSITY ) ); + mTurnEffect[i].SetProperty( ShaderEffect::Property::GRID_DENSITY, Property::Value( DEFAULT_GRID_DENSITY ) ); mTurnEffect[i].SetPageSize( mPageSize ); mTurnEffect[i].SetShadowWidth(0.f); mTurnEffect[i].SetSpineShadowParameter( mSpineShadowParameter ); @@ -804,12 +804,12 @@ void PageTurnView::PanContinuing( const Vector2& gesturePosition ) mShadowView.RemoveConstraints(); Actor self = Self(); self.SetProperty( mPropertyPanDisplacement[mIndex], 0.f ); - Constraint shadowBlurStrengthConstraint = Constraint::New( mShadowView.GetBlurStrengthPropertyIndex(), - Source(mTurnEffect[mIndex], mTurnEffect[mIndex].GetPropertyIndex(mTurnEffect[mIndex].PageTurnEffect::GetCurrentCenterPropertyName())), - Source(mTurnEffect[mIndex], mTurnEffect[mIndex].GetPropertyIndex(mTurnEffect[mIndex].PageTurnEffect::GetOriginalCenterPropertyName())), - Source( self, mPropertyPanDisplacement[mIndex] ), - ShadowBlurStrengthConstraint( mPageSize.width*PAGE_TURN_OVER_THRESHOLD_RATIO ) ); - mShadowView.ApplyConstraint( shadowBlurStrengthConstraint ); + + Constraint shadowBlurStrengthConstraint = Constraint::New( mShadowView, mShadowView.GetBlurStrengthPropertyIndex(), ShadowBlurStrengthConstraint( mPageSize.width*PAGE_TURN_OVER_THRESHOLD_RATIO ) ); + shadowBlurStrengthConstraint.AddSource( Source(mTurnEffect[mIndex], mTurnEffect[mIndex].GetPropertyIndex(mTurnEffect[mIndex].PageTurnEffect::GetCurrentCenterPropertyName())) ); + shadowBlurStrengthConstraint.AddSource( Source(mTurnEffect[mIndex], mTurnEffect[mIndex].GetPropertyIndex(mTurnEffect[mIndex].PageTurnEffect::GetOriginalCenterPropertyName())) ); + shadowBlurStrengthConstraint.AddSource( Source( self, mPropertyPanDisplacement[mIndex] ) ); + shadowBlurStrengthConstraint.Apply(); } } else @@ -871,28 +871,24 @@ void PageTurnView::PanContinuing( const Vector2& gesturePosition ) /( offset.x*offset.x + offset.y*offset.y ); offset *= k; Actor self = Self(); - Source source(self, mPropertyPanDisplacement[mIndex]); Property::Index shaderOriginalCenterPropertyIndex = mTurnEffect[mIndex].GetPropertyIndex(mTurnEffect[mIndex].PageTurnEffect::GetOriginalCenterPropertyName()); - Constraint originalCenterConstraint = Constraint::New( shaderOriginalCenterPropertyIndex , - source, - OriginalCenterConstraint( mOriginalCenter, offset )); - mTurnEffect[mIndex].ApplyConstraint( originalCenterConstraint ); + Constraint originalCenterConstraint = Constraint::New( mTurnEffect[mIndex], shaderOriginalCenterPropertyIndex, OriginalCenterConstraint( mOriginalCenter, offset )); + originalCenterConstraint.AddSource( Source( self, mPropertyPanDisplacement[mIndex] ) ); + originalCenterConstraint.Apply(); Property::Index shaderCurrentCenterPropertyIndex = mTurnEffect[mIndex].GetPropertyIndex(mTurnEffect[mIndex].PageTurnEffect::GetCurrentCenterPropertyName()); - Constraint currentCenterConstraint = Constraint::New( shaderCurrentCenterPropertyIndex, - Source(self, mPropertyCurrentCenter[mIndex]), - Source(mTurnEffect[mIndex], shaderOriginalCenterPropertyIndex), - CurrentCenterConstraint(mPageSize.width)); - mTurnEffect[mIndex].ApplyConstraint( currentCenterConstraint ); + Constraint currentCenterConstraint = Constraint::New( mTurnEffect[mIndex], shaderCurrentCenterPropertyIndex, CurrentCenterConstraint(mPageSize.width)); + currentCenterConstraint.AddSource( Source(self, mPropertyCurrentCenter[mIndex]) ); + currentCenterConstraint.AddSource( Source(mTurnEffect[mIndex], shaderOriginalCenterPropertyIndex) ); + currentCenterConstraint.Apply(); GetImpl( mTurnEffect[mIndex] ).ApplyInternalConstraint(); float distance = offset.Length(); - Constraint rotationConstraint = Constraint::New( Actor::ROTATION, - Source( self, mPropertyPanDisplacement[mIndex] ), - RotationConstraint(distance, mPageSize.width, mIsTurnBack[mPanActor])); - mPanActor.ApplyConstraint( rotationConstraint ); + Constraint rotationConstraint = Constraint::New( mPanActor, Actor::Property::ORIENTATION, RotationConstraint(distance, mPageSize.width, mIsTurnBack[mPanActor])); + rotationConstraint.AddSource( Source( self, mPropertyPanDisplacement[mIndex] ) ); + rotationConstraint.Apply(); mConstraints = false; } @@ -957,9 +953,9 @@ void PageTurnView::PanFinished( const Vector2& gesturePosition, float gestureSpe float width = mPageSize.width*(1.f+PAGE_TURN_OVER_THRESHOLD_RATIO); Animation animation = Animation::New( std::max(0.1f,PAGE_TURN_OVER_ANIMATION_DURATION * (1.0f - mPanDisplacement / width)) ); animation.AnimateTo( Property(self, mPropertyPanDisplacement[mIndex]), - width,AlphaFunctions::EaseOutSine33); + width,AlphaFunction::EASE_OUT_SINE); animation.AnimateTo( Property(self, mPropertyCurrentCenter[mIndex]), - Vector2(-mPageSize.width, 0.5f*mPageSize.height), AlphaFunctions::EaseOutSine33); + Vector2(-mPageSize.width, 0.5f*mPageSize.height), AlphaFunction::EASE_OUT_SINE); mAnimationActorPair[animation] = actor; mAnimationIndexPair[animation] = mIndex; animation.Play(); @@ -969,7 +965,7 @@ void PageTurnView::PanFinished( const Vector2& gesturePosition, float gestureSpe { Animation animation= Animation::New( PAGE_SLIDE_BACK_ANIMATION_DURATION * (mOriginalCenter.x - mCurrentCenter.x) / mPageSize.width / PAGE_TURN_OVER_THRESHOLD_RATIO ); animation.AnimateTo( Property( mTurnEffect[mIndex], mTurnEffect[mIndex].PageTurnEffect::GetCurrentCenterPropertyName() ), - mOriginalCenter, AlphaFunctions::Linear ); + mOriginalCenter, AlphaFunction::LINEAR ); mAnimationActorPair[animation] = actor; mAnimationIndexPair[animation] = mIndex; animation.Play();