Get NaturalSize only if required 93/289393/2
authorEunki, Hong <eunkiki.hong@samsung.com>
Tue, 7 Mar 2023 04:35:49 +0000 (13:35 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Tue, 7 Mar 2023 05:12:01 +0000 (14:12 +0900)
Since "GetClosestImageSize" spend a lot of time,
let we setup fitting mode only if we use it.

Change-Id: Id08c0d08c1784b60f4c3bccecf9affecdda8fc61
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali-toolkit/internal/controls/image-view/image-view-impl.cpp
dali-toolkit/internal/controls/image-view/image-view-impl.h

index 1133211..7fcc702 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 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.
@@ -267,9 +267,6 @@ void ImageView::OnRelayout(const Vector2& size, RelayoutContainer& container)
 
     bool zeroPadding = (padding == Extents());
 
-    Vector2 naturalSize;
-    mVisual.GetNaturalSize(naturalSize);
-
     Dali::LayoutDirection::Type layoutDirection = static_cast<Dali::LayoutDirection::Type>(
       Self().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
     if(Dali::LayoutDirection::RIGHT_TO_LEFT == layoutDirection)
@@ -281,7 +278,7 @@ void ImageView::OnRelayout(const Vector2& size, RelayoutContainer& container)
     Vector2 finalSize   = size - Vector2(padding.start + padding.end, padding.top + padding.bottom);
     Vector2 finalOffset = Vector2(padding.start, padding.top);
 
-    ApplyFittingMode(finalSize, naturalSize, finalOffset, zeroPadding, transformMap);
+    ApplyFittingMode(finalSize, finalOffset, zeroPadding, transformMap);
 
     mVisual.SetTransformAndSize(transformMap, size);
 
@@ -413,7 +410,7 @@ void ImageView::SetTransformMapForFittingMode(Vector2 finalSize, Vector2 natural
   }
 }
 
-void ImageView::ApplyFittingMode(Vector2 finalSize, Vector2 naturalSize, Vector2 finalOffset, bool zeroPadding, Property::Map& transformMap)
+void ImageView::ApplyFittingMode(Vector2 finalSize, Vector2 finalOffset, bool zeroPadding, Property::Map& transformMap)
 {
   Visual::FittingMode fittingMode = Toolkit::GetImplementation(mVisual).GetFittingMode();
 
@@ -429,6 +426,14 @@ void ImageView::ApplyFittingMode(Vector2 finalSize, Vector2 naturalSize, Vector2
   {
     mImageVisualPaddingSetByTransform = true;
 
+    Vector2 naturalSize;
+    // NaturalSize will not be used for FILL fitting mode, which is default.
+    // Skip GetNaturalSize
+    if(fittingMode != Visual::FittingMode::FILL)
+    {
+      mVisual.GetNaturalSize(naturalSize);
+    }
+
     // If FittingMode use FIT_WIDTH or FIT_HEIGTH, it need to change proper fittingMode
     if(fittingMode == Visual::FittingMode::FIT_WIDTH)
     {
index 47f7283..7caf9eb 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_INTERNAL_IMAGE_VIEW_H
 
 /*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 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.
@@ -177,12 +177,11 @@ private:
   /**
    * @brief Apply fittingMode
    * param[in] finalSize The size for fittingMode
-   * param[in] textureSize The size of texture
    * param[in] offset The offset for fittingMode
    * param[in] zeroPadding whether padding is zero
    * param[in] transformMap  The map for fitting image
    */
-  void ApplyFittingMode(Vector2 finalSize, Vector2 textureSize, Vector2 offset, bool zeroPadding, Property::Map& transformMap);
+  void ApplyFittingMode(Vector2 finalSize, Vector2 offset, bool zeroPadding, Property::Map& transformMap);
 
 private:
   // Undefined