X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Fpublic-api%2Fcontrols%2Fcontrol-impl.cpp;h=3afa39786d0aeca3b53a6f34d6141259f3388772;hp=46f24d8adc5f48407d6156473a332b4fa31b63ff;hb=129430611d13fed94f333b0429af19cc61001eb1;hpb=17e1f86d22f7a00ef923eef5cce0fc904193b63c diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index 46f24d8..3afa397 100755 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 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. @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -71,17 +72,14 @@ void ChangeBackgroundColorVisual( Control& controlImpl, bool renderIfTransparent Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get( controlImpl ); Toolkit::Visual::Base backgroundVisual = controlDataImpl.GetVisual( Toolkit::Control::Property::BACKGROUND ); - if( backgroundVisual ) + if( backgroundVisual && backgroundVisual.GetType() == Toolkit::Visual::COLOR ) { Property::Map map; backgroundVisual.CreatePropertyMap( map ); - Property::Value* typeValue = map.Find( Toolkit::Visual::Property::TYPE ); - if( typeValue && typeValue->Get< int >() == Toolkit::Visual::COLOR ) - { - // Only change it if it's a color visual - map[ Toolkit::DevelColorVisual::Property::RENDER_IF_TRANSPARENT ] = renderIfTransparent; - controlImpl.SetBackground( map ); - } + + // Only change it if it's a color visual + map[ Toolkit::DevelColorVisual::Property::RENDER_IF_TRANSPARENT ] = renderIfTransparent; + controlImpl.SetBackground( map ); } } @@ -170,16 +168,39 @@ const std::string& Control::GetStyleName() const void Control::SetBackgroundColor( const Vector4& color ) { mImpl->mBackgroundColor = color; + Property::Map map; map[ Toolkit::Visual::Property::TYPE ] = Toolkit::Visual::COLOR; map[ Toolkit::ColorVisual::Property::MIX_COLOR ] = color; + bool renderIfTransparent = false; int clippingMode = ClippingMode::DISABLED; if( ( Self().GetProperty( Actor::Property::CLIPPING_MODE ).Get( clippingMode ) ) && ( clippingMode == ClippingMode::CLIP_CHILDREN ) ) { // If clipping-mode is set to CLIP_CHILDREN, then force visual to add the render even if transparent map[ Toolkit::DevelColorVisual::Property::RENDER_IF_TRANSPARENT ] = true; + renderIfTransparent = true; + } + + Toolkit::Visual::Base visual = mImpl->GetVisual( Toolkit::Control::Property::BACKGROUND ); + if( visual && visual.GetType() == Toolkit::Visual::COLOR ) + { + Property::Map visualMap; + visual.CreatePropertyMap( visualMap ); + + Property::Value* renderValue = visualMap.Find( Toolkit::DevelColorVisual::Property::RENDER_IF_TRANSPARENT ); + Property::Value* colorValue = visualMap.Find( Toolkit::ColorVisual::Property::MIX_COLOR ); + if( renderValue && colorValue ) + { + if( ( renderValue->Get< bool >() == true || colorValue->Get< Vector4 >().a > 0.0f ) + && ( renderIfTransparent || color.a > 0.0f ) ) + { + // Update background color only + mImpl->DoAction( Toolkit::Control::Property::BACKGROUND, DevelColorVisual::Action::UPDATE_PROPERTY, map ); + return; + } + } } SetBackground( map ); @@ -207,28 +228,6 @@ void Control::ClearBackground() RelayoutRequest(); } -void Control::SetShadow( const Property::Map& map ) -{ - Toolkit::Visual::Base visual = Toolkit::VisualFactory::Get().CreateVisual( map ); - visual.SetName("shadow"); - - if( visual ) - { - mImpl->RegisterVisual( Toolkit::DevelControl::Property::SHADOW, visual, DepthIndex::BACKGROUND_EFFECT ); - - RelayoutRequest(); - } -} - -void Control::ClearShadow() -{ - mImpl->UnregisterVisual( Toolkit::DevelControl::Property::SHADOW ); - - // Trigger a size negotiation request that may be needed when unregistering a visual. - RelayoutRequest(); -} - - void Control::EnableGestureDetection(Gesture::Type type) { if ( (type & Gesture::Pinch) && !mImpl->mPinchGestureDetector ) @@ -319,7 +318,7 @@ bool Control::IsKeyboardNavigationSupported() void Control::SetKeyInputFocus() { - if( Self().OnStage() ) + if( Self().GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) ) { Toolkit::KeyInputFocusManager::Get().SetFocus(Toolkit::Control::DownCast(Self())); } @@ -328,7 +327,7 @@ void Control::SetKeyInputFocus() bool Control::HasKeyInputFocus() { bool result = false; - if( Self().OnStage() ) + if( Self().GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) ) { Toolkit::Control control = Toolkit::KeyInputFocusManager::Get().GetCurrentFocusControl(); if( Self() == control ) @@ -341,7 +340,7 @@ bool Control::HasKeyInputFocus() void Control::ClearKeyInputFocus() { - if( Self().OnStage() ) + if( Self().GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) ) { Toolkit::KeyInputFocusManager::Get().RemoveFocus(Toolkit::Control::DownCast(Self())); } @@ -495,14 +494,6 @@ void Control::OnInitialize() { } -void Control::OnControlChildAdd( Actor& child ) -{ -} - -void Control::OnControlChildRemove( Actor& child ) -{ -} - void Control::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change ) { // By default the control is only interested in theme (not font) changes @@ -523,10 +514,10 @@ void Control::OnPinch(const PinchGesture& pinch) if( pinch.state == Gesture::Started ) { - *( mImpl->mStartingPinchScale ) = Self().GetCurrentScale(); + *( mImpl->mStartingPinchScale ) = Self().GetCurrentProperty< Vector3 >( Actor::Property::SCALE ); } - Self().SetScale( *( mImpl->mStartingPinchScale ) * pinch.scale ); + Self().SetProperty( Actor::Property::SCALE, *( mImpl->mStartingPinchScale ) * pinch.scale ); } void Control::OnPan( const PanGesture& pan ) @@ -604,21 +595,17 @@ void Control::OnKeyInputFocusLost() void Control::OnChildAdd(Actor& child) { - // Notify derived classes. - OnControlChildAdd( child ); } void Control::OnChildRemove(Actor& child) { - // Notify derived classes. - OnControlChildRemove( child ); } void Control::OnPropertySet( Property::Index index, Property::Value propertyValue ) { // If the clipping mode has been set, we may need to create a renderer. // Only do this if we are already on-stage as the OnStageConnection will handle the off-stage clipping controls. - if( ( index == Actor::Property::CLIPPING_MODE ) && Self().OnStage() ) + if( ( index == Actor::Property::CLIPPING_MODE ) && Self().GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) ) { // Note: This method will handle whether creation of the renderer is required. CreateClippingRenderer( *this ); @@ -690,7 +677,7 @@ void Control::OnRelayout( const Vector2& size, RelayoutContainer& container ) childOffset.x += ( mImpl->mMargin.start + padding.start ); childOffset.y += ( mImpl->mMargin.top + padding.top ); - child.SetPosition( childOffset.x, childOffset.y ); + child.SetProperty( Actor::Property::POSITION, Vector2( childOffset.x, childOffset.y ) ); } container.Add( child, newChildSize ); } @@ -708,7 +695,7 @@ void Control::OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dime Vector3 Control::GetNaturalSize() { - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::GetNaturalSize for %s\n", Self().GetName().c_str() ); + DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::GetNaturalSize for %s\n", Self().GetProperty< std::string >( Dali::Actor::Property::NAME ).c_str() ); Toolkit::Visual::Base visual = mImpl->GetVisual( Toolkit::Control::Property::BACKGROUND ); if( visual ) {