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=9fa9291bc2f39e574f79faf19e67bf4a97ba1307;hp=d3f43622f7cf8a556f8712fa19a9b084da2f508e;hb=6c664b09beef66ee4e223cf30fb17ecdd6889bf7;hpb=d0b03f52573948c53cdca89ec5e3be201737c3bb diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index d3f4362..9fa9291 100644 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -22,6 +22,7 @@ #include // for strcmp #include #include +#include #include #include #include @@ -29,6 +30,7 @@ #include #include #include +#include #include #include @@ -38,7 +40,7 @@ #include #include #include -#include +#include #include #include #include @@ -56,7 +58,7 @@ namespace { #if defined(DEBUG_ENABLED) -Debug::Filter* gLogFilter = Debug::Filter::New( Debug::General, false, "LOG_CONTROL_VISUALS"); +Debug::Filter* gLogFilter = Debug::Filter::New( Debug::NoLogging, false, "LOG_CONTROL_VISUALS"); #endif /** @@ -116,7 +118,7 @@ HandleIndex GetVisualProperty( { #if defined(DEBUG_ENABLED) std::ostringstream oss; - oss << "Control::GetHandleIndex(" << visualName << ", " << propertyKey << ")" << std::endl; + oss << "Control::GetVisualProperty(" << visualName << ", " << propertyKey << ")" << std::endl; DALI_LOG_INFO( gLogFilter, Debug::General, oss.str().c_str() ); #endif @@ -124,44 +126,25 @@ HandleIndex GetVisualProperty( RegisteredVisualContainer::Iterator iter; for ( iter = visuals.Begin(); iter != visuals.End(); iter++ ) { - if ( (*iter)->visual.GetName() == visualName ) + Toolkit::Visual::Base visual = (*iter)->visual; + if( visual && visual.GetName() == visualName ) { - break; - } - } - - // Does it's renderer have an associated property? - if( iter != visuals.End() ) - { - Actor self = controlImpl.Self(); - Property::Index index = self.GetPropertyIndex( propertyKey ); - if( index != Property::INVALID_INDEX ) - { - // It's an actor property: - return HandleIndex( self, index ); - } - else - { - // Check if it is a renderer property: - if( self.GetRendererCount() > 0 ) + Internal::Visual::Base& visualImpl = GetImplementation(visual); + Renderer renderer = visualImpl.GetRenderer(); + if( renderer ) { - // @todo Need to use correct renderer index - Renderer renderer = self.GetRendererAt(0); - Property::Index index = renderer.GetPropertyIndex( propertyKey ); + Property::Index index = DevelHandle::GetPropertyIndex( renderer, propertyKey ); if( index != Property::INVALID_INDEX ) { - // It's a renderer property: return HandleIndex( renderer, index ); } } - else - { - std::ostringstream oss; - oss << propertyKey; - DALI_LOG_WARNING( "Control::GetHandleIndex(%s, %s) No renderers\n", visualName.c_str(), oss.str().c_str() ); - } } } + + std::ostringstream noRenderers; + noRenderers << propertyKey; + DALI_LOG_WARNING( "Control::GetVisualProperty(%s, %s) No renderers\n", visualName.c_str(), noRenderers.str().c_str() ); Handle handle; return HandleIndex( handle, Property::INVALID_INDEX ); } @@ -170,11 +153,11 @@ 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 ); + .Add( Toolkit::DevelVisual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f) ) + .Add( Toolkit::DevelVisual::Transform::Property::SIZE, Vector2(1.0f, 1.0f) ) + .Add( Toolkit::DevelVisual::Transform::Property::ORIGIN, Toolkit::Align::CENTER ) + .Add( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT, Toolkit::Align::CENTER ) + .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_SIZE_MODE, Vector4::ZERO ); } /** @@ -406,11 +389,22 @@ public: case Toolkit::Control::Property::BACKGROUND: { + std::string url; const Property::Map* map = value.GetMap(); if( map && !map->Empty() ) { controlImpl.SetBackground( *map ); } + else if( value.Get( url ) ) + { + // don't know the size to load + Toolkit::Visual::Base visual = Toolkit::VisualFactory::Get().CreateVisual( url, ImageDimensions() ); + if( visual ) + { + controlImpl.RegisterVisual( Toolkit::Control::Property::BACKGROUND, visual ); + visual.SetDepthIndex( DepthIndex::BACKGROUND ); + } + } else { // The background is an empty property map, so we should clear the background @@ -542,11 +536,6 @@ Toolkit::Control Control::New() return handle; } -Control::~Control() -{ - delete mImpl; -} - void Control::SetStyleName( const std::string& styleName ) { if( styleName != mImpl->mStyleName ) @@ -571,7 +560,7 @@ void Control::SetBackgroundColor( const Vector4& color ) { mImpl->mBackgroundColor = color; Property::Map map; - map[ Toolkit::VisualProperty::TYPE ] = Toolkit::Visual::COLOR; + map[ Toolkit::DevelVisual::Property::TYPE ] = Toolkit::Visual::COLOR; map[ Toolkit::ColorVisual::Property::MIX_COLOR ] = color; SetBackground( map ); @@ -589,12 +578,14 @@ void Control::SetBackground( const Property::Map& map ) { RegisterVisual( Toolkit::Control::Property::BACKGROUND, visual ); visual.SetDepthIndex( DepthIndex::BACKGROUND ); + + // Trigger a size negotiation request that may be needed by the new visual to relayout its contents. + RelayoutRequest(); } } void Control::SetBackgroundImage( Image image ) { - 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 ) { @@ -607,6 +598,9 @@ void Control::ClearBackground() { UnregisterVisual( Toolkit::Control::Property::BACKGROUND ); mImpl->mBackgroundColor = Color::TRANSPARENT; + + // Trigger a size negotiation request that may be needed when unregistering a visual. + RelayoutRequest(); } void Control::EnableGestureDetection(Gesture::Type type) @@ -773,6 +767,27 @@ void Control::RegisterVisual( Property::Index index, Toolkit::Visual::Base& visu } } + // If not set, set the name of the visual to the same name as the control's property. + // ( If the control has been type registered ) + if( visual.GetName().empty() ) + { + // Check if the control has been type registered: + TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( typeid(*this) ); + if( typeInfo ) + { + // Check if the property index has been registered: + Property::IndexContainer indices; + typeInfo.GetPropertyIndices( indices ); + Property::IndexContainer::Iterator iter = std::find( indices.Begin(), indices.End(), index ); + if( iter != indices.End() ) + { + // If it has, then get it's name and use that for the visual + std::string visualName = typeInfo.GetPropertyName( index ); + visual.SetName( visualName ); + } + } + } + if( !visualReplaced ) // New registration entry { mImpl->mVisuals.PushBack( new RegisteredVisual( index, visual, enabled ) ); @@ -782,6 +797,8 @@ void Control::RegisterVisual( Property::Index index, Toolkit::Visual::Base& visu { Toolkit::GetImplementation(visual).SetOnStage( self ); } + DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::RegisterVisual number of registered visuals(%d)\n", mImpl->mVisuals.Size() ); + } void Control::UnregisterVisual( Property::Index index ) @@ -865,7 +882,7 @@ Dali::Animation Control::CreateTransition( const Toolkit::TransitionData& handle Actor child = Self().FindChildByName( animator->objectName ); if( child ) { - Property::Index propertyIndex = child.GetPropertyIndex( animator->propertyKey ); + Property::Index propertyIndex = DevelHandle::GetPropertyIndex( child, animator->propertyKey ); handleIndex = HandleIndex( child, propertyIndex ); } else @@ -994,6 +1011,11 @@ Control::Control( ControlBehaviour behaviourFlags ) mImpl->mFlags = behaviourFlags; } +Control::~Control() +{ + delete mImpl; +} + void Control::Initialize() { // Call deriving classes so initialised before styling is applied to them. @@ -1029,10 +1051,12 @@ void Control::OnInitialize() void Control::OnControlChildAdd( Actor& child ) { + DALI_LOG_WARNING_NOFN("DEPRECATION WARNING: OnControlChildAdd() is deprecated and will be removed from next release. Override OnChildAdd instead.\n" ); } void Control::OnControlChildRemove( Actor& child ) { + DALI_LOG_WARNING_NOFN("DEPRECATION WARNING: OnControlChildRemove() is deprecated and will be removed from next release. Override OnChildRemove instead.\n" ); } void Control::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change )