/*
- * 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.
#include <dali-toolkit/devel-api/controls/control-devel.h>
#include <dali-toolkit/devel-api/focus-manager/keyinput-focus-manager.h>
#include <dali-toolkit/devel-api/visuals/color-visual-properties-devel.h>
+#include <dali-toolkit/devel-api/visuals/color-visual-actions-devel.h>
#include <dali-toolkit/internal/styling/style-manager-impl.h>
#include <dali-toolkit/internal/visuals/color/color-visual.h>
#include <dali-toolkit/internal/visuals/visual-string-constants.h>
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 );
}
}
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 );
RelayoutRequest();
}
-void Control::EnableGestureDetection(Gesture::Type type)
+void Control::EnableGestureDetection(GestureType::Value type)
{
- if ( (type & Gesture::Pinch) && !mImpl->mPinchGestureDetector )
+ if ( (type & GestureType::PINCH) && !mImpl->mPinchGestureDetector )
{
mImpl->mPinchGestureDetector = PinchGestureDetector::New();
mImpl->mPinchGestureDetector.DetectedSignal().Connect(mImpl, &Impl::PinchDetected);
mImpl->mPinchGestureDetector.Attach(Self());
}
- if ( (type & Gesture::Pan) && !mImpl->mPanGestureDetector )
+ if ( (type & GestureType::PAN) && !mImpl->mPanGestureDetector )
{
mImpl->mPanGestureDetector = PanGestureDetector::New();
mImpl->mPanGestureDetector.DetectedSignal().Connect(mImpl, &Impl::PanDetected);
mImpl->mPanGestureDetector.Attach(Self());
}
- if ( (type & Gesture::Tap) && !mImpl->mTapGestureDetector )
+ if ( (type & GestureType::TAP) && !mImpl->mTapGestureDetector )
{
mImpl->mTapGestureDetector = TapGestureDetector::New();
mImpl->mTapGestureDetector.DetectedSignal().Connect(mImpl, &Impl::TapDetected);
mImpl->mTapGestureDetector.Attach(Self());
}
- if ( (type & Gesture::LongPress) && !mImpl->mLongPressGestureDetector )
+ if ( (type & GestureType::LONG_PRESS) && !mImpl->mLongPressGestureDetector )
{
mImpl->mLongPressGestureDetector = LongPressGestureDetector::New();
mImpl->mLongPressGestureDetector.DetectedSignal().Connect(mImpl, &Impl::LongPressDetected);
}
}
-void Control::DisableGestureDetection(Gesture::Type type)
+void Control::DisableGestureDetection(GestureType::Value type)
{
- if ( (type & Gesture::Pinch) && mImpl->mPinchGestureDetector )
+ if ( (type & GestureType::PINCH) && mImpl->mPinchGestureDetector )
{
mImpl->mPinchGestureDetector.Detach(Self());
mImpl->mPinchGestureDetector.Reset();
}
- if ( (type & Gesture::Pan) && mImpl->mPanGestureDetector )
+ if ( (type & GestureType::PAN) && mImpl->mPanGestureDetector )
{
mImpl->mPanGestureDetector.Detach(Self());
mImpl->mPanGestureDetector.Reset();
}
- if ( (type & Gesture::Tap) && mImpl->mTapGestureDetector )
+ if ( (type & GestureType::TAP) && mImpl->mTapGestureDetector )
{
mImpl->mTapGestureDetector.Detach(Self());
mImpl->mTapGestureDetector.Reset();
}
- if ( (type & Gesture::LongPress) && mImpl->mLongPressGestureDetector)
+ if ( (type & GestureType::LONG_PRESS) && mImpl->mLongPressGestureDetector)
{
mImpl->mLongPressGestureDetector.Detach(Self());
mImpl->mLongPressGestureDetector.Reset();
void Control::SetKeyInputFocus()
{
- if( Self().OnStage() )
+ if( Self().GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) )
{
Toolkit::KeyInputFocusManager::Get().SetFocus(Toolkit::Control::DownCast(Self()));
}
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 )
void Control::ClearKeyInputFocus()
{
- if( Self().OnStage() )
+ if( Self().GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) )
{
Toolkit::KeyInputFocusManager::Get().RemoveFocus(Toolkit::Control::DownCast(Self()));
}
return false; // Accessibility pan gesture is not handled by default
}
-bool Control::OnAccessibilityTouch(const TouchEvent& touchEvent)
-{
- return false; // Accessibility touch event is not handled by default
-}
-
bool Control::OnAccessibilityValueChange(bool isIncrease)
{
return false; // Accessibility value change action is not handled by default
// Call deriving classes so initialised before styling is applied to them.
OnInitialize();
- if( (mImpl->mFlags & REQUIRES_STYLE_CHANGE_SIGNALS) ||
- !(mImpl->mFlags & DISABLE_STYLE_CHANGE_SIGNALS) )
+ if( !(mImpl->mFlags & DISABLE_STYLE_CHANGE_SIGNALS) )
{
Toolkit::StyleManager styleManager = StyleManager::Get();
{
}
-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
mImpl->mStartingPinchScale = new Vector3;
}
- if( pinch.state == Gesture::Started )
+ if( pinch.GetState() == GestureState::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.GetScale() );
}
void Control::OnPan( const PanGesture& pan )
}
}
-void Control::OnStageConnection( int depth )
+void Control::OnSceneConnection( int depth )
{
- DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::OnStageConnection number of registered visuals(%d)\n", mImpl->mVisuals.Size() );
+ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::OnSceneConnection number of registered visuals(%d)\n", mImpl->mVisuals.Size() );
Actor self( Self() );
// Check whether the visual is empty and enabled
if( (*iter)->visual && (*iter)->enabled )
{
- DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::OnStageConnection Setting visual(%d) on stage\n", (*iter)->index );
- Toolkit::GetImplementation((*iter)->visual).SetOnStage( self );
+ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::OnSceneConnection Setting visual(%d) on scene\n", (*iter)->index );
+ Toolkit::GetImplementation((*iter)->visual).SetOnScene( self );
}
}
// The clipping renderer is only created if required.
CreateClippingRenderer( *this );
- // Request to be laid out when the control is connected to the Stage.
+ // Request to be laid out when the control is connected to the Scene.
// Signal that a Relayout may be needed
}
-void Control::OnStageDisconnection()
+void Control::OnSceneDisconnection()
{
- mImpl->OnStageDisconnection();
+ mImpl->OnSceneDisconnection();
}
void Control::OnKeyInputFocusGained()
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() )
+ // Only do this if we are already on-stage as the OnSceneConnection will handle the off-stage clipping controls.
+ 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 );
// @todo size negotiate background to new size, animate as well?
}
-bool Control::OnTouchEvent(const TouchEvent& event)
-{
- return false; // Do not consume
-}
-
-bool Control::OnHoverEvent(const HoverEvent& event)
-{
- return false; // Do not consume
-}
-
bool Control::OnKeyEvent(const KeyEvent& event)
{
return false; // Do not consume
}
-bool Control::OnWheelEvent(const WheelEvent& event)
-{
- return false; // Do not consume
-}
-
void Control::OnRelayout( const Vector2& size, RelayoutContainer& container )
{
for( unsigned int i = 0, numChildren = Self().GetChildCount(); i < numChildren; ++i )
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 );
}
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 )
{