// INTERNAL INCLUDES
#include <dali-toolkit/third-party/nanosvg/nanosvg.h>
+#include <dali-toolkit/third-party/nanosvg/nanosvgrast.h>
#include <dali-toolkit/internal/visuals/svg/svg-rasterize-thread.h>
#include <dali-toolkit/internal/visuals/image-atlas-manager.h>
#include <dali-toolkit/internal/visuals/visual-string-constants.h>
#include <dali/devel-api/adaptor-framework/file-loader.h>
// EXTERNAL INCLUDES
-#include <dali/public-api/common/stage.h>
+#include <dali/devel-api/common/stage.h>
+#include <dali/integration-api/debug.h>
namespace Dali
{
// property name
const char * const UNITS("px");
-const char * const IMAGE_ATLASING( "atlasing" );
-
const Dali::Vector4 FULL_TEXTURE_RECT(0.f, 0.f, 1.f, 1.f);
+
}
SvgVisualPtr SvgVisual::New( VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl, const Property::Map& properties )
}
SvgVisual::SvgVisual( VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl )
-: Visual::Base( factoryCache, Visual::FittingMode::FILL ),
+: Visual::Base( factoryCache, Visual::FittingMode::FILL, Toolkit::Visual::SVG ),
mImageVisualShaderFactory( shaderFactory ),
mAtlasRect( FULL_TEXTURE_RECT ),
mImageUrl( imageUrl ),
{
DoSetProperty( Toolkit::ImageVisual::Property::ATLASING, keyValue.second );
}
+ else if( keyValue.first == SYNCHRONOUS_LOADING )
+ {
+ DoSetProperty( Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING, keyValue.second );
+ }
}
}
value.Get( mAttemptAtlasing );
break;
}
+ case Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING:
+ {
+ bool sync = false;
+ if( value.Get( sync ) )
+ {
+ if( sync )
+ {
+ mImpl->mFlags |= Impl::IS_SYNCHRONOUS_RESOURCE_LOADING;
+ }
+ else
+ {
+ mImpl->mFlags &= ~Impl::IS_SYNCHRONOUS_RESOURCE_LOADING;
+ }
+ }
+ else
+ {
+ DALI_LOG_ERROR("ImageVisual: synchronousLoading property has incorrect type\n");
+ }
+ break;
+ }
}
}
Shader shader;
if( !mImpl->mCustomShader )
{
- shader = mImageVisualShaderFactory.GetShader( mFactoryCache, mAttemptAtlasing, true );
+ shader = mImageVisualShaderFactory.GetShader( mFactoryCache, mAttemptAtlasing, true, false );
}
else
{
float meanDpi = ( dpi.height + dpi.width ) * 0.5f;
RasterizingTaskPtr newTask = new RasterizingTask( this, mParsedImage, mImageUrl, meanDpi, width, height );
- mFactoryCache.GetSVGRasterizationThread()->AddTask( newTask );
+ if ( IsSynchronousLoadingRequired() )
+ {
+ newTask->Rasterize();
+ ApplyRasterizedImage( newTask->GetParsedImage(), newTask->GetPixelData() );
+ }
+ else
+ {
+ mFactoryCache.GetSVGRasterizationThread()->AddTask( newTask );
+ }
}
}
// Svg loaded and ready to display
ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
+ else if( !mParsedImage )
+ {
+ ResourceReady( Toolkit::Visual::ResourceStatus::FAILED );
+ }
}
void SvgVisual::OnSetTransform()
}
}
+bool SvgVisual::IsResourceReady() const
+{
+ return ( mImpl->mResourceStatus == Toolkit::Visual::ResourceStatus::READY ||
+ mImpl->mResourceStatus == Toolkit::Visual::ResourceStatus::FAILED );
+}
+
} // namespace Internal
} // namespace Toolkit