X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fvisual-base-impl.cpp;h=d14dcd3be608874b1261c4c0e62ab62ef946c5bf;hp=e4f12c8b73134b9f16106bd953df8e320548f44e;hb=fedd5ae8da46cd798f730fd07c942df853e055dd;hpb=4b7e732208c99260eb1f7a19864fcd8ad30ed12c diff --git a/dali-toolkit/internal/visuals/visual-base-impl.cpp b/dali-toolkit/internal/visuals/visual-base-impl.cpp old mode 100644 new mode 100755 index e4f12c8..d14dcd3 --- a/dali-toolkit/internal/visuals/visual-base-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-base-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2018 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,14 +19,18 @@ #include "visual-base-impl.h" // EXTERNAL HEADER -#include +#include #include +#include +#include #include //INTERNAL HEARDER #include #include #include +#include +#include #include #include @@ -37,7 +41,8 @@ Debug::Filter* gVisualBaseLogFilter = Debug::Filter::New( Debug::NoLogging, fals #endif const char * const PRE_MULTIPLIED_ALPHA_PROPERTY( "preMultipliedAlpha" ); -} + +} // namespace namespace Dali { @@ -48,8 +53,18 @@ namespace Toolkit namespace Internal { -Visual::Base::Base( VisualFactoryCache& factoryCache ) -: mImpl( new Impl() ), +namespace +{ + +DALI_ENUM_TO_STRING_TABLE_BEGIN( VISUAL_FITTING_MODE ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Visual::FittingMode, FIT_KEEP_ASPECT_RATIO ) +DALI_ENUM_TO_STRING_WITH_SCOPE( Visual::FittingMode, FILL ) +DALI_ENUM_TO_STRING_TABLE_END( VISUAL_FITTING_MODE ) + +} // namespace + +Visual::Base::Base( VisualFactoryCache& factoryCache, FittingMode fittingMode ) +: mImpl( new Impl(fittingMode) ), mFactoryCache( factoryCache ) { } @@ -102,6 +117,10 @@ void Visual::Base::SetProperties( const Property::Map& propertyMap ) { matchKey = Property::Key( Toolkit::Visual::Property::OPACITY ); } + else if( matchKey == VISUAL_FITTING_MODE ) + { + matchKey = Property::Key( Toolkit::DevelVisual::Property::VISUAL_FITTING_MODE ); + } } switch( matchKey.indexKey ) @@ -163,6 +182,12 @@ void Visual::Base::SetProperties( const Property::Map& propertyMap ) } break; } + case Toolkit::DevelVisual::Property::VISUAL_FITTING_MODE: + { + Scripting::GetEnumerationProperty< Visual::FittingMode >( + value, VISUAL_FITTING_MODE_TABLE, VISUAL_FITTING_MODE_TABLE_COUNT, mImpl->mFittingMode ); + break; + } } } @@ -189,7 +214,7 @@ void Visual::Base::SetName( const std::string& name ) mImpl->mName = name; } -const std::string& Visual::Base::GetName() +const std::string& Visual::Base::GetName() const { return mImpl->mName; } @@ -267,7 +292,6 @@ void Visual::Base::SetOffStage( Actor& actor ) { DoSetOffStage( actor ); mImpl->mMixColorIndex = Property::INVALID_INDEX; - mImpl->mOpacityIndex = Property::INVALID_INDEX; mImpl->mFlags &= ~Impl::IS_ON_STAGE; } } @@ -292,6 +316,10 @@ void Visual::Base::CreatePropertyMap( Property::Map& map ) const // which is ok, because they have a different key value range. map.Insert( Toolkit::Visual::Property::MIX_COLOR, mImpl->mMixColor ); // vec4 map.Insert( Toolkit::Visual::Property::OPACITY, mImpl->mMixColor.a ); + + auto fittingModeString = Scripting::GetLinearEnumerationName< FittingMode >( + mImpl->mFittingMode, VISUAL_FITTING_MODE_TABLE, VISUAL_FITTING_MODE_TABLE_COUNT ); + map.Insert( Toolkit::DevelVisual::Property::VISUAL_FITTING_MODE, fittingModeString ); } void Visual::Base::CreateInstancePropertyMap( Property::Map& map ) const @@ -365,14 +393,7 @@ void Visual::Base::RegisterMixColor() mImpl->mRenderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON ); } - if( mImpl->mOpacityIndex == Property::INVALID_INDEX ) - { - mImpl->mOpacityIndex = DevelHandle::RegisterProperty( - mImpl->mRenderer, - Toolkit::Visual::Property::OPACITY, - OPACITY, - mImpl->mMixColor.a ); - } + mImpl->mRenderer.SetProperty( DevelRenderer::Property::OPACITY, mImpl->mMixColor.a ); float preMultipliedAlpha = 0.0f; if( IsPreMultipliedAlphaEnabled() ) @@ -389,7 +410,7 @@ void Visual::Base::SetMixColor( const Vector4& color ) if( mImpl->mRenderer ) { mImpl->mRenderer.SetProperty( mImpl->mMixColorIndex, Vector3(color) ); - mImpl->mRenderer.SetProperty( mImpl->mOpacityIndex, color.a ); + mImpl->mRenderer.SetProperty( DevelRenderer::Property::OPACITY, color.a ); if( color.a < 1.f ) { mImpl->mRenderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON ); @@ -414,14 +435,14 @@ const Vector4& Visual::Base::GetMixColor() const return mImpl->mMixColor; } -void Visual::Base::AddResourceObserver( Visual::ResourceObserver& observer) +void Visual::Base::AddEventObserver( Visual::EventObserver& observer) { - mImpl->mResourceObserver = &observer; + mImpl->mEventObserver = &observer; } -void Visual::Base::RemoveResourceObserver( Visual::ResourceObserver& observer ) +void Visual::Base::RemoveEventObserver( Visual::EventObserver& observer ) { - mImpl->mResourceObserver = NULL; + mImpl->mEventObserver = NULL; } void Visual::Base::ResourceReady(Toolkit::Visual::ResourceStatus resourceStatus) @@ -430,10 +451,10 @@ void Visual::Base::ResourceReady(Toolkit::Visual::ResourceStatus resourceStatus) { mImpl->mResourceStatus = resourceStatus; - if( mImpl->mResourceObserver ) + if( mImpl->mEventObserver ) { // observer is currently a control impl - mImpl->mResourceObserver->ResourceReady( *this ); + mImpl->mEventObserver->ResourceReady( *this ); } } } @@ -448,6 +469,16 @@ Toolkit::Visual::ResourceStatus Visual::Base::GetResourceStatus() const return mImpl->mResourceStatus; } +Visual::FittingMode Visual::Base::GetFittingMode() const +{ + return mImpl->mFittingMode; +} + +Visual::Base& Visual::Base::GetVisualObject() +{ + return *this; +} + Renderer Visual::Base::GetRenderer() { return mImpl->mRenderer; @@ -567,27 +598,22 @@ void Visual::Base::AnimateOpacityProperty( Dali::Animation& transition, Internal::TransitionData::Animator& animator ) { - Property::Index index = mImpl->mOpacityIndex; - bool isOpaque = mImpl->mMixColor.a >= 1.0f; - if( index != Property::INVALID_INDEX ) + float initialOpacity; + if( animator.initialValue.Get( initialOpacity ) ) { - float initialOpacity; - if( animator.initialValue.Get( initialOpacity ) ) - { - isOpaque = (initialOpacity >= 1.0f); - } - - float targetOpacity; - if( animator.targetValue.Get( targetOpacity ) ) - { - mImpl->mMixColor.a = targetOpacity; - } + isOpaque = (initialOpacity >= 1.0f); + } - SetupTransition( transition, animator, index, animator.initialValue, animator.targetValue ); - SetupBlendMode( transition, isOpaque, animator.animate ); + float targetOpacity; + if( animator.targetValue.Get( targetOpacity ) ) + { + mImpl->mMixColor.a = targetOpacity; } + + SetupTransition( transition, animator, DevelRenderer::Property::OPACITY, animator.initialValue, animator.targetValue ); + SetupBlendMode( transition, isOpaque, animator.animate ); } void Visual::Base::AnimateRendererProperty( @@ -666,7 +692,7 @@ void Visual::Base::AnimateMixColorProperty( SetupTransition( transition, animator, index, initialMixColor, targetMixColor ); if( animateOpacity ) { - SetupTransition( transition, animator, mImpl->mOpacityIndex, initialOpacity, targetOpacity ); + SetupTransition( transition, animator, DevelRenderer::Property::OPACITY, initialOpacity, targetOpacity ); SetupBlendMode( transition, isOpaque, animator.animate ); } } @@ -678,17 +704,20 @@ void Visual::Base::SetupBlendMode( Animation& transition, bool isInitialOpaque, // turned off after the animation ends if the final value is opaque if( ! isInitialOpaque || mImpl->mMixColor.a < 1.0f ) { - mImpl->mRenderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON ); - - if( animating == true && mImpl->mMixColor.a >= 1.0f ) + if( mImpl->mRenderer ) { - // When it becomes opaque, set the blend mode back to automatically - if( ! mImpl->mBlendSlotDelegate ) + mImpl->mRenderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON ); + + if( animating == true && mImpl->mMixColor.a >= 1.0f ) { - mImpl->mBlendSlotDelegate = new SlotDelegate(this); + // When it becomes opaque, set the blend mode back to automatically + if( ! mImpl->mBlendSlotDelegate ) + { + mImpl->mBlendSlotDelegate = new SlotDelegate(this); + } + transition.FinishedSignal().Connect( *(mImpl->mBlendSlotDelegate), + &Visual::Base::OnMixColorFinished ); } - transition.FinishedSignal().Connect( *(mImpl->mBlendSlotDelegate), - &Visual::Base::OnMixColorFinished ); } } }