From: Umar Date: Thu, 27 Jul 2017 14:53:42 +0000 (+0100) Subject: Added a pblic Control Devel API GetVisualResourceStatus. X-Git-Tag: dali_1.2.64~1 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=ecf31ea6865a0ebd5b668166427def6499b3ddc1 Added a pblic Control Devel API GetVisualResourceStatus. The purpose was to check whether Visual resource loading on given control was successful or not. Change-Id: Ib8af77e84180d8a04171a93022ba6c3751519158 --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp index bfb390c..53b3fbd 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp @@ -834,8 +834,11 @@ int UtcDaliControlResourcesReady(void) dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, smallVisual ); actor.SetSize( 200.f, 200.f ); + + Toolkit::Visual::ResourceStatus resourceStatus = DevelControl::GetVisualResourceStatus(dummyImpl, DummyControl::Property::TEST_VISUAL); DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION ); DALI_TEST_EQUALS( actor.IsResourceReady(), false, TEST_LOCATION ); + DALI_TEST_EQUALS( static_cast(resourceStatus), static_cast(Toolkit::Visual::ResourceStatus::PREPARING), TEST_LOCATION ); Stage::GetCurrent().Add( actor ); application.SendNotification(); @@ -846,8 +849,10 @@ int UtcDaliControlResourcesReady(void) application.SendNotification(); application.Render(); + resourceStatus = DevelControl::GetVisualResourceStatus(dummyImpl, DummyControl::Property::TEST_VISUAL); DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); DALI_TEST_EQUALS( actor.IsResourceReady(), true, TEST_LOCATION ); + DALI_TEST_EQUALS( static_cast(resourceStatus), static_cast(Toolkit::Visual::ResourceStatus::READY), TEST_LOCATION ); Visual::Base largeVisual = factory.CreateVisual( propertyMapLarge ); largeVisual.SetName("largeVisual"); @@ -857,11 +862,24 @@ int UtcDaliControlResourcesReady(void) dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, largeVisual, false ); + resourceStatus = DevelControl::GetVisualResourceStatus(dummyImpl, DummyControl::Property::TEST_VISUAL2); + DALI_TEST_EQUALS( static_cast(resourceStatus), static_cast(Toolkit::Visual::ResourceStatus::PREPARING), TEST_LOCATION ); + application.SendNotification(); - application.Render(); + resourceStatus = DevelControl::GetVisualResourceStatus(dummyImpl, DummyControl::Property::TEST_VISUAL2); DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION ); DALI_TEST_EQUALS( actor.IsResourceReady(), true, TEST_LOCATION ); + DALI_TEST_EQUALS( static_cast(resourceStatus), static_cast(Toolkit::Visual::ResourceStatus::PREPARING), TEST_LOCATION ); + + dummyImpl.EnableVisual( DummyControl::Property::TEST_VISUAL2, true ); + + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + application.SendNotification(); + + resourceStatus = DevelControl::GetVisualResourceStatus(dummyImpl, DummyControl::Property::TEST_VISUAL2); + DALI_TEST_EQUALS( static_cast(resourceStatus), static_cast(Toolkit::Visual::ResourceStatus::READY), TEST_LOCATION ); END_TEST; } diff --git a/dali-toolkit/devel-api/controls/control-devel.cpp b/dali-toolkit/devel-api/controls/control-devel.cpp index 1276e1e..187e518 100644 --- a/dali-toolkit/devel-api/controls/control-devel.cpp +++ b/dali-toolkit/devel-api/controls/control-devel.cpp @@ -83,6 +83,12 @@ bool IsVisualEnabled( const Internal::Control& control, Dali::Property::Index in return controlDataImpl.IsVisualEnabled( index ); } +Toolkit::Visual::ResourceStatus GetVisualResourceStatus( const Internal::Control& control, Dali::Property::Index index ) +{ + const Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control ); + return controlDataImpl.GetVisualResourceStatus( index ); +} + Dali::Animation CreateTransition( Internal::Control& control, const Toolkit::TransitionData& handle ) { Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( control ); diff --git a/dali-toolkit/devel-api/controls/control-devel.h b/dali-toolkit/devel-api/controls/control-devel.h index f6fd3a4..817efd0 100644 --- a/dali-toolkit/devel-api/controls/control-devel.h +++ b/dali-toolkit/devel-api/controls/control-devel.h @@ -20,6 +20,7 @@ // INTERNAL INCLUDES #include +#include namespace Dali { @@ -214,6 +215,15 @@ DALI_IMPORT_API void EnableVisual( Internal::Control& control, Dali::Property::I DALI_IMPORT_API bool IsVisualEnabled( const Internal::Control& control, Dali::Property::Index index ); /** + * @brief Get the loading state of the visual resource. + * + * @param[in] control The control + * @param[in] index The Property index of the visual + * @return Return the loading status (PREPARING, READY and FAILED) of visual resource + */ +DALI_IMPORT_API Toolkit::Visual::ResourceStatus GetVisualResourceStatus( const Internal::Control& control, Dali::Property::Index index ); + +/** * @brief Create a transition effect on the control. * * Only generates an animation if the properties described in the transition diff --git a/dali-toolkit/devel-api/visual-factory/visual-base.h b/dali-toolkit/devel-api/visual-factory/visual-base.h index fd00cd0..da41237 100644 --- a/dali-toolkit/devel-api/visual-factory/visual-base.h +++ b/dali-toolkit/devel-api/visual-factory/visual-base.h @@ -37,6 +37,14 @@ class Base; namespace Visual { + +enum class ResourceStatus +{ + PREPARING, + READY, + FAILED +}; + /** * @brief A Visual provides a renderer for drawing a control component. A control may have multiple visuals. * diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index 4f26d11..6ff1efb 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -686,6 +686,18 @@ bool Control::Impl::IsResourceReady() const return true; } +Toolkit::Visual::ResourceStatus Control::Impl::GetVisualResourceStatus( Property::Index index ) const +{ + RegisteredVisualContainer::Iterator iter; + if ( FindVisual( index, mVisuals, iter ) ) + { + const Toolkit::Visual::Base visual = (*iter)->visual; + const Internal::Visual::Base& visualImpl = Toolkit::GetImplementation( visual ); + return visualImpl.GetResourceStatus( ); + } + + return Toolkit::Visual::ResourceStatus::PREPARING; +} Dali::Animation Control::Impl::CreateTransition( const Toolkit::TransitionData& handle ) { diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index 2e1d4c9..f6a3288 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -179,6 +179,11 @@ public: void StartObservingVisual( Toolkit::Visual::Base& visual); /** + * @copydoc Dali::Toolkit::DevelControl::GetVisualResourceStatus() + */ + Toolkit::Visual::ResourceStatus GetVisualResourceStatus( Property::Index index ) const; + + /** * @copydoc Dali::Toolkit::DevelControl::CreateTransition() */ Dali::Animation CreateTransition( const Toolkit::TransitionData& transitionData ); diff --git a/dali-toolkit/internal/controls/image-view/image-view-impl.h b/dali-toolkit/internal/controls/image-view/image-view-impl.h index f335ce7..32867bf 100644 --- a/dali-toolkit/internal/controls/image-view/image-view-impl.h +++ b/dali-toolkit/internal/controls/image-view/image-view-impl.h @@ -2,7 +2,7 @@ #define __DALI_TOOLKIT_INTERNAL_IMAGE_VIEW_H__ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 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. diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp index 638cf37..bb84a5b 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -1205,7 +1205,7 @@ void TextEditor::OnInitialize() // Creates a background visual. Even if the color is transparent it updates the stencil. mStencil.SetProperty( Toolkit::Control::Property::BACKGROUND, - Property::Map().Add( Toolkit::Visual::Property::TYPE, Visual::COLOR ). + Property::Map().Add( Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR ). Add( ColorVisual::Property::MIX_COLOR, Color::TRANSPARENT ) ); // Enable the clipping property. diff --git a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp index 4f4b441..9ac0b90 100644 --- a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp @@ -449,7 +449,7 @@ void AnimatedImageVisual::StartFirstFrame( TextureSet& textureSet ) mFrameDelayTimer.Start(); DALI_LOG_INFO(gAnimImgLogFilter,Debug::Concise,"ResourceReady()\n"); - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } TextureSet AnimatedImageVisual::PrepareTextureSet() diff --git a/dali-toolkit/internal/visuals/border/border-visual.cpp b/dali-toolkit/internal/visuals/border/border-visual.cpp index da0ec77..2de039b 100644 --- a/dali-toolkit/internal/visuals/border/border-visual.cpp +++ b/dali-toolkit/internal/visuals/border/border-visual.cpp @@ -217,7 +217,7 @@ void BorderVisual::DoSetOnStage( Actor& actor ) actor.AddRenderer( mImpl->mRenderer ); // Border Visual Generated and ready to display - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } void BorderVisual::DoCreatePropertyMap( Property::Map& map ) const diff --git a/dali-toolkit/internal/visuals/color/color-visual.cpp b/dali-toolkit/internal/visuals/color/color-visual.cpp index f1dfc4d..2d8008f 100644 --- a/dali-toolkit/internal/visuals/color/color-visual.cpp +++ b/dali-toolkit/internal/visuals/color/color-visual.cpp @@ -131,7 +131,7 @@ void ColorVisual::DoSetOnStage( Actor& actor ) actor.AddRenderer( mImpl->mRenderer ); // Color Visual generated and ready to display - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } void ColorVisual::DoCreatePropertyMap( Property::Map& map ) const diff --git a/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp b/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp index 7c3f791..2686a50 100644 --- a/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp +++ b/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp @@ -280,7 +280,7 @@ void GradientVisual::DoSetOnStage( Actor& actor ) actor.AddRenderer( mImpl->mRenderer ); // Gradient Visual generated and ready to display - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } void GradientVisual::DoCreatePropertyMap( Property::Map& map ) const diff --git a/dali-toolkit/internal/visuals/image/image-visual.cpp b/dali-toolkit/internal/visuals/image/image-visual.cpp index ea3c49c..59cccd5 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.cpp +++ b/dali-toolkit/internal/visuals/image/image-visual.cpp @@ -869,7 +869,7 @@ void ImageVisual::DoSetOnStage( Actor& actor ) mPlacementActor.Reset(); // Image loaded and ready to display - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } } @@ -927,6 +927,7 @@ void ImageVisual::DoCreatePropertyMap( Property::Map& map ) const map.Insert( Toolkit::ImageVisual::Property::WRAP_MODE_V, mWrapModeV ); map.Insert( Toolkit::ImageVisual::Property::ATLASING, mAttemptAtlasing ); + if( mMaskingData != NULL ) { map.Insert( Toolkit::ImageVisual::Property::ALPHA_MASK_URL, mMaskingData->mAlphaMaskUrl.GetUrl() ); @@ -963,6 +964,12 @@ void ImageVisual::OnSetTransform() } } +bool ImageVisual::IsResourceReady() const +{ + return ( mImpl->mResourceStatus == Toolkit::Visual::ResourceStatus::READY || + mImpl->mResourceStatus == Toolkit::Visual::ResourceStatus::FAILED ); +} + Shader ImageVisual::GetImageShader( VisualFactoryCache& factoryCache, bool atlasing, bool defaultTextureWrapping ) { Shader shader; @@ -1035,6 +1042,7 @@ void ImageVisual::UploadCompleted() // From Texture Manager void ImageVisual::UploadComplete( bool loadingSuccess, int32_t textureId, TextureSet textureSet, bool usingAtlas, const Vector4& atlasRectangle ) { + Toolkit::Visual::ResourceStatus resourceStatus; Actor actor = mPlacementActor.GetHandle(); if( actor ) { @@ -1054,6 +1062,8 @@ void ImageVisual::UploadComplete( bool loadingSuccess, int32_t textureId, Textur sampler.SetWrapMode( mWrapModeU, mWrapModeV ); textureSet.SetSampler( 0u, sampler ); mImpl->mRenderer.SetTextures(textureSet); + + resourceStatus = Toolkit::Visual::ResourceStatus::READY; } else { @@ -1063,9 +1073,11 @@ void ImageVisual::UploadComplete( bool loadingSuccess, int32_t textureId, Textur mImpl->mRenderer.SetTextures( textureSet ); ApplyImageToSampler( brokenImage ); + + resourceStatus = Toolkit::Visual::ResourceStatus::FAILED; } // Image loaded and ready to display - ResourceReady(); + ResourceReady( resourceStatus ); } } mLoading = false; diff --git a/dali-toolkit/internal/visuals/image/image-visual.h b/dali-toolkit/internal/visuals/image/image-visual.h index e485904..729185a 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.h +++ b/dali-toolkit/internal/visuals/image/image-visual.h @@ -229,6 +229,11 @@ protected: */ virtual void OnSetTransform(); + /** + * @copydoc Visual::Base::IsResourceReady + */ + virtual bool IsResourceReady() const; + public: /** diff --git a/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp b/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp index 92d30ab..0bea8c6 100644 --- a/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp +++ b/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp @@ -520,7 +520,7 @@ void MeshVisual::DoSetOnStage( Actor& actor ) actor.AddRenderer( mImpl->mRenderer ); // Mesh loaded and ready to display - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } void MeshVisual::DoCreatePropertyMap( Property::Map& map ) const diff --git a/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp b/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp index df9b2ff..d5976dd 100755 --- a/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp +++ b/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp @@ -316,7 +316,7 @@ void NPatchVisual::DoSetOnStage( Actor& actor ) actor.AddRenderer( mImpl->mRenderer ); // npatch loaded and ready to display - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } void NPatchVisual::DoSetOffStage( Actor& actor ) diff --git a/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp b/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp index 51a9b29..28afa6a 100644 --- a/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp +++ b/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp @@ -420,7 +420,7 @@ void PrimitiveVisual::DoSetOnStage( Actor& actor ) actor.AddRenderer( mImpl->mRenderer ); // Primitive generated and ready to display - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } void PrimitiveVisual::DoCreatePropertyMap( Property::Map& map ) const diff --git a/dali-toolkit/internal/visuals/svg/svg-visual.cpp b/dali-toolkit/internal/visuals/svg/svg-visual.cpp index 95a7786..a9d0c0c 100644 --- a/dali-toolkit/internal/visuals/svg/svg-visual.cpp +++ b/dali-toolkit/internal/visuals/svg/svg-visual.cpp @@ -112,7 +112,7 @@ void SvgVisual::DoSetOnStage( Actor& actor ) mPlacementActor = actor; // SVG visual needs it's size set before it can be rasterized hence set ResourceReady once on stage - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } void SvgVisual::DoSetOffStage( Actor& actor ) @@ -233,7 +233,7 @@ void SvgVisual::ApplyRasterizedImage( PixelData rasterizedPixelData ) } // Svg loaded and ready to display - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } } diff --git a/dali-toolkit/internal/visuals/text/text-visual.cpp b/dali-toolkit/internal/visuals/text/text-visual.cpp index d70edce..f5817ea 100755 --- a/dali-toolkit/internal/visuals/text/text-visual.cpp +++ b/dali-toolkit/internal/visuals/text/text-visual.cpp @@ -627,7 +627,7 @@ void TextVisual::UpdateRenderer() } // Nothing else to do if the relayout size is zero. - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); return; } @@ -703,7 +703,7 @@ void TextVisual::UpdateRenderer() control.AddRenderer( mImpl->mRenderer ); // Text rendered and ready to display - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } } } diff --git a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp index 27ba4a0..374ff68 100644 --- a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp @@ -125,7 +125,7 @@ Internal::Visual::Base::Impl::Impl() mMixColorIndex( Property::INVALID_INDEX ), mOpacityIndex( Property::INVALID_INDEX ), mFlags( 0 ), - mResourceReady( false ) + mResourceStatus( Toolkit::Visual::ResourceStatus::PREPARING ) { } diff --git a/dali-toolkit/internal/visuals/visual-base-data-impl.h b/dali-toolkit/internal/visuals/visual-base-data-impl.h index 1d92f6e..79c099c 100644 --- a/dali-toolkit/internal/visuals/visual-base-data-impl.h +++ b/dali-toolkit/internal/visuals/visual-base-data-impl.h @@ -125,7 +125,7 @@ struct Base::Impl Property::Index mMixColorIndex; Property::Index mOpacityIndex; int mFlags; - bool mResourceReady:1; + Toolkit::Visual::ResourceStatus mResourceStatus; }; } // namespace Visual diff --git a/dali-toolkit/internal/visuals/visual-base-impl.cpp b/dali-toolkit/internal/visuals/visual-base-impl.cpp index bd31fe7..f486a0f 100644 --- a/dali-toolkit/internal/visuals/visual-base-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-base-impl.cpp @@ -414,25 +414,28 @@ void Visual::Base::RemoveResourceObserver( Visual::ResourceObserver& observer ) mImpl->mResourceObserver = NULL; } -void Visual::Base::ResourceReady() +void Visual::Base::ResourceReady(Toolkit::Visual::ResourceStatus resourceStatus) { - if( mImpl->mResourceReady ) + if( mImpl->mResourceStatus != resourceStatus ) { - // only inform the observer the first time the resource is ready - return; - } - mImpl->mResourceReady = true; + mImpl->mResourceStatus = resourceStatus; - if( mImpl->mResourceObserver ) - { - // observer is currently a control impl - mImpl->mResourceObserver->ResourceReady( *this ); + if( mImpl->mResourceObserver ) + { + // observer is currently a control impl + mImpl->mResourceObserver->ResourceReady( *this ); + } } } bool Visual::Base::IsResourceReady() const { - return mImpl->mResourceReady; + return ( mImpl->mResourceStatus == Toolkit::Visual::ResourceStatus::READY ); +} + +Toolkit::Visual::ResourceStatus Visual::Base::GetResourceStatus() const +{ + return mImpl->mResourceStatus; } Renderer Visual::Base::GetRenderer() diff --git a/dali-toolkit/internal/visuals/visual-base-impl.h b/dali-toolkit/internal/visuals/visual-base-impl.h index c450d91..f9534e4 100644 --- a/dali-toolkit/internal/visuals/visual-base-impl.h +++ b/dali-toolkit/internal/visuals/visual-base-impl.h @@ -226,13 +226,19 @@ public: /** * @brief Called when the visuals resources are loaded / ready */ - void ResourceReady(); + void ResourceReady( Toolkit::Visual::ResourceStatus resourceStatus ); /** * @brief Called when the visuals resources are loaded / ready * @return true if ready, false otherwise */ - bool IsResourceReady() const; + virtual bool IsResourceReady() const; + + /** + * @brief Get the loading state of the visual resource + * @return Return the loading status (PREPARING, READY and FAILED) of visual resource + */ + Toolkit::Visual::ResourceStatus GetResourceStatus() const; protected: diff --git a/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp b/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp index 1c79d72..7d6e6e6 100644 --- a/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp +++ b/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp @@ -176,7 +176,7 @@ void WireframeVisual::DoSetOnStage( Actor& actor ) actor.AddRenderer( mImpl->mRenderer ); // Wireframe generated and ready to display - ResourceReady(); + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); } void WireframeVisual::InitializeRenderer()