/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 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.
{
namespace Internal
{
-RasterizingTask::RasterizingTask(SvgVisual* svgRenderer, VectorImageRenderer vectorRenderer, const VisualUrl& url, float dpi, unsigned int width, unsigned int height)
-: mSvgVisual(svgRenderer),
+RasterizingTask::RasterizingTask(SvgVisual* svgVisual, VectorImageRenderer vectorRenderer, const VisualUrl& url, float dpi, unsigned int width, unsigned int height)
+: mSvgVisual(svgVisual),
mVectorRenderer(vectorRenderer),
mUrl(url),
mDpi(dpi),
void RasterizingTask::Load()
{
- if(!mUrl.IsLocalResource())
+ if(mVectorRenderer.IsLoaded())
{
- Dali::Vector<uint8_t> remoteBuffer;
- if(!Dali::FileLoader::DownloadFileSynchronously(mUrl.GetUrl(), remoteBuffer))
- {
- DALI_LOG_ERROR("RasterizingTask::Load: Failed to download file! [%s]\n", mUrl.GetUrl().c_str());
- return;
- }
+ // Already loaded
+ mLoadSuccess = true;
+ return;
+ }
- remoteBuffer.PushBack('\0');
+ Dali::Vector<uint8_t> buffer;
- if(!mVectorRenderer.Load(remoteBuffer, mDpi))
+ if(!mUrl.IsLocalResource())
+ {
+ if(!Dali::FileLoader::DownloadFileSynchronously(mUrl.GetUrl(), buffer))
{
- DALI_LOG_ERROR("RasterizingTask::Load:Failed to load data! [%s]\n", mUrl.GetUrl().c_str());
+ DALI_LOG_ERROR("Failed to download file! [%s]\n", mUrl.GetUrl().c_str());
return;
}
-
- mLoadSuccess = true;
}
else
{
- mLoadSuccess = true;
+ if(!Dali::FileLoader::ReadFile(mUrl.GetUrl(), buffer))
+ {
+ DALI_LOG_ERROR("Failed to read file! [%s]\n", mUrl.GetUrl().c_str());
+ return;
+ }
}
-}
-void RasterizingTask::Rasterize()
-{
- if(mWidth <= 0u || mHeight <= 0u)
+ buffer.PushBack('\0');
+
+ if(!mVectorRenderer.Load(buffer, mDpi))
{
- DALI_LOG_ERROR("RasterizingTask::Rasterize: Size is zero!\n");
+ DALI_LOG_ERROR("Failed to load data! [%s]\n", mUrl.GetUrl().c_str());
return;
}
- Devel::PixelBuffer pixelBuffer = Devel::PixelBuffer::New(mWidth, mHeight, Dali::Pixel::RGBA8888);
-
- uint32_t defaultWidth, defaultHeight;
- mVectorRenderer.GetDefaultSize(defaultWidth, defaultHeight);
-
- float scaleX = static_cast<float>(mWidth) / static_cast<float>(defaultWidth);
- float scaleY = static_cast<float>(mHeight) / static_cast<float>(defaultHeight);
- float scale = scaleX < scaleY ? scaleX : scaleY;
+ mLoadSuccess = true;
+}
- if(!mVectorRenderer.Rasterize(pixelBuffer, scale))
+void RasterizingTask::Rasterize()
+{
+ Devel::PixelBuffer pixelBuffer = mVectorRenderer.Rasterize(mWidth, mHeight);
+ if(!pixelBuffer)
{
- DALI_LOG_ERROR("RasterizingTask::Rasterize: Rasterize is failed! [%s]\n", mUrl.GetUrl().c_str());
+ DALI_LOG_ERROR("Rasterize is failed! [%s]\n", mUrl.GetUrl().c_str());
return;
}
mPixelData = Devel::PixelBuffer::Convert(pixelBuffer);
}
-VectorImageRenderer RasterizingTask::GetVectorRenderer() const
-{
- return mVectorRenderer;
-}
-
bool RasterizingTask::IsLoaded() const
{
return mLoadSuccess;
{
while(RasterizingTaskPtr task = NextCompletedTask())
{
- task->GetSvgVisual()->ApplyRasterizedImage(task->GetVectorRenderer(), task->GetPixelData(), task->IsLoaded());
+ task->GetSvgVisual()->ApplyRasterizedImage(task->GetPixelData(), task->IsLoaded());
}
UnregisterProcessor();