X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fimage-view%2Fimage-view-impl.cpp;h=556711ff483cca7fa233e3dad1147f7296512d48;hb=ec516c6d57ca74d1916a2160910699f34cd51f59;hp=091e3419cc6e6537ec95a7162f1b98a2a90fc38a;hpb=c052b6678e2c6d8a65545dbbe4531ea7057c1999;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 091e341..556711f 100644 --- a/dali-toolkit/internal/controls/image-view/image-view-impl.cpp +++ b/dali-toolkit/internal/controls/image-view/image-view-impl.cpp @@ -95,7 +95,7 @@ void ImageView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new Control::Impl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE)); + new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE)); }); //Enable highightability @@ -287,6 +287,84 @@ void ImageView::OnRelayout(const Vector2& size, RelayoutContainer& container) } } +void ImageView::OnCreateTransitions(Dali::Animation& animation, Dali::Toolkit::Control source, AlphaFunction alphaFunction, TimePeriod timePeriod) +{ + Dali::Toolkit::ImageView destinationHandle = Toolkit::ImageView(GetOwner()); + Toolkit::Visual::Base destinationVisual = DevelControl::GetVisual(GetImplementation(destinationHandle), Toolkit::ImageView::Property::IMAGE); + Property::Map destinationMap; + + if(!destinationVisual) + { + return; + } + + destinationVisual.CreatePropertyMap(destinationMap); + + static auto findValue = [](const Property::Map& map, Property::Index index) -> Vector4 { + Property::Value* propertyValue = map.Find(index); + if(propertyValue) + { + return propertyValue->Get(); + } + return Vector4{}; + }; + + Vector4 sourceMixColor(0.0f, 0.0f, 0.0f, 0.0f); + Vector4 sourceCornerRadius(0.0f, 0.0f, 0.0f, 0.0f); + Vector4 destinationMixColor = findValue(destinationMap, Dali::Toolkit::Visual::Property::MIX_COLOR); + Vector4 destinationCornerRadius = findValue(destinationMap, Toolkit::DevelVisual::Property::CORNER_RADIUS); + + Dali::Toolkit::ImageView sourceHandle = Dali::Toolkit::ImageView::DownCast(source); + Toolkit::Visual::Base sourceVisual; + Property::Map sourceMap; + + if(sourceHandle) + { + sourceVisual = DevelControl::GetVisual(GetImplementation(sourceHandle), Toolkit::ImageView::Property::IMAGE); + } + + if(sourceVisual) + { + sourceVisual.CreatePropertyMap(sourceMap); + sourceMixColor = findValue(sourceMap, Dali::Toolkit::Visual::Property::MIX_COLOR); + sourceCornerRadius = findValue(sourceMap, Toolkit::DevelVisual::Property::CORNER_RADIUS); + } + + std::vector properties; + std::vector> values; + + if(Vector3(sourceMixColor) != Vector3(destinationMixColor)) + { + properties.push_back(DevelControl::GetVisualProperty(destinationHandle, Toolkit::ImageView::Property::IMAGE, Toolkit::Visual::Property::MIX_COLOR)); + values.push_back(std::make_pair(Vector3(sourceMixColor), Vector3(destinationMixColor))); + } + if(std::abs(sourceMixColor.a - destinationMixColor.a) > Math::MACHINE_EPSILON_1) + { + properties.push_back(DevelControl::GetVisualProperty(destinationHandle, Toolkit::ImageView::Property::IMAGE, Toolkit::Visual::Property::OPACITY)); + values.push_back(std::make_pair(sourceMixColor.a, destinationMixColor.a)); + } + if(sourceCornerRadius != destinationCornerRadius) + { + properties.push_back(DevelControl::GetVisualProperty(destinationHandle, Toolkit::ImageView::Property::IMAGE, Toolkit::DevelVisual::Property::CORNER_RADIUS)); + values.push_back(std::make_pair(sourceCornerRadius, destinationCornerRadius)); + } + + for(uint32_t i = 0; i < properties.size(); ++i) + { + if(timePeriod.delaySeconds > 0.0f) + { + Dali::KeyFrames initialKeyframes = Dali::KeyFrames::New(); + initialKeyframes.Add(0.0f, values[i].first); + initialKeyframes.Add(1.0f, values[i].first); + animation.AnimateBetween(properties[i], initialKeyframes, TimePeriod(timePeriod.delaySeconds)); + } + Dali::KeyFrames keyframes = Dali::KeyFrames::New(); + keyframes.Add(0.0f, values[i].first); + keyframes.Add(1.0f, values[i].second); + animation.AnimateBetween(properties[i], keyframes, alphaFunction, timePeriod); + } +} + void ImageView::OnResourceReady(Toolkit::Control control) { // Visual ready so update visual attached to this ImageView, following call to RelayoutRequest will use this visual.