Merge "Add ECORE_IMF_CALLBACK_SELECTION_SET to IMFContext" into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / image-view / image-view-impl.cpp
index 1d9deec..f769b44 100644 (file)
@@ -61,8 +61,8 @@ DALI_TYPE_REGISTRATION_END()
 
 using namespace Dali;
 
-ImageView::ImageView()
-: Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT)),
+ImageView::ImageView(ControlBehaviour additionalBehaviour)
+: Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT | additionalBehaviour)),
   mImageSize(),
   mImageVisualPaddingSetByTransform(false),
   mImageViewPixelAreaSetByFittingMode(false)
@@ -73,9 +73,9 @@ ImageView::~ImageView()
 {
 }
 
-Toolkit::ImageView ImageView::New()
+Toolkit::ImageView ImageView::New(ControlBehaviour additionalBehaviour)
 {
-  ImageView* impl = new ImageView();
+  ImageView* impl = new ImageView(additionalBehaviour);
 
   Toolkit::ImageView handle = Toolkit::ImageView(*impl);
 
@@ -94,10 +94,7 @@ void ImageView::OnInitialize()
   Dali::Toolkit::Control handle(GetOwner());
   handle.ResourceReadySignal().Connect(this, &ImageView::OnResourceReady);
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::IMAGE));
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::IMAGE);
 }
 
 void ImageView::SetImage(const Property::Map& map)
@@ -171,6 +168,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 +487,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 +522,11 @@ void ImageView::SetProperty(BaseObject* object, Property::Index index, const Pro
               }
             }
           }
+          else
+          {
+            // invalid property value comes. Unregister visual.
+            impl.ClearImageVisual();
+          }
         }
         break;
       }