The purpose was to check whether Visual resource loading on given control was successful or not.
Change-Id: Ib8af77e84180d8a04171a93022ba6c3751519158
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<int>(resourceStatus), static_cast<int>(Toolkit::Visual::ResourceStatus::PREPARING), TEST_LOCATION );
Stage::GetCurrent().Add( actor );
application.SendNotification();
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<int>(resourceStatus), static_cast<int>(Toolkit::Visual::ResourceStatus::READY), TEST_LOCATION );
Visual::Base largeVisual = factory.CreateVisual( propertyMapLarge );
largeVisual.SetName("largeVisual");
dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL2, largeVisual, false );
+ resourceStatus = DevelControl::GetVisualResourceStatus(dummyImpl, DummyControl::Property::TEST_VISUAL2);
+ DALI_TEST_EQUALS( static_cast<int>(resourceStatus), static_cast<int>(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<int>(resourceStatus), static_cast<int>(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<int>(resourceStatus), static_cast<int>(Toolkit::Visual::ResourceStatus::READY), TEST_LOCATION );
END_TEST;
}
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 );
// INTERNAL INCLUDES
#include <dali-toolkit/public-api/controls/control.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-base.h>
namespace Dali
{
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
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.
*
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 )
{
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 );
#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.
// 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.
mFrameDelayTimer.Start();
DALI_LOG_INFO(gAnimImgLogFilter,Debug::Concise,"ResourceReady()\n");
- ResourceReady();
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
TextureSet AnimatedImageVisual::PrepareTextureSet()
actor.AddRenderer( mImpl->mRenderer );
// Border Visual Generated and ready to display
- ResourceReady();
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
void BorderVisual::DoCreatePropertyMap( Property::Map& map ) const
actor.AddRenderer( mImpl->mRenderer );
// Color Visual generated and ready to display
- ResourceReady();
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
void ColorVisual::DoCreatePropertyMap( Property::Map& map ) const
actor.AddRenderer( mImpl->mRenderer );
// Gradient Visual generated and ready to display
- ResourceReady();
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
void GradientVisual::DoCreatePropertyMap( Property::Map& map ) const
mPlacementActor.Reset();
// Image loaded and ready to display
- ResourceReady();
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
}
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() );
}
}
+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;
// 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 )
{
sampler.SetWrapMode( mWrapModeU, mWrapModeV );
textureSet.SetSampler( 0u, sampler );
mImpl->mRenderer.SetTextures(textureSet);
+
+ resourceStatus = Toolkit::Visual::ResourceStatus::READY;
}
else
{
mImpl->mRenderer.SetTextures( textureSet );
ApplyImageToSampler( brokenImage );
+
+ resourceStatus = Toolkit::Visual::ResourceStatus::FAILED;
}
// Image loaded and ready to display
- ResourceReady();
+ ResourceReady( resourceStatus );
}
}
mLoading = false;
*/
virtual void OnSetTransform();
+ /**
+ * @copydoc Visual::Base::IsResourceReady
+ */
+ virtual bool IsResourceReady() const;
+
public:
/**
actor.AddRenderer( mImpl->mRenderer );
// Mesh loaded and ready to display
- ResourceReady();
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
void MeshVisual::DoCreatePropertyMap( Property::Map& map ) const
actor.AddRenderer( mImpl->mRenderer );
// npatch loaded and ready to display
- ResourceReady();
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
void NPatchVisual::DoSetOffStage( 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
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 )
}
// Svg loaded and ready to display
- ResourceReady();
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
}
}
// Nothing else to do if the relayout size is zero.
- ResourceReady();
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
return;
}
control.AddRenderer( mImpl->mRenderer );
// Text rendered and ready to display
- ResourceReady();
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
}
}
mMixColorIndex( Property::INVALID_INDEX ),
mOpacityIndex( Property::INVALID_INDEX ),
mFlags( 0 ),
- mResourceReady( false )
+ mResourceStatus( Toolkit::Visual::ResourceStatus::PREPARING )
{
}
Property::Index mMixColorIndex;
Property::Index mOpacityIndex;
int mFlags;
- bool mResourceReady:1;
+ Toolkit::Visual::ResourceStatus mResourceStatus;
};
} // namespace Visual
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()
/**
* @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:
actor.AddRenderer( mImpl->mRenderer );
// Wireframe generated and ready to display
- ResourceReady();
+ ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
void WireframeVisual::InitializeRenderer()