X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fimage-view%2Fimage-view-impl.cpp;h=f769b44e0ce4c35db1f267657ef306fae780e3b4;hb=24513084007fb981ed006ad2e8f8649d7b54e176;hp=c29988655479096ebf4c4c94552e333572efde66;hpb=980728a7e35b8ddd28f70c090243e8076e21536e;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/image-view/image-view-impl.cpp b/dali-toolkit/internal/controls/image-view/image-view-impl.cpp index c299886..f769b44 100644 --- a/dali-toolkit/internal/controls/image-view/image-view-impl.cpp +++ b/dali-toolkit/internal/controls/image-view/image-view-impl.cpp @@ -1,5 +1,5 @@ /* - * 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. @@ -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( - 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,33 +487,46 @@ void ImageView::SetProperty(BaseObject* object, Property::Index index, const Pro else { map = value.GetMap(); - if(map) + if(DALI_LIKELY(map)) { - Property::Value* shaderValue = map->Find(Toolkit::Visual::Property::SHADER, CUSTOM_SHADER); - // set image only if property map contains image information other than custom shader - if(map->Count() > 1u || !shaderValue) + // the property map is emtpy map. Unregister visual. + if(DALI_UNLIKELY(map->Count() == 0u)) { - impl.SetImage(*map); + impl.ClearImageVisual(); } - // the property map contains only the custom shader - else if((map->Count() == 1u) && (shaderValue)) + else { - Property::Map* shaderMap = shaderValue->GetMap(); - if(shaderMap) + Property::Value* shaderValue = map->Find(Toolkit::Visual::Property::SHADER, CUSTOM_SHADER); + // set image only if property map contains image information other than custom shader + if(map->Count() > 1u || !shaderValue) { - impl.mShaderMap = *shaderMap; - - if(!impl.mUrl.empty()) - { - impl.SetImage(impl.mUrl, impl.mImageSize); - } - else if(!impl.mPropertyMap.Empty()) + impl.SetImage(*map); + } + // the property map contains only the custom shader + else if((map->Count() == 1u) && (shaderValue)) + { + Property::Map* shaderMap = shaderValue->GetMap(); + if(shaderMap) { - impl.SetImage(impl.mPropertyMap); + impl.mShaderMap = *shaderMap; + + if(!impl.mUrl.empty()) + { + impl.SetImage(impl.mUrl, impl.mImageSize); + } + else if(!impl.mPropertyMap.Empty()) + { + impl.SetImage(impl.mPropertyMap); + } } } } } + else + { + // invalid property value comes. Unregister visual. + impl.ClearImageVisual(); + } } break; }