/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 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 <typeinfo>
#include <dali/public-api/animation/constraint.h>
#include <dali/public-api/object/type-registry-helper.h>
+#include <dali/public-api/object/type-info.h>
#include <dali/public-api/size-negotiation/relayout-container.h>
+#include <dali/public-api/common/stage.h>
#include <dali/devel-api/scripting/scripting.h>
#include <dali/integration-api/debug.h>
+#include <dali/devel-api/actors/actor-devel.h>
// INTERNAL INCLUDES
#include <dali-toolkit/public-api/align-enumerations.h>
#include <dali-toolkit/internal/visuals/color/color-visual.h>
#include <dali-toolkit/internal/visuals/visual-string-constants.h>
#include <dali-toolkit/internal/controls/control/control-data-impl.h>
+#include <dali/devel-api/actors/actor-devel.h>
+#include <dali-toolkit/public-api/controls/image-view/image-view.h>
+
+#include <dali/devel-api/actors/actor-devel.h>
+#include <dali-toolkit/dali-toolkit.h>
+#include <dali/devel-api/actors/actor-devel.h>
namespace Dali
{
}
}
-/**
- * @brief Sets Control::Property::BACKGROUND visual
- * @param[in] controlImpl The control implementation
- * @param[in] visual The control background visual
- * @param[in] size The current size
- */
-void SetBackgroundVisual( Control::Impl& controlImpl, Toolkit::Visual::Base& visual, const Vector2& size )
-{
- Property::Map transformMap = Property::Map();
-
- Vector2 newSize( 0.f, 0.f );
- newSize.width = size.width + ( controlImpl.mPadding.start + controlImpl.mPadding.end );
- newSize.height = size.height + ( controlImpl.mPadding.top + controlImpl.mPadding.bottom );
-
- if( ( controlImpl.mMargin.start != 0 ) ||
- ( controlImpl.mMargin.end != 0 ) ||
- ( controlImpl.mMargin.top != 0 ) ||
- ( controlImpl.mMargin.bottom != 0 ) )
- {
- transformMap.Add( Toolkit::Visual::Transform::Property::SIZE, newSize )
- .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) )
- .Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2( controlImpl.mMargin.start, controlImpl.mMargin.top ) )
- .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) )
- .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN )
- .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN );
- }
- else if( ( controlImpl.mPadding.start != 0 ) ||
- ( controlImpl.mPadding.end != 0 ) ||
- ( controlImpl.mPadding.top != 0 ) ||
- ( controlImpl.mPadding.bottom != 0 ) )
- {
- transformMap.Add( Toolkit::Visual::Transform::Property::SIZE, newSize )
- .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) )
- .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN )
- .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN );
- }
-
- visual.SetTransformAndSize( transformMap, newSize ); // Send an empty map as we do not want to modify the visual's set transform
-}
-
} // unnamed namespace
SetBackground( map );
}
-Vector4 Control::GetBackgroundColor() const
-{
- return mImpl->mBackgroundColor;
-}
-
void Control::SetBackground( const Property::Map& map )
{
Toolkit::Visual::Base visual = Toolkit::VisualFactory::Get().CreateVisual( map );
}
}
-void Control::SetBackgroundImage( Image image )
-{
- Toolkit::Visual::Base visual = Toolkit::VisualFactory::Get().CreateVisual( image );
- if( visual )
- {
- mImpl->RegisterVisual( Toolkit::Control::Property::BACKGROUND, visual, DepthIndex::BACKGROUND );
- }
-}
-
void Control::ClearBackground()
{
mImpl->UnregisterVisual( Toolkit::Control::Property::BACKGROUND );
bool Control::OnAccessibilityActivated()
{
- return false; // Accessibility activation is not handled by default
+ if( Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor( Self() ) )
+ {
+ return OnKeyboardEnter();
+ }
+ return false;
}
bool Control::OnKeyboardEnter()
bool consumed = false;
+ consumed = mImpl->FilterKeyEvent( event );
+
// signals are allocated dynamically when someone connects
- if ( !mImpl->mKeyEventSignal.Empty() )
+ if ( !consumed && !mImpl->mKeyEventSignal.Empty() )
{
consumed = mImpl->mKeyEventSignal.Emit( handle, event );
}
- if (!consumed)
+ if ( !consumed )
{
// Notification for derived classes
consumed = OnKeyEvent(event);
{
SetKeyboardNavigationSupport( true );
}
+
+ Dali::TypeInfo type;
+ Self().GetTypeInfo( type );
+ if (type)
+ {
+ auto typeName = type.GetName();
+ DevelControl::AppendAccessibilityAttribute( Self(), "t", typeName );
+ }
+
+ if (Accessibility::IsUp())
+ mImpl->AccessibilityRegister();
}
void Control::OnInitialize()
{
Dali::Toolkit::Control handle( GetOwner() );
+ if( Accessibility::IsUp() )
+ {
+ auto self = mImpl->GetAccessibilityObject( Self() );
+ self->EmitFocused( focusGained );
+ auto parent = self->GetParent();
+ if( parent && !self->GetStates()[Dali::Accessibility::State::MANAGES_DESCENDANTS] )
+ {
+ parent->EmitActiveDescendantChanged( parent, self );
+ }
+ }
+
if ( focusGained )
{
// signals are allocated dynamically when someone connects
// The clipping renderer is only created if required.
CreateClippingRenderer( *this );
+
+ // Request to be laid out when the control is connected to the Stage.
+ if( Accessibility::IsUp() )
+ {
+ mImpl->AccessibilityRegister();
+ }
}
+
void Control::OnStageDisconnection()
{
+ if( Accessibility::IsUp() )
+ {
+ mImpl->AccessibilityDeregister();
+ }
mImpl->OnStageDisconnection();
}
{
// 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() )
+ switch( index )
{
- // Note: This method will handle whether creation of the renderer is required.
- CreateClippingRenderer( *this );
+ case Actor::Property::CLIPPING_MODE:
+ {
+ if( Self().OnStage() )
+ {
+ // Note: This method will handle whether creation of the renderer is required.
+ CreateClippingRenderer( *this );
+ }
+ break;
+ }
+ case Actor::Property::VISIBLE:
+ {
+ if( Dali::Accessibility::IsUp() )
+ {
+ Dali::Accessibility::Accessible::Get(Self())->EmitVisible( Self().GetProperty( Actor::Property::VISIBLE ).Get<bool>() );
+ }
+ break;
+ }
+ case Toolkit::DevelControl::Property::ACCESSIBILITY_NAME:
+ {
+ if( Dali::Accessibility::IsUp() )
+ {
+ Dali::Accessibility::Accessible::Get(Self())->Emit( Dali::Accessibility::ObjectPropertyChangeEvent::NAME );
+ }
+ break;
+ }
+ case Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE:
+ {
+ if( Dali::Accessibility::IsUp() )
+ {
+ Dali::Accessibility::Accessible::Get(Self())->Emit( Dali::Accessibility::ObjectPropertyChangeEvent::ROLE );
+ }
+ break;
+ }
+ case Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTON:
+ {
+ if( Dali::Accessibility::IsUp() )
+ {
+ Dali::Accessibility::Accessible::Get(Self())->Emit( Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION );
+ }
+ break;
+ }
}
}
if( visual )
{
Vector2 size( targetSize );
- SetBackgroundVisual( *mImpl, visual, size );
-
+ visual.SetTransformAndSize( Property::Map(), size ); // Send an empty map as we do not want to modify the visual's set transform
}
}
child.SetPosition( childOffset.x, childOffset.y );
}
-
container.Add( child, newChildSize );
}
Toolkit::Visual::Base visual = mImpl->GetVisual( Toolkit::Control::Property::BACKGROUND );
if( visual )
{
- SetBackgroundVisual( *mImpl, visual, size );
+ visual.SetTransformAndSize( Property::Map(), size ); // Send an empty map as we do not want to modify the visual's set transform
}
}
Vector3 Control::GetNaturalSize()
{
+ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Control::GetNaturalSize for %s\n", Self().GetName().c_str() );
Toolkit::Visual::Base visual = mImpl->GetVisual( Toolkit::Control::Property::BACKGROUND );
if( visual )
{