X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fsvg%2Fsvg-rasterize-thread.cpp;h=174183eb7f0222af547205693933c6de4725268a;hp=13140a7e60a41dbc0b8e1d508c67edc88f37a64a;hb=5a6809a40da6a50d2edce9202466aa289ad96162;hpb=496563cc996dfa3201f466aba3a0427b78f21d38 diff --git a/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp b/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp index 13140a7..174183e 100644 --- a/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp +++ b/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp @@ -18,10 +18,14 @@ // CLASS HEADER #include "svg-rasterize-thread.h" +// EXTERNAL INCLUDES +#include +#include +#include + // INTERNAL INCLUDES #include #include -#include namespace Dali { @@ -32,20 +36,49 @@ namespace Toolkit namespace Internal { -RasterizingTask::RasterizingTask( SvgVisual* svgRenderer, NSVGimage* parsedSvg, unsigned int width, unsigned int height ) +namespace +{ +const char * const UNITS("px"); +} + +RasterizingTask::RasterizingTask( SvgVisual* svgRenderer, NSVGimage* parsedSvg, const VisualUrl& url, float dpi, unsigned int width, unsigned int height) : mSvgVisual( svgRenderer ), mParsedSvg( parsedSvg ), + mUrl( url ), + mDpi( dpi ), mWidth( width ), mHeight( height ) { } +void RasterizingTask::Load() +{ + if( mParsedSvg != NULL) + { + return; + } + + if( !mUrl.IsLocalResource() ) + { + Dali::Vector remoteBuffer; + + if( !Dali::FileLoader::DownloadFileSynchronously( mUrl.GetUrl(), remoteBuffer )) + { + DALI_LOG_ERROR("Failed to download file!\n"); + return; + } + + remoteBuffer.PushBack( '\0' ); + mParsedSvg = nsvgParse( reinterpret_cast(remoteBuffer.begin()), UNITS, mDpi ); + } +} + void RasterizingTask::Rasterize( NSVGrasterizer* rasterizer ) { - if( mWidth > 0u && mHeight > 0u ) + if( mParsedSvg != NULL && mWidth > 0u && mHeight > 0u ) { - float scaleX = static_cast( mWidth ) / mParsedSvg->width; - float scaleY = static_cast( mHeight ) / mParsedSvg->height; + float scaleX = static_cast( mWidth ) / mParsedSvg->width; + float scaleY = static_cast( mHeight ) / mParsedSvg->height; float scale = scaleX < scaleY ? scaleX : scaleY; unsigned int bufferStride = mWidth*Pixel::GetBytesPerPixel( Pixel::RGBA8888 ); unsigned int bufferSize = bufferStride * mHeight; @@ -59,6 +92,11 @@ void RasterizingTask::Rasterize( NSVGrasterizer* rasterizer ) } } +NSVGimage* RasterizingTask::GetParsedImage() const +{ + return mParsedSvg; +} + SvgVisual* RasterizingTask::GetSvgVisual() const { return mSvgVisual.Get(); @@ -225,6 +263,7 @@ void SvgRasterizeThread::Run() SetThreadName( "SVGThread" ); while( RasterizingTaskPtr task = NextTaskToProcess() ) { + task->Load( ); task->Rasterize( mRasterizer ); AddCompletedTask( task ); }