#include <dali/public-api/common/vector-wrapper.h>
#include <dali/public-api/object/ref-object.h>
#include <dali/public-api/rendering/texture-set.h>
-#include <dali-toolkit/internal/visuals/visual-url.h>
-
-#ifdef NO_THORVG
-struct NSVGimage;
-struct NSVGrasterizer;
-#else /* NO_THORVG */
-#include <string.h>
#include <dali/devel-api/adaptor-framework/vector-image-renderer.h>
-#endif /* NO_THORVG */
+#include <dali/integration-api/adaptor-framework/log-factory-interface.h>
+#include <dali/integration-api/processor-interface.h>
+#include <memory>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/internal/visuals/visual-url.h>
namespace Dali
{
class RasterizingTask : public RefObject
{
public:
-#ifdef NO_THORVG
- /**
- * Constructor
- *
- * @param[in] svgRenderer The renderer which the rasterized image to be applied.
- * @param[in] parsedSvg The parsed svg for rasterizing.
- * Note, after the task is added to the worker thread, the worker thread takes over the ownership.
- * When the image is to be deleted, delete it in the worker thread by calling SvgRasterizeThread::DeleteImage( parsedSvg ).
- * @param[in] url The URL to svg resource to use.
- * @param[in] width The rasterization width.
- * @param[in] height The rasterization height.
- */
- RasterizingTask( SvgVisual* svgRenderer, NSVGimage* parsedSvg, const VisualUrl& url, float dpi, unsigned int width, unsigned int height );
-#else /* NO_THORVG */
/**
* Constructor
* @param[in] svgRenderer The renderer which the rasterized image to be applied.
* @param[in] loaded The svg resource is loaded or not.
*/
RasterizingTask( SvgVisual* svgRenderer, VectorImageRenderer vectorRenderer, const VisualUrl& url, float dpi, unsigned int width, unsigned int height, bool loaded );
-#endif /* NO_THORVG */
/**
* Destructor.
/**
* Do the rasterization with the mRasterizer.
*/
- void Rasterize( );
+ void Rasterize();
/**
* Get the svg visual
*/
PixelData GetPixelData() const;
-#ifdef NO_THORVG
- /**
- * Get the parsed data.
- * @return parsed image data.
- */
- NSVGimage* GetParsedImage() const;
- /**
- * Get default size of svg
- *
- * @param[out] width The default width of svg
- * @param[out] height The default height of svg
- */
- void GetDefaultSize( uint32_t& width, uint32_t& height ) const;
-#else /* NO_THORVG */
/**
* Get the VectorRenderer.
* @return VectorRenderer.
* @return True if the resource is loaded.
*/
bool IsLoaded() const;
-#endif /* NO_THORVG */
/**
* Load svg file
private:
SvgVisualPtr mSvgVisual;
-#ifdef NO_THORVG
- NSVGimage* mParsedSvg;
-#else /* NO_THORVG */
VectorImageRenderer mVectorRenderer;
-#endif /* NO_THORVG */
VisualUrl mUrl;
PixelData mPixelData;
float mDpi;
unsigned int mWidth;
unsigned int mHeight;
-#ifdef NO_THORVG
- NSVGrasterizer* mRasterizer;
-#else /* NO_THORVG */
bool mLoaded;
-#endif /* NO_THORVG */
};
/**
* The worker thread for SVG rasterization.
*/
-class SvgRasterizeThread : public Thread
+class SvgRasterizeThread : public Thread, Integration::Processor
{
public:
*
* @param[in] trigger The trigger to wake up the main thread.
*/
- SvgRasterizeThread( EventThreadCallback* trigger );
+ SvgRasterizeThread();
/**
* Terminate the svg rasterize thread, join and delete.
*/
void RemoveTask( SvgVisual* visual );
-#ifdef NO_THORVG
- /**
- * Delete the parsed SVG image, called by main thread.
- *
- * The parsed svg should be deleted in worker thread, as the main thread does not know whether a rasterization of this svg is ongoing.
- *
- * @param[in] parsedImage The image to be deleted
- */
- void DeleteImage( NSVGimage* parsedSvg );
-#else /* NO_THORVG */
/**
* Delete the parsed SVG image, called by main thread.
*
* @param[in] VectorImage The image to be deleted
*/
void DeleteImage( VectorImageRenderer vectorImage );
-#endif /* NO_THORVG */
+
+ /**
+ * @copydoc Dali::Integration::Processor::Process()
+ */
+ void Process() override;
private:
*/
void AddCompletedTask( RasterizingTaskPtr task );
+ /**
+ * Applies the rasterized image to material
+ */
+ void ApplyRasterizedSVGToSampler();
+
+ /**
+ * @brief Unregister a previously registered processor
+ *
+ */
+ void UnregisterProcessor();
+
protected:
/**
std::vector<RasterizingTaskPtr> mRasterizeTasks; //The queue of the tasks waiting to rasterize the SVG image
std::vector <RasterizingTaskPtr> mCompletedTasks; //The queue of the tasks with the SVG rasterization completed
-#ifdef NO_THORVG
- Vector<NSVGimage*> mDeleteSvg; //The images that the event thread requested to delete
-#else /* NO_THORVG */
- Vector <VectorImageRenderer*> mDeleteSvg; //The images that the event thread requested to delete
-#endif /* NO_THORVG */
+ Vector <VectorImageRenderer*> mDeleteSvg; //The images that the event thread requested to delete
ConditionalWait mConditionalWait;
Dali::Mutex mMutex;
- EventThreadCallback* mTrigger;
-
+ std::unique_ptr< EventThreadCallback > mTrigger;
+ const Dali::LogFactoryInterface& mLogFactory;
bool mIsThreadWaiting;
+ bool mProcessorRegistered;
};
} // namespace Internal