#define DALI_TOOLKIT_INTERNAL_IMAGE_VISUAL_H
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 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.
#include <dali/public-api/common/intrusive-ptr.h>
#include <dali/public-api/images/image-operations.h>
#include <dali/public-api/object/weak-handle.h>
+#include <dali/public-api/rendering/visual-renderer.h>
// INTERNAL INCLUDES
#include <dali-toolkit/devel-api/image-loader/atlas-upload-observer.h>
#include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
-#include <dali-toolkit/internal/visuals/texture-upload-observer.h>
+#include <dali-toolkit/internal/image-loader/fast-track-loading-task.h>
+#include <dali-toolkit/internal/texture-manager/texture-upload-observer.h>
#include <dali-toolkit/internal/visuals/visual-base-impl.h>
#include <dali-toolkit/internal/visuals/visual-url.h>
#include <dali-toolkit/public-api/visuals/image-visual-properties.h>
/**
* @copydoc Visual::Base::OnDoAction
*/
- void OnDoAction(const Dali::Property::Index actionName, const Dali::Property::Value& attributes) override;
+ void OnDoAction(const Dali::Property::Index actionId, const Dali::Property::Value& attributes) override;
protected:
/**
void OnSetTransform() override;
/**
- * @copydoc Visual::Base::IsResourceReady
- */
- bool IsResourceReady() const override;
-
- /**
* @copydoc Visual::Base::UpdateShader
*/
void UpdateShader() override;
*/
Shader GenerateShader() const override;
+ /**
+ * @copydoc Visual::Base::OnGetPropertyObject
+ */
+ Dali::Property OnGetPropertyObject(Dali::Property::Key key) override;
+
public:
/**
* @copydoc AtlasUploadObserver::UploadCompleted
void UploadCompleted() override;
/**
- * @copydoc TextureUploadObserver::UploadCompleted
+ * @copydoc TextureUploadObserver::LoadCompleted
*
* To avoid rendering garbage pixels, renderer should be added to actor after the resources are ready.
* This callback is the place to add the renderer as it would be called once the loading is finished.
*/
- void UploadComplete(bool success, int32_t textureId, TextureSet textureSet, bool usingAtlas, const Vector4& atlasRectangle, bool preMultiplied) override;
+ void LoadComplete(bool success, TextureInformation textureInformation) override;
-private:
/**
- * @copydoc TextureUploadObserver::LoadComplete
+ * @brief Test callback for FastTrackLoadingTask
*
- * To avoid rendering garbage pixels, renderer should be added to actor after the resources are ready.
- * This callback is the place to add the renderer as it would be called once the PixelBuffer loading is finished.
+ * @param[in] task The pointer of task who call this callback.
*/
- void LoadComplete(bool loadSuccess, Devel::PixelBuffer pixelBuffer, const VisualUrl& url, bool preMultiplied) override
- {
- }
+ void FastLoadComplete(FastTrackLoadingTaskPtr task);
+private:
/**
* Allocate the mask data when a masking property is defined in the property map
*/
void RemoveTexture();
/**
+ * @brief Compute texture size
+ */
+ void ComputeTextureSize();
+
+ /**
+ * @brief Compute mask texture ratio
+ * @return The Mask Texture Ratio
+ */
+ Vector2 ComputeMaskTextureRatio();
+
+ /**
* Helper method to set individual values by index key.
* @param[in] index The index key of the value
* @param[in] value The value
*/
void DoSetProperty(Property::Index index, const Property::Value& value);
+ /**
+ * @brief Check whether the mask texture is loaded or not.
+ * If MaskingType is MASKING_ON_LOADING and mask texture is failed to load, update shader.
+ */
+ void CheckMaskTexture();
+
+ /**
+ * @brief Reset Renderer using empty texture
+ * For drawing empty visual, reset the renderer.
+ */
+ void ResetRenderer();
+
+ /**
+ * @brief Show broken image when image loading is failed.
+ */
+ void ShowBrokenImage();
+
+ /**
+ * @brief Remove current added fast track upload task.
+ */
+ void ResetFastTrackLoadingTask();
+
+ /**
+ * @brief Update geometry information and get the generated result.
+ *
+ * @param[in] textureId Id of texture. It will be used when we use AddOn.
+ * @param[in] createForce True if we need to create geometry forcely. False if we don't re-generate geometry.
+ * @return Generated geometry, or empty handle if we don't need to update geometry.
+ */
+ Geometry GenerateGeometry(TextureManager::TextureId textureId, bool createForce);
+
private:
Vector4 mPixelArea;
+ Property::Index mPixelAreaIndex;
WeakHandle<Actor> mPlacementActor;
VisualUrl mImageUrl;
TextureManager::MaskingDataPointer mMaskingData;
Dali::ImageDimensions mDesiredSize;
TextureManager::TextureId mTextureId;
TextureSet mTextures;
+ Vector2 mTextureSize;
+ Vector2 mPlacementActorSize;
+
+ FastTrackLoadingTaskPtr mFastTrackLoadingTask; ///< For fast track uploading.
ImageVisualShaderFactory& mImageVisualShaderFactory;
Dali::Toolkit::ImageVisual::ReleasePolicy::Type mReleasePolicy;
Vector4 mAtlasRect;
Dali::ImageDimensions mAtlasRectSize;
- TextureManager::LoadState mLoadState; ///< The texture loading state
- bool mAttemptAtlasing; ///< If true will attempt atlasing, otherwise create unique texture
- bool mOrientationCorrection; ///< true if the image will have it's orientation corrected.
+ TextureManager::LoadState mLoadState; ///< The texture loading state
+ bool mAttemptAtlasing; ///< If true will attempt atlasing, otherwise create unique texture
+ bool mOrientationCorrection; ///< true if the image will have it's orientation corrected.
+ bool mNeedYuvToRgb{false}; ///< true if we need to convert yuv to rgb.
+ bool mNeedUnifiedYuvAndRgb{false}; ///< true if we need to support both yuv and rgb.
+ bool mEnableBrokenImage{true}; ///< true if enable broken image.
+ bool mUseFastTrackUploading{false}; ///< True if we use fast tack feature.
+ bool mRendererAdded{false}; ///< True if renderer added into actor.
+ bool mUseBrokenImageRenderer{false}; ///< True if renderer changed as broken image.
};
} // namespace Internal