From 1c792040c19bad71a3bbb58cef875b587516fefb Mon Sep 17 00:00:00 2001 From: Ferran Sole Date: Fri, 18 Mar 2016 11:30:33 +0000 Subject: [PATCH] Bug fix in data oriented transformation manager TransformManagerPropertyQuaternion was not overriding the GetQuaternion() virtual method from PropertyInputImpl causing an assert when called Change-Id: I62d7741923eddf33853b88e0031080b5679eef52 --- automated-tests/src/dali/utc-Dali-Actor.cpp | 46 ++++++++++++++++++++++ .../update/manager/transform-manager-property.h | 6 +++ 2 files changed, 52 insertions(+) diff --git a/automated-tests/src/dali/utc-Dali-Actor.cpp b/automated-tests/src/dali/utc-Dali-Actor.cpp index 081c878..3062511 100644 --- a/automated-tests/src/dali/utc-Dali-Actor.cpp +++ b/automated-tests/src/dali/utc-Dali-Actor.cpp @@ -155,6 +155,18 @@ struct PositionComponentConstraint } }; +struct OrientationComponentConstraint +{ + OrientationComponentConstraint(){} + + void operator()( Quaternion& orientation, const PropertyInputContainer& inputs ) + { + const Quaternion& parentOrientation = inputs[0]->GetQuaternion(); + Vector3 pos, scale; + Quaternion rot; + orientation = parentOrientation; + } +}; // OnRelayout static bool gOnRelayoutCallBackCalled = false; @@ -2342,6 +2354,40 @@ int UtcDaliActorConstrainedToWorldMatrix(void) END_TEST; } +int UtcDaliActorConstrainedToOrientation(void) +{ + TestApplication app; + tet_infoline(" UtcDaliActorConstrainedToOrientation"); + + Actor parent = Actor::New(); + parent.SetParentOrigin(ParentOrigin::CENTER); + parent.SetAnchorPoint(AnchorPoint::CENTER); + Vector3 parentPosition( 10.0f, 20.0f, 30.0f); + Radian rotationAngle(Degree(85.0f)); + Quaternion parentRotation(rotationAngle, Vector3::ZAXIS); + Vector3 parentScale( 1.0f, 2.0f, 3.0f ); + parent.SetPosition( parentPosition ); + parent.SetOrientation( parentRotation ); + parent.SetScale( parentScale ); + Stage::GetCurrent().Add( parent ); + + Actor child = Actor::New(); + child.SetParentOrigin(ParentOrigin::CENTER); + Constraint posConstraint = Constraint::New( child, Actor::Property::ORIENTATION, OrientationComponentConstraint() ); + posConstraint.AddSource( Source( parent, Actor::Property::ORIENTATION ) ); + posConstraint.Apply(); + + Stage::GetCurrent().Add( child ); + + app.SendNotification(); + app.Render(0); + app.Render(); + app.SendNotification(); + + DALI_TEST_EQUALS( child.GetCurrentOrientation(), parent.GetCurrentOrientation(), 0.001, TEST_LOCATION ); + END_TEST; +} + int UtcDaliActorUnparent(void) { TestApplication app; diff --git a/dali/internal/update/manager/transform-manager-property.h b/dali/internal/update/manager/transform-manager-property.h index 56f24cf..f64d65e 100644 --- a/dali/internal/update/manager/transform-manager-property.h +++ b/dali/internal/update/manager/transform-manager-property.h @@ -283,6 +283,12 @@ public: { return mTxManager->BakeRelativeQuaternionPropertyValue( mId, value ); } + + virtual const Quaternion& GetQuaternion( BufferIndex bufferIndex ) const + { + return Get(bufferIndex); + } + }; /** -- 2.7.4