X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fsvg%2Fsvg-rasterize-thread.cpp;h=24f9981e47dd09ae4cc5601ad49dea1abc51c0eb;hb=42e6d93abfd4fc9ced3b9f366ebbc32228aa490b;hp=273f08b682d11c14440524f51de3c4ef89cf8874;hpb=9161d9828d1a5bb3c7eaf83002863de84b23b751;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp b/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp index 273f08b..24f9981 100644 --- a/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp +++ b/dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp @@ -1,5 +1,5 @@ /* - * 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. @@ -33,8 +33,8 @@ namespace Toolkit { 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), @@ -50,62 +50,55 @@ RasterizingTask::~RasterizingTask() void RasterizingTask::Load() { - if(!mUrl.IsLocalResource()) + if(mVectorRenderer.IsLoaded()) { - Dali::Vector 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 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(mWidth) / static_cast(defaultWidth); - float scaleY = static_cast(mHeight) / static_cast(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; @@ -159,7 +152,7 @@ void SvgRasterizeThread::AddTask(RasterizingTaskPtr task) // Lock while adding task to the queue ConditionalWait::ScopedLock lock(mConditionalWait); wasEmpty = mRasterizeTasks.empty(); - if(!wasEmpty && task != NULL) + if(!wasEmpty && task) { // Remove the tasks with the same renderer. // Older task which waiting to rasterize and apply the svg to the same renderer is expired. @@ -272,7 +265,7 @@ void SvgRasterizeThread::ApplyRasterizedSVGToSampler() { while(RasterizingTaskPtr task = NextCompletedTask()) { - task->GetSvgVisual()->ApplyRasterizedImage(task->GetVectorRenderer(), task->GetPixelData(), task->IsLoaded()); + task->GetSvgVisual()->ApplyRasterizedImage(task->GetPixelData(), task->IsLoaded()); } UnregisterProcessor();