#define DALI_INTERNAL_ANIMATED_IMAGE_LOADING_IMPL_H
/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 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.
*/
// EXTERNAL INCLUDES
#include <dali/public-api/common/dali-vector.h>
+#include <dali/public-api/common/intrusive-ptr.h>
#include <dali/public-api/common/vector-wrapper.h>
#include <dali/public-api/math/uint-16-pair.h>
-#include <dali/public-api/common/intrusive-ptr.h>
#include <dali/public-api/object/base-object.h>
// INTERNAL INCLUDES
-#include <dali/public-api/dali-adaptor-common.h>
#include <dali/devel-api/adaptor-framework/animated-image-loading.h>
+#include <dali/public-api/dali-adaptor-common.h>
+#include <dali/internal/imaging/common/image-operations.h>
namespace Dali
{
namespace Internal
{
-
namespace Adaptor
{
-
class AnimatedImageLoading;
typedef IntrusivePtr<AnimatedImageLoading> AnimatedImageLoadingPtr;
class AnimatedImageLoading : public BaseObject
{
public:
-
/**
* @copydoc Dali::AnimatedImageLoading::New()
*/
- static AnimatedImageLoadingPtr New( const std::string& url, bool isLocalResource );
+ static AnimatedImageLoadingPtr New(const std::string& url, bool isLocalResource);
AnimatedImageLoading() = default;
// Moveable but not copyable
- AnimatedImageLoading( const AnimatedImageLoading& );
- AnimatedImageLoading& operator=( const AnimatedImageLoading& );
- AnimatedImageLoading( AnimatedImageLoading&& ) = default;
- AnimatedImageLoading& operator=( AnimatedImageLoading&& ) = default;
+ AnimatedImageLoading(const AnimatedImageLoading&);
+ AnimatedImageLoading& operator =(const AnimatedImageLoading&);
+ AnimatedImageLoading(AnimatedImageLoading&&) = default;
+ AnimatedImageLoading& operator=(AnimatedImageLoading&&) = default;
/**
* @brief Destructor
*/
- virtual ~AnimatedImageLoading() = default;
+ ~AnimatedImageLoading() override = default;
+
+ /**
+ * @brief Load a frame of the animated image.
+ *
+ * @note This function will load the entire animated image into memory if not already loaded.
+ * @param[in] frameIndex The frame index to load.
+ * @param[in] size The width and height to fit the loaded image to.
+ * @param[in] fittingMode The FittingMode of the resource to load
+ * @param[in] samplingMode The SamplingMode of the resource to load
+ *
+ * @return Dali::Devel::PixelBuffer The loaded PixelBuffer. If loading is fail, return empty handle.
+ */
+ Dali::Devel::PixelBuffer LoadFrame(uint32_t frameIndex,
+ ImageDimensions size,
+ FittingMode::Type fittingMode,
+ Dali::SamplingMode::Type samplingMode)
+ {
+ Dali::Devel::PixelBuffer pixelBuffer = LoadFrame(frameIndex);
+ return Dali::Internal::Platform::ApplyAttributesToBitmap(pixelBuffer, size, fittingMode, samplingMode);
+ }
+public:
/**
* @copydoc Dali::AnimatedImageLoading::LoadNextNFrames()
*/
- virtual bool LoadNextNFrames( uint32_t frameStartIndex, int count, std::vector<Dali::PixelData>& pixelData ) = 0;
+ virtual bool LoadNextNFrames(uint32_t frameStartIndex, int count, std::vector<Dali::PixelData>& pixelData) = 0;
/**
* @copydoc Dali::AnimatedImageLoading::GetImageSize()
/**
* @copydoc Dali::AnimatedImageLoading::LoadFrameDelays()
*/
- virtual uint32_t GetFrameInterval( uint32_t frameIndex ) const = 0;
+ virtual uint32_t GetFrameInterval(uint32_t frameIndex) const = 0;
+
+ /**
+ * @copydoc Dali::AnimatedImageLoading::GetUrl()
+ */
+ virtual std::string GetUrl() const = 0;
+
+ /**
+ * @copydoc Dali::AnimatedImageLoading::HasLoadingSucceeded()
+ */
+ virtual bool HasLoadingSucceeded() const = 0;
+
+private:
+ /**
+ * @brief Load a frame of the animated image.
+ *
+ * @note This function will load the entire animated image into memory if not already loaded.
+ * @param[in] frameIndex The frame index to load.
+ * @return Dali::Devel::PixelBuffer The loaded PixelBuffer. If loading is fail, return empty handle.
+ */
+ virtual Dali::Devel::PixelBuffer LoadFrame(uint32_t frameIndex) = 0;
};
} // namespace Adaptor
// Helpers for api forwarding methods
-inline Internal::Adaptor::AnimatedImageLoading& GetImplementation( Dali::AnimatedImageLoading& handle)
+inline Internal::Adaptor::AnimatedImageLoading& GetImplementation(Dali::AnimatedImageLoading& handle)
{
- DALI_ASSERT_ALWAYS( handle && "AnimatedImageLoading handle is empty" );
+ DALI_ASSERT_ALWAYS(handle && "AnimatedImageLoading handle is empty");
BaseObject& object = handle.GetBaseObject();
- return static_cast< Internal::Adaptor::AnimatedImageLoading& >( object );
+ return static_cast<Internal::Adaptor::AnimatedImageLoading&>(object);
}
-inline const Internal::Adaptor::AnimatedImageLoading& GetImplementation( const Dali::AnimatedImageLoading& handle )
+inline const Internal::Adaptor::AnimatedImageLoading& GetImplementation(const Dali::AnimatedImageLoading& handle)
{
- DALI_ASSERT_ALWAYS( handle && "AnimatedImageLoading handle is empty" );
+ DALI_ASSERT_ALWAYS(handle && "AnimatedImageLoading handle is empty");
const BaseObject& object = handle.GetBaseObject();
- return static_cast< const Internal::Adaptor::AnimatedImageLoading& >( object );
+ return static_cast<const Internal::Adaptor::AnimatedImageLoading&>(object);
}
} // namespace Dali