Unregister visual directly when IMAGE have invalid value 31/269231/4
authorEunki, Hong <eunkiki.hong@samsung.com>
Tue, 11 Jan 2022 17:40:53 +0000 (02:40 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Wed, 12 Jan 2022 05:25:56 +0000 (14:25 +0900)
Current code unregist visual only if we use empty Property::Map.
This patch make empty (or invalid) Property::Value also unregist visual.

Change-Id: Idddd7b4158e68ed0f9a51e825a5a1141cdbff8de
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
automated-tests/src/dali-toolkit-internal/utc-Dali-DebugRendering.cpp
dali-toolkit/internal/controls/image-view/image-view-impl.cpp
dali-toolkit/internal/controls/image-view/image-view-impl.h

index 2887613261b179b9a292a9ca0c9fd73f9b7de4b5..9b733f206500a3298a9e21c80db43777deb16eea 100755 (executable)
@@ -292,16 +292,32 @@ int UtcDaliDebugRenderingGetVisual3(void)
 
   // Test that image view with empty property map don't make visual even DebugRendering is enabled.
   map.Clear();
-  ImageView imageView = ImageView::New();
-  imageView.SetProperty(Control::Property::BACKGROUND, map);
-  imageView.SetProperty(ImageView::Property::IMAGE, map);
-
-  application.GetScene().Add(imageView);
+  ImageView imageView1 = ImageView::New();
+  imageView1.SetProperty(Control::Property::BACKGROUND, map);
+  imageView1.SetProperty(ImageView::Property::IMAGE, map);
+
+  // Test that image view with empty property value don't make visual even DebugRendering is enabled.
+  Property::Value emptyValue;
+  ImageView imageView2 = ImageView::New();
+  imageView2.SetProperty(Control::Property::BACKGROUND, emptyValue);
+  imageView2.SetProperty(ImageView::Property::IMAGE, emptyValue);
+
+  // Test that image view with invalid property value don't make visual even DebugRendering is enabled.
+  Property::Value invalidValue(static_cast<int>(3));
+  ImageView imageView3 = ImageView::New();
+  imageView3.SetProperty(Control::Property::BACKGROUND, invalidValue);
+  imageView3.SetProperty(ImageView::Property::IMAGE, invalidValue);
+
+  application.GetScene().Add(imageView1);
+  application.GetScene().Add(imageView2);
+  application.GetScene().Add(imageView3);
 
   application.SendNotification();
   application.Render();
 
-  DALI_TEST_EQUALS( imageView.GetRendererCount(), 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( imageView1.GetRendererCount(), 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( imageView2.GetRendererCount(), 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( imageView3.GetRendererCount(), 0u, TEST_LOCATION );
 
   EnvironmentVariable::SetTestingEnvironmentVariable(false);
   END_TEST;
@@ -404,4 +420,4 @@ int UtcDaliDebugRenderingRenderText(void)
   }
 
   END_TEST;
-}
\ No newline at end of file
+}
index 1d9deecebff3d1e70affe6e178bee5a23f982bd6..0011c0200066ba3e300b19089aba51386f4dbec6 100644 (file)
@@ -171,6 +171,19 @@ void ImageView::SetImage(const std::string& url, ImageDimensions size)
   // Signal that a Relayout may be needed
 }
 
+void ImageView::ClearImageVisual()
+{
+  // Clear cached properties
+  mPropertyMap.Clear();
+  mUrl.clear();
+
+  // Unregister the exsiting visual
+  DevelControl::UnregisterVisual(*this, Toolkit::ImageView::Property::IMAGE);
+
+  // Trigger a size negotiation request that may be needed when unregistering a visual.
+  RelayoutRequest();
+}
+
 void ImageView::EnablePreMultipliedAlpha(bool preMultipled)
 {
   if(mVisual)
@@ -477,20 +490,12 @@ void ImageView::SetProperty(BaseObject* object, Property::Index index, const Pro
         else
         {
           map = value.GetMap();
-          if(map)
+          if(DALI_LIKELY(map))
           {
             // the property map is emtpy map. Unregister visual.
             if(DALI_UNLIKELY(map->Count() == 0u))
             {
-              // Clear cached properties
-              impl.mPropertyMap.Clear();
-              impl.mUrl.clear();
-
-              // Unregister the exsiting visual
-              DevelControl::UnregisterVisual(impl, Toolkit::ImageView::Property::IMAGE);
-
-              // Trigger a size negotiation request that may be needed when unregistering a visual.
-              impl.RelayoutRequest();
+              impl.ClearImageVisual();
             }
             else
             {
@@ -520,6 +525,11 @@ void ImageView::SetProperty(BaseObject* object, Property::Index index, const Pro
               }
             }
           }
+          else
+          {
+            // invalid property value comes. Unregister visual.
+            impl.ClearImageVisual();
+          }
         }
         break;
       }
index ef48839c263a804ae51760bd75977f05acdbd61e..cf288ab28542f312d477e6b2feca92e58496b624 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_INTERNAL_IMAGE_VIEW_H
 
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 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.
@@ -67,6 +67,13 @@ public:
    */
   void SetImage(const std::string& imageUrl, ImageDimensions size);
 
+  /**
+   * @brief Unregister ImageView IMAGE visual
+   *
+   * ImageView will display nothing
+   */
+  void ClearImageVisual();
+
   /**
    * @brief Set whether the Pre-multiplied Alpha Blending is required
    *