From 0d7ff5e91b985c1ef434047594976c6350400478 Mon Sep 17 00:00:00 2001 From: David Steele Date: Fri, 29 Oct 2021 16:17:23 +0100 Subject: [PATCH] Moved more actor methods into relayouter Change-Id: Ia7cbec6bda7741797463a2bf571073043e628c5e --- dali/internal/event/actors/actor-impl.cpp | 110 +++--------------------- dali/internal/event/actors/actor-relayouter.cpp | 89 +++++++++++++++++++ dali/internal/event/actors/actor-relayouter.h | 18 ++++ 3 files changed, 118 insertions(+), 99 deletions(-) diff --git a/dali/internal/event/actors/actor-impl.cpp b/dali/internal/event/actors/actor-impl.cpp index caab998..85792b6 100644 --- a/dali/internal/event/actors/actor-impl.cpp +++ b/dali/internal/event/actors/actor-impl.cpp @@ -822,12 +822,7 @@ void Actor::SetSizeModeFactor(const Vector3& factor) const Vector3& Actor::GetSizeModeFactor() const { - if(mRelayoutData) - { - return mRelayoutData->sizeModeFactor; - } - - return Relayouter::DEFAULT_SIZE_MODE_FACTOR; + return mRelayoutData ? mRelayoutData->sizeModeFactor : Relayouter::DEFAULT_SIZE_MODE_FACTOR; } void Actor::SetColorMode(ColorMode colorMode) @@ -1027,12 +1022,7 @@ void Actor::SetResizePolicy(ResizePolicy::Type policy, Dimension::Type dimension ResizePolicy::Type Actor::GetResizePolicy(Dimension::Type dimension) const { - if(mRelayoutData) - { - return mRelayoutData->GetResizePolicy(dimension); - } - - return ResizePolicy::DEFAULT; + return mRelayoutData ? mRelayoutData->GetResizePolicy(dimension) : ResizePolicy::DEFAULT; } void Actor::SetSizeScalePolicy(SizeScalePolicy::Type policy) @@ -1047,12 +1037,7 @@ void Actor::SetSizeScalePolicy(SizeScalePolicy::Type policy) SizeScalePolicy::Type Actor::GetSizeScalePolicy() const { - if(mRelayoutData) - { - return mRelayoutData->sizeSetPolicy; - } - - return Relayouter::DEFAULT_SIZE_SCALE_POLICY; + return mRelayoutData ? mRelayoutData->sizeSetPolicy : Relayouter::DEFAULT_SIZE_SCALE_POLICY; } void Actor::SetDimensionDependency(Dimension::Type dimension, Dimension::Type dependency) @@ -1062,12 +1047,7 @@ void Actor::SetDimensionDependency(Dimension::Type dimension, Dimension::Type de Dimension::Type Actor::GetDimensionDependency(Dimension::Type dimension) const { - if(mRelayoutData) - { - return mRelayoutData->GetDimensionDependency(dimension); - } - - return Dimension::ALL_DIMENSIONS; // Default + return mRelayoutData ? mRelayoutData->GetDimensionDependency(dimension) : Dimension::ALL_DIMENSIONS; } void Actor::SetRelayoutEnabled(bool relayoutEnabled) @@ -1756,47 +1736,12 @@ Actor::Relayouter& Actor::EnsureRelayouter() bool Actor::RelayoutDependentOnParent(Dimension::Type dimension) { - // Check if actor is dependent on parent - for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) - { - if((dimension & (1 << i))) - { - const ResizePolicy::Type resizePolicy = GetResizePolicy(static_cast(1 << i)); - if(resizePolicy == ResizePolicy::FILL_TO_PARENT || resizePolicy == ResizePolicy::SIZE_RELATIVE_TO_PARENT || resizePolicy == ResizePolicy::SIZE_FIXED_OFFSET_FROM_PARENT) - { - return true; - } - } - } - - return false; + return mRelayoutData && mRelayoutData->GetRelayoutDependentOnParent(dimension); } bool Actor::RelayoutDependentOnChildren(Dimension::Type dimension) { - // Check if actor is dependent on children - for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) - { - if((dimension & (1 << i))) - { - const ResizePolicy::Type resizePolicy = GetResizePolicy(static_cast(1 << i)); - switch(resizePolicy) - { - case ResizePolicy::FIT_TO_CHILDREN: - case ResizePolicy::USE_NATURAL_SIZE: // i.e. For things that calculate their size based on children - { - return true; - } - - default: - { - break; - } - } - } - } - - return false; + return mRelayoutData && mRelayoutData->GetRelayoutDependentOnChildren(dimension); } bool Actor::RelayoutDependentOnChildrenBase(Dimension::Type dimension) @@ -1806,41 +1751,20 @@ bool Actor::RelayoutDependentOnChildrenBase(Dimension::Type dimension) bool Actor::RelayoutDependentOnDimension(Dimension::Type dimension, Dimension::Type dependentDimension) { - // Check each possible dimension and see if it is dependent on the input one - for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) - { - if(dimension & (1 << i)) - { - return mRelayoutData->resizePolicies[i] == ResizePolicy::DIMENSION_DEPENDENCY && mRelayoutData->dimensionDependencies[i] == dependentDimension; - } - } - - return false; + return mRelayoutData && mRelayoutData->GetRelayoutDependentOnDimension(dimension, dependentDimension); } void Actor::SetNegotiatedDimension(float negotiatedDimension, Dimension::Type dimension) { - for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) + if(mRelayoutData) { - if(dimension & (1 << i)) - { - mRelayoutData->negotiatedDimensions[i] = negotiatedDimension; - } + mRelayoutData->SetNegotiatedDimension(negotiatedDimension, dimension); } } float Actor::GetNegotiatedDimension(Dimension::Type dimension) const { - // If more than one dimension is requested, just return the first one found - for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) - { - if((dimension & (1 << i))) - { - return mRelayoutData->negotiatedDimensions[i]; - } - } - - return 0.0f; // Default + return mRelayoutData ? mRelayoutData->GetNegotiatedDimension(dimension) : 0.0f; } void Actor::SetPadding(const Vector2& padding, Dimension::Type dimension) @@ -1850,19 +1774,7 @@ void Actor::SetPadding(const Vector2& padding, Dimension::Type dimension) Vector2 Actor::GetPadding(Dimension::Type dimension) const { - if(mRelayoutData) - { - // If more than one dimension is requested, just return the first one found - for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) - { - if((dimension & (1 << i))) - { - return mRelayoutData->dimensionPadding[i]; - } - } - } - - return Relayouter::DEFAULT_DIMENSION_PADDING; + return mRelayoutData ? mRelayoutData->GetPadding(dimension) : Relayouter::DEFAULT_DIMENSION_PADDING; } void Actor::SetLayoutNegotiated(bool negotiated, Dimension::Type dimension) diff --git a/dali/internal/event/actors/actor-relayouter.cpp b/dali/internal/event/actors/actor-relayouter.cpp index 4103c5c..5883a3f 100644 --- a/dali/internal/event/actors/actor-relayouter.cpp +++ b/dali/internal/event/actors/actor-relayouter.cpp @@ -90,6 +90,20 @@ void Actor::Relayouter::SetPadding(const Vector2& padding, Dimension::Type dimen } } +Vector2 Actor::Relayouter::GetPadding(Dimension::Type dimension) +{ + // If more than one dimension is requested, just return the first one found + for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) + { + if((dimension & (1 << i))) + { + return dimensionPadding[i]; + } + } + + return DEFAULT_DIMENSION_PADDING; +} + void Actor::Relayouter::SetLayoutNegotiated(bool negotiated, Dimension::Type dimension) { for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) @@ -321,6 +335,56 @@ void Actor::Relayouter::SetResizePolicy(ResizePolicy::Type policy, Dimension::Ty } } +bool Actor::Relayouter::GetRelayoutDependentOnParent(Dimension::Type dimension) +{ + // Check if actor is dependent on parent + for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) + { + if((dimension & (1 << i))) + { + const ResizePolicy::Type resizePolicy = GetResizePolicy(static_cast(1 << i)); + if(resizePolicy == ResizePolicy::FILL_TO_PARENT || resizePolicy == ResizePolicy::SIZE_RELATIVE_TO_PARENT || resizePolicy == ResizePolicy::SIZE_FIXED_OFFSET_FROM_PARENT) + { + return true; + } + } + } + return false; +} + +bool Actor::Relayouter::GetRelayoutDependentOnChildren(Dimension::Type dimension) +{ + // Check if actor is dependent on children + for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) + { + if((dimension & (1 << i))) + { + const ResizePolicy::Type resizePolicy = GetResizePolicy(static_cast(1 << i)); + if(resizePolicy == ResizePolicy::FIT_TO_CHILDREN || resizePolicy == ResizePolicy::USE_NATURAL_SIZE) + { + return true; + } + break; + } + } + + return false; +} + +bool Actor::Relayouter::GetRelayoutDependentOnDimension(Dimension::Type dimension, Dimension::Type dependency) +{ + // Check each possible dimension and see if it is dependent on the input one + for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) + { + if(dimension & (1 << i)) + { + return resizePolicies[i] == ResizePolicy::DIMENSION_DEPENDENCY && dimensionDependencies[i] == dependency; + } + } + + return false; +} + void Actor::Relayouter::SetDimensionDependency(Dimension::Type dimension, Dimension::Type dependency) { for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) @@ -401,6 +465,31 @@ float Actor::Relayouter::ClampDimension(const Internal::Actor& actor, float size return std::max(minSize, std::min(size, maxSize)); } +void Actor::Relayouter::SetNegotiatedDimension(float negotiatedDimension, Dimension::Type dimension) +{ + for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) + { + if(dimension & (1 << i)) + { + negotiatedDimensions[i] = negotiatedDimension; + } + } +} + +float Actor::Relayouter::GetNegotiatedDimension(Dimension::Type dimension) +{ + // If more than one dimension is requested, just return the first one found + for(uint32_t i = 0; i < Dimension::DIMENSION_COUNT; ++i) + { + if((dimension & (1 << i))) + { + return negotiatedDimensions[i]; + } + } + + return 0.0f; // Default +} + void Actor::Relayouter::NegotiateDimension(Actor& actor, Dimension::Type dimension, const Vector2& allocatedSize, Actor::ActorDimensionStack& recursionStack) { // Check if it needs to be negotiated diff --git a/dali/internal/event/actors/actor-relayouter.h b/dali/internal/event/actors/actor-relayouter.h index 364e92c..f34e346 100644 --- a/dali/internal/event/actors/actor-relayouter.h +++ b/dali/internal/event/actors/actor-relayouter.h @@ -50,6 +50,9 @@ struct Actor::Relayouter /// @copydoc Actor::SetPadding void SetPadding(const Vector2& padding, Dimension::Type dimension); + /// @copydoc Actor::GetPadding + Vector2 GetPadding(Dimension::Type dimension); + /// @copydoc Actor::SetLayoutNegotiated void SetLayoutNegotiated(bool negotiated, Dimension::Type dimension); @@ -80,6 +83,15 @@ struct Actor::Relayouter /// @copydoc Actor::SetResizePolicy void SetResizePolicy(ResizePolicy::Type policy, Dimension::Type dimension, Vector3& targetSize); + /// @copydoc Actor::GetRelayoutDependentOnParent + bool GetRelayoutDependentOnParent(Dimension::Type dimension); + + /// @copydoc Actor::GetRelayoutDependentOnChildren + bool GetRelayoutDependentOnChildren(Dimension::Type dimension); + + /// @copydoc Actor::GetRelayoutDependentOnDimension + bool GetRelayoutDependentOnDimension(Dimension::Type dimension, Dimension::Type dependency); + /// @copydoc Actor::SetDimensionDependency void SetDimensionDependency(Dimension::Type dimension, Dimension::Type dependency); @@ -106,6 +118,12 @@ struct Actor::Relayouter */ static float ClampDimension(const Internal::Actor& actor, float size, Dimension::Type dimension); + /// @copydoc Actor::SetNegotiatedDimension + void SetNegotiatedDimension(float negotiatedDimension, Dimension::Type dimension); + + /// @copydoc Actor::GetNegotiatedDimension + float GetNegotiatedDimension(Dimension::Type dimension); + /** * Negotiate size for a specific dimension * -- 2.7.4