[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / image / image-visual.h
index 0cbc3ba..60a67f1 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_INTERNAL_IMAGE_VISUAL_H
 
 /*
- * Copyright (c) 2022 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/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>
@@ -233,6 +235,11 @@ protected:
    */
   Shader GenerateShader() const override;
 
+  /**
+   * @copydoc Visual::Base::OnGetPropertyObject
+   */
+  Dali::Property OnGetPropertyObject(Dali::Property::Key key) override;
+
 public:
   /**
    * @copydoc AtlasUploadObserver::UploadCompleted
@@ -250,6 +257,13 @@ public:
    */
   void LoadComplete(bool success, TextureInformation textureInformation) override;
 
+  /**
+   * @brief Test callback for FastTrackLoadingTask
+   *
+   * @param[in] task The pointer of task who call this callback.
+   */
+  void FastLoadComplete(FastTrackLoadingTaskPtr task);
+
 private:
   /**
    * Allocate the mask data when a masking property is defined in the property map
@@ -299,14 +313,57 @@ private:
   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;
@@ -314,6 +371,10 @@ private:
   Dali::ImageDimensions     mDesiredSize;
   TextureManager::TextureId mTextureId;
   TextureSet                mTextures;
+  Vector2                   mTextureSize;
+  Vector2                   mPlacementActorSize;
+
+  FastTrackLoadingTaskPtr mFastTrackLoadingTask; ///< For fast track uploading.
 
   ImageVisualShaderFactory& mImageVisualShaderFactory;
 
@@ -325,9 +386,15 @@ private:
   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