#include <dali-toolkit/internal/styling/style-manager-impl.h>
#include <dali-toolkit/internal/visuals/color/color-visual.h>
#include <dali-toolkit/internal/visuals/transition-data-impl.h>
+#include <dali-toolkit/devel-api/align-enums.h>
namespace Dali
{
return HandleIndex( handle, Property::INVALID_INDEX );
}
+void SetDefaultTransform( Property::Map& propertyMap )
+{
+ propertyMap.Clear();
+ propertyMap
+ .Add( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET, Vector2(0.0f, 0.0f) )
+ .Add( Toolkit::Visual::DevelProperty::Transform::Property::SIZE, Vector2(1.0f, 1.0f) )
+ .Add( Toolkit::Visual::DevelProperty::Transform::Property::ORIGIN, Toolkit::Align::CENTER )
+ .Add( Toolkit::Visual::DevelProperty::Transform::Property::ANCHOR_POINT, Toolkit::Align::CENTER )
+ .Add( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE, Vector4::ZERO );
+}
/**
* Creates control through type registry
Impl(Control& controlImpl)
: mControlImpl( controlImpl ),
mStyleName(""),
- mBackgroundVisual(),
mBackgroundColor(Color::TRANSPARENT),
mStartingPinchScale( NULL ),
mKeyEventSignal(),
}
else
{
- // An empty map means the background is no longer required
+ // An empty image means the background is no longer required
controlImpl.ClearBackground();
}
break;
case Toolkit::Control::Property::BACKGROUND:
{
const Property::Map* map = value.GetMap();
- if( map )
+ if( map && !map->Empty() )
{
controlImpl.SetBackground( *map );
}
else
{
- // The background is not a property map, so we should clear the background
+ // The background is an empty property map, so we should clear the background
controlImpl.ClearBackground();
}
break;
{
DALI_LOG_WARNING( "BACKGROUND_IMAGE property is deprecated. Use BACKGROUND property instead\n" );
Property::Map map;
- if( controlImpl.mImpl->mBackgroundVisual )
+ Toolkit::Visual::Base visual = controlImpl.GetVisual( Toolkit::Control::Property::BACKGROUND );
+ if( visual )
{
- controlImpl.mImpl->mBackgroundVisual.CreatePropertyMap( map );
+ visual.CreatePropertyMap( map );
}
value = map;
break;
case Toolkit::Control::Property::BACKGROUND:
{
Property::Map map;
- if( controlImpl.mImpl->mBackgroundVisual )
+ Toolkit::Visual::Base visual = controlImpl.GetVisual( Toolkit::Control::Property::BACKGROUND );
+ if( visual )
{
- (controlImpl.mImpl->mBackgroundVisual).CreatePropertyMap( map );
+ visual.CreatePropertyMap( map );
}
value = map;
Control& mControlImpl;
RegisteredVisualContainer mVisuals; // Stores visuals needed by the control, non trivial type so std::vector used.
std::string mStyleName;
- Toolkit::Visual::Base mBackgroundVisual; ///< The visual to render the background
Vector4 mBackgroundColor; ///< The color of the background visual
Vector3* mStartingPinchScale; ///< The scale when a pinch gesture starts, TODO: consider removing this
Toolkit::Control::KeyEventSignalType mKeyEventSignal;
Property::Map map;
map[ Toolkit::VisualProperty::TYPE ] = Toolkit::Visual::COLOR;
map[ Toolkit::ColorVisual::Property::MIX_COLOR ] = color;
- mImpl->mBackgroundVisual = Toolkit::VisualFactory::Get().CreateVisual( map );
- RegisterVisual( Toolkit::Control::Property::BACKGROUND, mImpl->mBackgroundVisual );
- if( mImpl->mBackgroundVisual )
- {
- mImpl->mBackgroundVisual.SetDepthIndex( DepthIndex::BACKGROUND );
- }
+
+ SetBackground( map );
}
Vector4 Control::GetBackgroundColor() const
void Control::SetBackground( const Property::Map& map )
{
- mImpl->mBackgroundVisual = Toolkit::VisualFactory::Get().CreateVisual( map );
- RegisterVisual( Toolkit::Control::Property::BACKGROUND, mImpl->mBackgroundVisual );
- if( mImpl->mBackgroundVisual )
+ Toolkit::Visual::Base visual = Toolkit::VisualFactory::Get().CreateVisual( map );
+ if( visual )
{
- mImpl->mBackgroundVisual.SetDepthIndex( DepthIndex::BACKGROUND );
+ RegisterVisual( Toolkit::Control::Property::BACKGROUND, visual );
+ visual.SetDepthIndex( DepthIndex::BACKGROUND );
}
}
void Control::SetBackgroundImage( Image image )
{
- mImpl->mBackgroundVisual = Toolkit::VisualFactory::Get().CreateVisual( image );
- RegisterVisual( Toolkit::Control::Property::BACKGROUND, mImpl->mBackgroundVisual );
- if( mImpl->mBackgroundVisual )
+ DALI_LOG_WARNING( "SetBackgroundImage is for the depreciated Property::BACKGROUND_IMAGE use SetBackground( const Property::Map& map )\n" );
+ Toolkit::Visual::Base visual = Toolkit::VisualFactory::Get().CreateVisual( image );
+ if( visual )
{
- mImpl->mBackgroundVisual.SetDepthIndex( DepthIndex::BACKGROUND );
+ RegisterVisual( Toolkit::Control::Property::BACKGROUND, visual );
+ visual.SetDepthIndex( DepthIndex::BACKGROUND );
}
}
void Control::ClearBackground()
{
- Actor self( Self() );
- mImpl->mBackgroundVisual.RemoveAndReset( self );
- mImpl->mBackgroundColor = Color::TRANSPARENT;
+ UnregisterVisual( Toolkit::Control::Property::BACKGROUND );
+ mImpl->mBackgroundColor = Color::TRANSPARENT;
}
void Control::EnableGestureDetection(Gesture::Type type)
bool visualReplaced ( false );
Actor self = Self();
- if ( !mImpl->mVisuals.Empty() )
+ if( !mImpl->mVisuals.Empty() )
{
- RegisteredVisualContainer::Iterator iter;
- // Check if visual (index) is already registered. Replace if so.
- if ( FindVisual( index, mImpl->mVisuals, iter ) )
+ RegisteredVisualContainer::Iterator iter;
+ // Check if visual (index) is already registered. Replace if so.
+ if ( FindVisual( index, mImpl->mVisuals, iter ) )
+ {
+ if( (*iter)->visual && self.OnStage() )
{
- if( (*iter)->visual && self.OnStage() )
- {
- (*iter)->visual.SetOffStage( self );
- }
- (*iter)->visual = visual;
- visualReplaced = true;
+ Toolkit::GetImplementation((*iter)->visual).SetOffStage( self );
}
+ (*iter)->visual = visual;
+ visualReplaced = true;
+ }
}
- if ( !visualReplaced ) // New registration entry
+ if( !visualReplaced ) // New registration entry
{
mImpl->mVisuals.PushBack( new RegisteredVisual( index, visual, enabled ) );
}
if( visual && self.OnStage() && enabled )
{
- visual.SetOnStage( self );
+ Toolkit::GetImplementation(visual).SetOnStage( self );
}
}
RegisteredVisualContainer::Iterator iter;
if ( FindVisual( index, mImpl->mVisuals, iter ) )
{
+ Actor self( Self() );
+ Toolkit::GetImplementation((*iter)->visual).SetOffStage( self );
+ (*iter)->visual.Reset();
mImpl->mVisuals.Erase( iter );
}
}
{
if ( (*iter)->enabled == enable )
{
+ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::EnableVisual Visual Already enabled set (%s) \n", enable?"enabled":"disabled");
return;
}
{
if ( enable )
{
-
- (*iter)->visual.SetOnStage( parentActor );
+ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::EnableVisual Setting Visual(%d) on stage \n", index );
+ Toolkit::GetImplementation((*iter)->visual).SetOnStage( parentActor );
}
else
{
- (*iter)->visual.SetOffStage( parentActor ); // No need to call if control not staged.
+ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::EnableVisual Setting Visual(%d) off stage \n", index );
+ Toolkit::GetImplementation((*iter)->visual).SetOffStage( parentActor ); // No need to call if control not staged.
}
}
}
void Control::OnStageConnection( int depth )
{
+ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::OnStageConnection number of registered visuals(%d)\n", mImpl->mVisuals.Size() );
+
for(RegisteredVisualContainer::Iterator iter = mImpl->mVisuals.Begin(); iter!= mImpl->mVisuals.End(); iter++)
{
// 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 );
Actor self( Self() );
- (*iter)->visual.SetOnStage( self );
+ Toolkit::GetImplementation((*iter)->visual).SetOnStage( self );
}
}
}
// Check whether the visual is empty
if( (*iter)->visual )
{
+ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::OnStageDisconnection Setting visual(%d) off stage\n", (*iter)->index );
Actor self( Self() );
- (*iter)->visual.SetOffStage( self );
+ Toolkit::GetImplementation((*iter)->visual).SetOffStage( self );
}
}
}
void Control::OnSizeSet(const Vector3& targetSize)
{
- if( mImpl->mBackgroundVisual )
+ Toolkit::Visual::Base visual = GetVisual( Toolkit::Control::Property::BACKGROUND );
+ if( visual )
{
Vector2 size( targetSize );
- mImpl->mBackgroundVisual.SetSize( size );
+ Property::Map transformMap;
+ SetDefaultTransform( transformMap );
+ visual.SetTransformAndSize( transformMap, size );
}
}
{
container.Add( Self().GetChildAt( i ), size );
}
+
+ Toolkit::Visual::Base visual = GetVisual( Toolkit::Control::Property::BACKGROUND );
+ if( visual )
+ {
+ Vector2 controlSize( size );
+ Property::Map transformMap;
+ SetDefaultTransform( transformMap );
+ visual.SetTransformAndSize( transformMap, controlSize );
+ }
}
void Control::OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension )
Vector3 Control::GetNaturalSize()
{
- if( mImpl->mBackgroundVisual )
+ Toolkit::Visual::Base visual = GetVisual( Toolkit::Control::Property::BACKGROUND );
+ if( visual )
{
Vector2 naturalSize;
- mImpl->mBackgroundVisual.GetNaturalSize(naturalSize);
- return Vector3(naturalSize);
+ visual.GetNaturalSize( naturalSize );
+ return Vector3( naturalSize );
}
return Vector3::ZERO;
}