Fix for memory leak with BufferImages from FontClient and AtlasManager.
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / public-api / controls / control-impl.cpp
index 1d1e5b0..7bcaad4 100644 (file)
 #include <limits>
 #include <stack>
 #include <dali/public-api/actors/image-actor.h>
-#include <dali/public-api/actors/renderer.h>
 #include <dali/public-api/animation/constraint.h>
 #include <dali/public-api/animation/constraints.h>
-#include <dali/public-api/geometry/geometry.h>
 #include <dali/public-api/object/type-registry.h>
+#include <dali/public-api/size-negotiation/relayout-container.h>
 #include <dali/devel-api/object/type-registry-helper.h>
+#include <dali/devel-api/rendering/renderer.h>
 #include <dali/devel-api/scripting/scripting.h>
-#include <dali/public-api/shader-effects/shader.h>
-#include <dali/public-api/shader-effects/material.h>
-#include <dali/public-api/size-negotiation/relayout-container.h>
 #include <dali/integration-api/debug.h>
 
 // INTERNAL INCLUDES
@@ -1073,15 +1070,23 @@ void Control::OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dime
 
 Vector3 Control::GetNaturalSize()
 {
+  //Control's natural size is the size of its background image if it has been set, or ZERO otherwise
+  Vector3 naturalSize = Vector3::ZERO;
   if( mImpl->mBackground )
   {
-    Actor actor = mImpl->mBackground->actor;
-    if( actor )
+    Material backgroundMaterial = mImpl->mBackground->actor.GetRendererAt(0).GetMaterial();
+    if( backgroundMaterial.GetNumberOfSamplers() > 0 )
     {
-      return actor.GetNaturalSize();
+      Image backgroundImage =  backgroundMaterial.GetSamplerAt(0).GetImage();
+      if( backgroundImage )
+      {
+        naturalSize.x = backgroundImage.GetWidth();
+        naturalSize.y = backgroundImage.GetHeight();
+      }
     }
   }
-  return Vector3();
+
+  return naturalSize;
 }
 
 float Control::CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension )