Merge branch 'devel/master' into devel/new_mesh 81/42381/1 devel/new_mesh
authorFrancisco Santos <f1.santos@samsung.com>
Fri, 26 Jun 2015 14:09:53 +0000 (15:09 +0100)
committerFrancisco Santos <f1.santos@samsung.com>
Fri, 26 Jun 2015 14:09:53 +0000 (15:09 +0100)
Conflicts:
automated-tests/src/dali-toolkit/CMakeLists.txt

Change-Id: Id952401475048d0f19f9ab8757695175ec46056e

1  2 
automated-tests/src/dali-toolkit/CMakeLists.txt
automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp
build/tizen/dali-toolkit/Makefile.am
dali-toolkit/internal/controls/popup/popup-impl.cpp
dali-toolkit/internal/controls/text-controls/text-field-impl.cpp
dali-toolkit/internal/file.list
dali-toolkit/public-api/controls/control-impl.cpp
dali-toolkit/public-api/controls/control-impl.h

@@@ -8,48 -8,66 +8,49 @@@ SET(CAPI_LIB "dali-toolkit"
  # List of test case sources (Only these get parsed for test cases)
  SET(TC_SOURCES
     utc-Dali-Alignment.cpp
 -   utc-Dali-BendyEffect.cpp
 -   utc-Dali-BlindEffect.cpp
     utc-Dali-BloomView.cpp
     utc-Dali-BubbleEmitter.cpp
     utc-Dali-Builder.cpp
 -   utc-Dali-CarouselEffect.cpp
     utc-Dali-CheckBoxButton.cpp
     utc-Dali-CubeTransitionEffect.cpp
 -   utc-Dali-DisplacementEffect.cpp
 -   utc-Dali-DistanceFieldEffect.cpp
     utc-Dali-EffectsView.cpp
     utc-Dali-GaussianBlurView.cpp
     utc-Dali-JsonParser.cpp
     utc-Dali-KeyInputFocusManager.cpp
 -   utc-Dali-OverlayEffect.cpp
 -   utc-Dali-PageTurnEffect.cpp
     utc-Dali-PageTurnView.cpp
+    utc-Dali-Script.cpp
     utc-Dali-ScrollBar.cpp
     utc-Dali-ScrollView.cpp
 +   utc-Dali-ShaderEffects.cpp
     utc-Dali-ShadowView.cpp
 -   utc-Dali-ShearEffect.cpp
     utc-Dali-Slider.cpp
 -   utc-Dali-SoftButtonEffect.cpp
 -   utc-Dali-SpotEffect.cpp
 -   utc-Dali-SquareDissolveEffect.cpp
     utc-Dali-TableView.cpp
     utc-Dali-TextField.cpp
     utc-Dali-TextLabel.cpp
     utc-Dali-TextSelectionPopup.cpp
     utc-Dali-ToolBar.cpp
 -   utc-Dali-WaterEffect.cpp
     utc-Dali-Button.cpp
     utc-Dali-Control.cpp
     utc-Dali-ControlImpl.cpp
     utc-Dali-DefaultControls.cpp
-    utc-Dali-AccessibilityFocusManager.cpp
 -   utc-Dali-DissolveEffect.cpp
+    utc-Dali-AccessibilityManager.cpp
 -   utc-Dali-IrisEffect.cpp
     utc-Dali-ItemLayout.cpp
     utc-Dali-ItemView.cpp
     utc-Dali-KeyboardFocusManager.cpp
     utc-Dali-Magnifier.cpp
 -   utc-Dali-MaskEffect.cpp
     utc-Dali-NinePatchMaskEffect.cpp
     utc-Dali-Popup.cpp
     utc-Dali-PushButton.cpp
     utc-Dali-RadioButton.cpp
 -   utc-Dali-Ripple2DEffect.cpp
 -   utc-Dali-RippleEffect.cpp
     utc-Dali-ScrollViewEffect.cpp
     utc-Dali-StyleManager.cpp
     utc-Dali-SuperBlurView.cpp
 -   utc-Dali-SwirlEffect.cpp
  )
  
  # Append list of test harness files (Won't get parsed for test cases)
  LIST(APPEND TC_SOURCES
     dali-toolkit-test-utils/test-harness.cpp
-    dali-toolkit-test-utils/toolkit-accessibility-manager.cpp
+    dali-toolkit-test-utils/toolkit-accessibility-adaptor.cpp
     dali-toolkit-test-utils/toolkit-application.cpp
     dali-toolkit-test-utils/toolkit-clipboard.cpp
     dali-toolkit-test-utils/toolkit-imf-manager.cpp
@@@ -58,6 -76,7 +59,7 @@@
     dali-toolkit-test-utils/toolkit-singleton-service.cpp
     dali-toolkit-test-utils/toolkit-timer.cpp
     dali-toolkit-test-utils/toolkit-clipboard-event-notifier.cpp
+    dali-toolkit-test-utils/toolkit-tts-player.cpp
     dali-toolkit-test-utils/dummy-control.cpp
     dali-toolkit-test-utils/dali-test-suite-utils.cpp
     dali-toolkit-test-utils/test-application.cpp
@@@ -17,9 -17,9 +17,9 @@@
  
  #include <iostream>
  #include <stdlib.h>
 +#include <dali/devel-api/rendering/renderer.h>
  #include <dali/integration-api/events/key-event-integ.h>
  #include <dali/integration-api/events/tap-gesture-event.h>
 -#include <dali/devel-api/actors/mesh-actor.h>
  #include <dali-toolkit-test-suite-utils.h>
  #include <dali-toolkit/dali-toolkit.h>
  #include <dali-toolkit/devel-api/styling/style-manager.h>
@@@ -452,7 -452,7 +452,7 @@@ int utcDaliTextFieldTextChangedP(void
    tet_infoline(" utcDaliTextFieldTextChangedP");
    TextField field = TextField::New();
    DALI_TEST_CHECK( field );
 -
 +/*
    Stage::GetCurrent().Add( field );
  
    field.TextChangedSignal().Connect(&TestTextChangedCallback);
    gTextChangedCallBackCalled = false;
    application.ProcessEvent( GenerateKey( "D", "D", 0, 0, 0, Integration::KeyEvent::Down ) );
    DALI_TEST_CHECK( gTextChangedCallBackCalled );
 -
 +*/
    END_TEST;
  }
  
@@@ -509,10 -509,10 +509,10 @@@ int utcDaliTextFieldMaxCharactersReache
    gMaxCharactersCallBackCalled = false;
    field.MaxLengthReachedSignal().Connect(&TestMaxLengthReachedCallback);
  
 -  application.ProcessEvent( GenerateKey( "a", "a", 0, 0, 0, Integration::KeyEvent::Down ) );
 -  application.ProcessEvent( GenerateKey( "a", "a", 0, 0, 0, Integration::KeyEvent::Down ) );
 +  //application.ProcessEvent( GenerateKey( "a", "a", 0, 0, 0, Integration::KeyEvent::Down ) );
 +  //application.ProcessEvent( GenerateKey( "a", "a", 0, 0, 0, Integration::KeyEvent::Down ) );
  
 -  DALI_TEST_CHECK( gMaxCharactersCallBackCalled );
 +  //DALI_TEST_CHECK( gMaxCharactersCallBackCalled );
  
    END_TEST;
  }
@@@ -535,10 -535,10 +535,10 @@@ int utcDaliTextFieldMaxCharactersReache
    gMaxCharactersCallBackCalled = false;
    field.MaxLengthReachedSignal().Connect(&TestMaxLengthReachedCallback);
  
 -  application.ProcessEvent( GenerateKey( "a", "a", 0, 0, 0, Integration::KeyEvent::Down ) );
 -  application.ProcessEvent( GenerateKey( "a", "a", 0, 0, 0, Integration::KeyEvent::Down ) );
 +  //application.ProcessEvent( GenerateKey( "a", "a", 0, 0, 0, Integration::KeyEvent::Down ) );
 +  //application.ProcessEvent( GenerateKey( "a", "a", 0, 0, 0, Integration::KeyEvent::Down ) );
  
 -  DALI_TEST_CHECK( !gMaxCharactersCallBackCalled );
 +  //DALI_TEST_CHECK( !gMaxCharactersCallBackCalled );
  
    END_TEST;
  }
@@@ -639,7 -639,7 +639,7 @@@ int utcDaliTextFieldEvent02(void
  
    TextField field = TextField::New();
    DALI_TEST_CHECK( field );
 -
 +/*
    Stage::GetCurrent().Add( field );
  
    field.SetSize( 300.f, 50.f );
    // Cursor position should be the same than position2.
    Vector3 position6 = cursor.GetCurrentPosition();
  
-   DALI_TEST_EQUALS( Vector3( 0.f, position2.y, position2.z ), position6, TEST_LOCATION ); // TODO Should be in the same position2.
+   DALI_TEST_EQUALS( position2, position6, TEST_LOCATION );// Should be in the same position2.
  
    // Should not be renderer.
    DALI_TEST_EQUALS( offscreenRoot.GetChildCount(), 1u, TEST_LOCATION ); // The camera actor only.
 -
 +*/
    END_TEST;
  }
  
@@@ -818,10 -818,10 +818,10 @@@ int utcDaliTextFieldEvent03(void
    CameraActor camera = CameraActor::DownCast( offscreenRoot.GetChildAt( 0u ) );
    DALI_TEST_CHECK( camera );
  
 -  RenderableActor renderer = RenderableActor::DownCast( offscreenRoot.GetChildAt( 1u ) );
 -  DALI_TEST_CHECK( renderer );
 +  //RenderableActor renderer = RenderableActor::DownCast( offscreenRoot.GetChildAt( 1u ) );
 +  //DALI_TEST_CHECK( renderer );
  
 -  MeshActor highlight = MeshActor::DownCast( offscreenRoot.GetChildAt( 2u ) );
 +  Renderer highlight = offscreenRoot.GetChildAt( 2u ).GetRendererAt( 0u );
    DALI_TEST_CHECK( highlight );
  
    END_TEST;
@@@ -96,6 -96,7 +96,6 @@@ develapishadowviewdir =         $(devel
  develapisuperblurviewdir =      $(develapicontrolsdir)/super-blur-view
  develapifocusmanagerdir =       $(develapidir)/focus-manager
  develapiscriptingdir =          $(develapidir)/scripting
 -develapibubbleeffectdir =       $(develapidir)/shader-effects/bubble-effect
  develapishadereffectsdir =      $(develapidir)/shader-effects
  develapitransitioneffectsdir =  $(develapidir)/transition-effects
  develapistylingdir =            $(develapidir)/styling
@@@ -105,6 -106,7 +105,6 @@@ develapitextselectionpopupdir = $(devel
  # devel headers
  develapibloomview_HEADERS =         $(devel_api_bloom_view_header_files)
  develapibubbleemitter_HEADERS =     $(devel_api_bubble_emitter_header_files)
 -develapibubbleeffect_HEADERS =      $(devel_api_bubble_effect_header_files)
  develapibuilder_HEADERS =           $(devel_api_builder_header_files)
  develapieffectsview_HEADERS =       $(devel_api_effects_view_header_files)
  develapifocusmanager_HEADERS =      $(devel_api_focus_manager_header_files)
@@@ -122,34 -124,36 +122,36 @@@ develapitransitioneffects_HEADERS = $(d
  develapitextselectionpopup_HEADERS = $(devel_api_text_selection_popup_header_files)
  
  # public api source
- publicapidir =                  $(topleveldir)/public-api
- publicapicontrolsdir =          $(publicapidir)/controls
- publicapialignmentdir =         $(publicapicontrolsdir)/alignment
- publicapibuttonsdir =           $(publicapicontrolsdir)/buttons
- publicapidefaultcontrolsdir =   $(publicapicontrolsdir)/default-controls
- publicapigaussianblurviewdir =  $(publicapicontrolsdir)/gaussian-blur-view
- publicapiscrollbardir =         $(publicapicontrolsdir)/scroll-bar
- publicapiscrollabledir =        $(publicapicontrolsdir)/scrollable
- publicapiscrollviewdir =        $(publicapicontrolsdir)/scrollable/scroll-view
- publicapiitemviewdir =          $(publicapicontrolsdir)/scrollable/item-view
- publicapitableviewdir =         $(publicapicontrolsdir)/table-view
- publicapitextcontrolsdir =      $(publicapicontrolsdir)/text-controls
- publicapifocusmanagerdir =      $(publicapidir)/focus-manager
- publicapirenderingbackenddir =  $(publicapidir)/text
+ publicapidir =                    $(topleveldir)/public-api
+ publicapicontrolsdir =            $(publicapidir)/controls
+ develapiaccessibilitymanagerdir = $(publicapidir)/accessibility-manager
+ publicapialignmentdir =           $(publicapicontrolsdir)/alignment
+ publicapibuttonsdir =             $(publicapicontrolsdir)/buttons
+ publicapidefaultcontrolsdir =     $(publicapicontrolsdir)/default-controls
+ publicapigaussianblurviewdir =    $(publicapicontrolsdir)/gaussian-blur-view
+ publicapiscrollbardir =           $(publicapicontrolsdir)/scroll-bar
+ publicapiscrollabledir =          $(publicapicontrolsdir)/scrollable
+ publicapiscrollviewdir =          $(publicapicontrolsdir)/scrollable/scroll-view
+ publicapiitemviewdir =            $(publicapicontrolsdir)/scrollable/item-view
+ publicapitableviewdir =           $(publicapicontrolsdir)/table-view
+ publicapitextcontrolsdir =        $(publicapicontrolsdir)/text-controls
+ publicapifocusmanagerdir =        $(publicapidir)/focus-manager
+ publicapirenderingbackenddir =    $(publicapidir)/text
  
  # public api headers
- publicapi_HEADERS =                 $(public_api_header_files)
- publicapicontrols_HEADERS =         $(public_api_controls_header_files)
- publicapialignment_HEADERS =        $(public_api_alignment_header_files)
- publicapibuttons_HEADERS =          $(public_api_buttons_header_files)
- publicapidefaultcontrols_HEADERS =  $(public_api_default_controls_header_files)
- publicapigaussianblurview_HEADERS = $(public_api_gaussian_blur_view_header_files)
- publicapiitemview_HEADERS =         $(public_api_item_view_header_files)
- publicapiscrollbar_HEADERS =        $(public_api_scroll_bar_header_files)
- publicapiscrollable_HEADERS =       $(public_api_scrollable_header_files)
- publicapiscrollview_HEADERS =       $(public_api_scroll_view_header_files)
- publicapitableview_HEADERS =        $(public_api_table_view_header_files)
- publicapitextcontrols_HEADERS =     $(public_api_text_controls_header_files)
- publicapifocusmanager_HEADERS =     $(public_api_focus_manager_header_files)
- publicapirenderingbackend_HEADERS = $(public_api_rendering_backend_header_files)
+ publicapi_HEADERS =                    $(public_api_header_files)
+ publicapicontrols_HEADERS =            $(public_api_controls_header_files)
+ develapiaccessibilitymanager_HEADERS = $(public_api_accessibility_manager_header_files)
+ publicapialignment_HEADERS =           $(public_api_alignment_header_files)
+ publicapibuttons_HEADERS =             $(public_api_buttons_header_files)
+ publicapidefaultcontrols_HEADERS =     $(public_api_default_controls_header_files)
+ publicapigaussianblurview_HEADERS =    $(public_api_gaussian_blur_view_header_files)
+ publicapiitemview_HEADERS =            $(public_api_item_view_header_files)
+ publicapiscrollbar_HEADERS =           $(public_api_scroll_bar_header_files)
+ publicapiscrollable_HEADERS =          $(public_api_scrollable_header_files)
+ publicapiscrollview_HEADERS =          $(public_api_scroll_view_header_files)
+ publicapitableview_HEADERS =           $(public_api_table_view_header_files)
+ publicapitextcontrols_HEADERS =        $(public_api_text_controls_header_files)
+ publicapifocusmanager_HEADERS =        $(public_api_focus_manager_header_files)
+ publicapirenderingbackend_HEADERS =    $(public_api_rendering_backend_header_files)
  
@@@ -35,9 -35,8 +35,9 @@@
  // INTERNAL INCLUDES
  #include <dali-toolkit/public-api/controls/buttons/button.h>
  #include <dali-toolkit/public-api/controls/control-impl.h>
 +#include <dali-toolkit/public-api/controls/control-depth-index-ranges.h>
  #include <dali-toolkit/public-api/controls/default-controls/solid-color-actor.h>
- #include <dali-toolkit/public-api/focus-manager/accessibility-focus-manager.h>
+ #include <dali-toolkit/public-api/accessibility-manager/accessibility-manager.h>
  #include <dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h>
  #include <dali-toolkit/internal/controls/buttons/button-impl.h>
  
@@@ -129,10 -128,10 +129,10 @@@ void Popup::OnInitialize(
    // Create Layer
    mLayer = Layer::New();
    mLayer.SetName( "POPUP_LAYER" );
 +  mLayer.SetDepthTestDisabled( true );
    mLayer.SetParentOrigin(ParentOrigin::CENTER);
    mLayer.SetAnchorPoint(AnchorPoint::CENTER);
    mLayer.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
 -  mLayer.SetDrawMode( DrawMode::OVERLAY );
  
    // Any content after this point which is added to Self() will be reparented to
    // mContent.
@@@ -224,11 -223,6 +224,11 @@@ void Popup::SetBackgroundImage( Actor i
    mBackgroundImage.SetAnchorPoint( AnchorPoint::CENTER );
    mBackgroundImage.SetParentOrigin( ParentOrigin::CENTER );
  
 +  if ( ImageActor imageActor = DownCast< ImageActor >( image ) )
 +  {
 +    imageActor.SetSortModifier( BACKGROUND_DEPTH_INDEX );
 +  }
 +
    Vector3 border( mPopupStyle->backgroundOuterBorder.x, mPopupStyle->backgroundOuterBorder.z, 0.0f );
    mBackgroundImage.SetSizeModeFactor( border );
  
@@@ -249,11 -243,6 +249,11 @@@ void Popup::SetButtonAreaImage( Actor i
    // Adds new area image to the dialog.
    mButtonAreaImage = image;
  
 +  if ( ImageActor imageActor = DownCast< ImageActor >( image ) )
 +  {
 +    imageActor.SetSortModifier( BACKGROUND_DEPTH_INDEX + 1 );
 +  }
 +
    // OnDialogTouched only consume the event. It prevents the touch event to be caught by the backing.
    mButtonAreaImage.TouchedSignal().Connect( this, &Popup::OnDialogTouched );
  
@@@ -427,7 -416,7 +427,7 @@@ void Popup::CreateBacking(
  {
    mBacking = Dali::Toolkit::CreateSolidColorActor( mPopupStyle->backingColor );
    mBacking.SetName( "POPUP_BACKING" );
 -
 +  mBacking.SetSortModifier( BACKGROUND_DEPTH_INDEX - 1 );
    mBacking.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
    mBacking.SetSensitive(true);
  
@@@ -897,7 -897,6 +897,7 @@@ void TextField::OnInitialize(
    // Fill-parent area by default
    self.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
    self.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT );
 +  self.OnStageSignal().Connect( this, &TextField::OnStageConnect );
  }
  
  void TextField::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change )
@@@ -932,39 -931,35 +932,39 @@@ void TextField::OnRelayout( const Vecto
        mRenderer = Backend::Get().NewRenderer( mRenderingBackend );
      }
  
 -    RenderableActor renderableActor;
 -    if( mRenderer )
 -    {
 -      renderableActor = mRenderer->Render( mController->GetView() );
 -    }
 -
 +    RenderText();
      EnableClipping( (Dali::Toolkit::TextField::EXCEED_POLICY_CLIP == mExceedPolicy), size );
 +  }
 +}
  
 -    if( renderableActor != mRenderableActor )
 -    {
 -      UnparentAndReset( mRenderableActor );
 -      mRenderableActor = renderableActor;
 -    }
 +void TextField::RenderText()
 +{
 +  Actor renderableActor;
 +  if( mRenderer )
 +  {
 +    renderableActor = mRenderer->Render( mController->GetView(), mDepth );
 +  }
  
 -    if( mRenderableActor )
 -    {
 -      const Vector2 offset = mController->GetScrollPosition() + mController->GetAlignmentOffset();
 +  if( renderableActor != mRenderableActor )
 +  {
 +    UnparentAndReset( mRenderableActor );
 +    mRenderableActor = renderableActor;
 +  }
  
 -      mRenderableActor.SetPosition( offset.x, offset.y );
 +  if( mRenderableActor )
 +  {
 +    const Vector2 offset = mController->GetScrollPosition() + mController->GetAlignmentOffset();
  
 -      // Make sure the actor is parented correctly with/without clipping
 -      if( mClipper )
 -      {
 -        mClipper->GetRootActor().Add( mRenderableActor );
 -      }
 -      else
 -      {
 -        Self().Add( mRenderableActor );
 -      }
 +    mRenderableActor.SetPosition( offset.x, offset.y );
 +
 +    // Make sure the actor is parented correctly with/without clipping
 +    if( mClipper )
 +    {
 +      mClipper->GetRootActor().Add( mRenderableActor );
 +    }
 +    else
 +    {
 +      Self().Add( mRenderableActor );
      }
  
      for( std::vector<Actor>::const_iterator it = mClippingDecorationActors.begin(),
@@@ -1095,18 -1090,6 +1095,18 @@@ void TextField::TextChanged(
    mTextChangedSignal.Emit( handle );
  }
  
 +void TextField::OnStageConnect( Dali::Actor actor )
 +{
 +  if ( mHasBeenStaged )
 +  {
 +    RenderText();
 +  }
 +  else
 +  {
 +    mHasBeenStaged = true;
 +  }
 +}
 +
  void TextField::MaxLengthReached()
  {
    Dali::Toolkit::TextField handle( GetOwner() );
@@@ -1156,13 -1139,12 +1156,17 @@@ void TextField::KeyboardStatusChanged(b
    {
      mController->KeyboardFocusLostEvent();
    }
+   else
+   {
+     mController->KeyboardFocusGainEvent();
+   }
  }
  
 +void TextField::OnStageConnection( unsigned int depth )
 +{
 +  mDepth = depth;
 +}
 +
  bool TextField::OnTouched( Actor actor, const TouchEvent& event )
  {
    return true;
  TextField::TextField()
  : Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ),
    mRenderingBackend( DEFAULT_RENDERING_BACKEND ),
 -  mExceedPolicy( Dali::Toolkit::TextField::EXCEED_POLICY_CLIP )
 +  mExceedPolicy( Dali::Toolkit::TextField::EXCEED_POLICY_CLIP ),
 +  mDepth( 0 ),
 +  mHasBeenStaged( false )
  {
  }
  
@@@ -15,7 -15,6 +15,7 @@@ toolkit_src_files = 
     $(toolkit_src_dir)/controls/alignment/alignment-impl.cpp \
     $(toolkit_src_dir)/controls/bloom-view/bloom-view-impl.cpp \
     $(toolkit_src_dir)/controls/bubble-effect/bubble-emitter-impl.cpp \
 +   $(toolkit_src_dir)/controls/bubble-effect/bubble-actor.cpp \
     $(toolkit_src_dir)/controls/buttons/button-impl.cpp \
     $(toolkit_src_dir)/controls/buttons/check-box-button-impl.cpp \
     $(toolkit_src_dir)/controls/buttons/push-button-impl.cpp \
@@@ -26,7 -25,6 +26,7 @@@
     $(toolkit_src_dir)/controls/popup/popup-impl.cpp \
     $(toolkit_src_dir)/controls/popup/popup-style-impl.cpp \
     $(toolkit_src_dir)/controls/page-turn-view/page-turn-portrait-view-impl.cpp \
 +   $(toolkit_src_dir)/controls/page-turn-view/page-turn-effect.cpp \
     $(toolkit_src_dir)/controls/page-turn-view/page-turn-landscape-view-impl.cpp \
     $(toolkit_src_dir)/controls/page-turn-view/page-turn-view-impl.cpp \
     $(toolkit_src_dir)/controls/scroll-bar/scroll-bar-impl.cpp \
     $(toolkit_src_dir)/controls/text-controls/text-selection-popup-impl.cpp \
     $(toolkit_src_dir)/controls/text-controls/text-selection-toolbar-impl.cpp \
     $(toolkit_src_dir)/controls/tool-bar/tool-bar-impl.cpp \
-    $(toolkit_src_dir)/focus-manager/accessibility-focus-manager-impl.cpp \
+    $(toolkit_src_dir)/accessibility-manager/accessibility-manager-impl.cpp \
     $(toolkit_src_dir)/focus-manager/keyboard-focus-manager-impl.cpp \
     $(toolkit_src_dir)/focus-manager/keyinput-focus-manager-impl.cpp \
     $(toolkit_src_dir)/filters/blur-two-pass-filter.cpp \
     $(toolkit_src_dir)/filters/emboss-filter.cpp \
     $(toolkit_src_dir)/filters/image-filter.cpp \
     $(toolkit_src_dir)/filters/spread-filter.cpp \
 -   $(toolkit_src_dir)/shader-effects/page-turn-effect-impl.cpp \
 -   $(toolkit_src_dir)/shader-effects/water-effect-impl.cpp \
     $(toolkit_src_dir)/styling/style-manager-impl.cpp \
     $(toolkit_src_dir)/text/bidirectional-support.cpp \
     $(toolkit_src_dir)/text/character-set-conversion.cpp \
  #include <limits>
  #include <stack>
  #include <dali/public-api/actors/image-actor.h>
 -#include <dali/devel-api/actors/mesh-actor.h>
  #include <dali/public-api/animation/constraint.h>
  #include <dali/public-api/animation/constraints.h>
 -#include <dali/devel-api/geometry/mesh.h>
  #include <dali/public-api/object/type-registry.h>
 +#include <dali/public-api/size-negotiation/relayout-container.h>
  #include <dali/devel-api/object/type-registry-helper.h>
 +#include <dali/devel-api/rendering/renderer.h>
  #include <dali/devel-api/scripting/scripting.h>
 -#include <dali/public-api/size-negotiation/relayout-container.h>
  #include <dali/integration-api/debug.h>
  
  // INTERNAL INCLUDES
 +#include <dali-toolkit/public-api/controls/control-depth-index-ranges.h>
  #include <dali-toolkit/devel-api/focus-manager/keyinput-focus-manager.h>
  #include <dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h>
  #include <dali-toolkit/public-api/controls/control.h>
@@@ -167,7 -167,7 +167,7 @@@ DALI_TYPE_REGISTRATION_END(
   */
  struct Background
  {
 -  Actor actor;   ///< Either a MeshActor or an ImageActor
 +  Actor actor;   ///< Background actor
    Vector4 color; ///< The color of the actor.
  
    /**
    }
  };
  
 -/**
 - * Creates a white coloured Mesh.
 - */
 -Mesh CreateMesh()
 -{
 -  Vector3 white( Color::WHITE );
 +unsigned int gQuadIndex[6] = { 0, 2, 1, 1, 2, 3 };
  
 -  MeshData meshData;
 +Vector2 gQuad[] = {
 +                   Vector2( -0.5f, -0.5f ),
 +                   Vector2(  0.5f, -0.5f ),
 +                   Vector2( -0.5f,  0.5f ),
 +                   Vector2(  0.5f,  0.5f )
 +};
  
 -  // Create vertices with a white color (actual color is set by actor color)
 -  MeshData::VertexContainer vertices(4);
 -  vertices[ 0 ] = MeshData::Vertex( Vector3( -0.5f, -0.5f, 0.0f ), Vector2::ZERO, white );
 -  vertices[ 1 ] = MeshData::Vertex( Vector3(  0.5f, -0.5f, 0.0f ), Vector2::ZERO, white );
 -  vertices[ 2 ] = MeshData::Vertex( Vector3( -0.5f,  0.5f, 0.0f ), Vector2::ZERO, white );
 -  vertices[ 3 ] = MeshData::Vertex( Vector3(  0.5f,  0.5f, 0.0f ), Vector2::ZERO, white );
  
 -  // Specify all the faces
 -  MeshData::FaceIndices faces;
 -  faces.reserve( 6 ); // 2 triangles in Quad
 -  faces.push_back( 0 ); faces.push_back( 3 ); faces.push_back( 1 );
 -  faces.push_back( 0 ); faces.push_back( 2 ); faces.push_back( 3 );
 +const char* VERTEX_SHADER_COLOR = DALI_COMPOSE_SHADER(
 +    attribute mediump vec2 aPosition;\n
 +    uniform mediump mat4 uMvpMatrix;\n
 +    void main()\n
 +    {\n
 +      gl_Position = uMvpMatrix * vec4( aPosition, 0.0, 1.0 );\n
 +    }\n
 +);
  
 -  // Create the mesh data from the vertices and faces
 -  meshData.SetMaterial( Material::New( "ControlMaterial" ) );
 -  meshData.SetVertices( vertices );
 -  meshData.SetFaceIndices( faces );
 -  meshData.SetHasColor( true );
 +const char* FRAGMENT_SHADER_COLOR = DALI_COMPOSE_SHADER(
 +    uniform lowp vec4 uBackgroundColor;\n
 +    uniform lowp vec4 uColor;\n
 +    void main()\n
 +    {\n
 +      gl_FragColor = uBackgroundColor * uColor;\n
 +    }\n
 +);
  
 -  return Mesh::New( meshData );
 -}
  
  /**
 - * Sets all the required properties for the background actor.
 + * @brief Create the background actor for the control.
   *
 - * @param[in]  actor              The actor to set the properties on.
 - * @param[in]  color              The required color of the actor.
 - */
 -void SetupBackgroundActor( Actor actor, const Vector4& color )
 -{
 -  actor.SetColor( color );
 -  actor.SetPositionInheritanceMode( USE_PARENT_POSITION_PLUS_LOCAL_POSITION );
 -  actor.SetColorMode( USE_OWN_MULTIPLY_PARENT_COLOR );
 -  actor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
 -}
 -
 -/**
 - * Sets all the required properties for the background actor.
 + * @param[in] actor The parent actor of the background
 + * @param[in] color The background color
 + * @param[in] image If a valid image is supplied this will be the texture used by the background
 + *
 + * @return An actor which will render the background
   *
 - * @param[in]  actor              The actor to set the properties on.
 - * @param[in]  constrainingIndex  The property index to constrain the parent's size on.
 - * @param[in]  color              The required color of the actor.
   */
 -void SetupBackgroundActorConstrained( Actor actor, Property::Index constrainingIndex, const Vector4& color )
 +Actor CreateBackground( Actor parent, const Vector4& color, Image image = Image() )
  {
 -  actor.SetColor( color );
 -  actor.SetPositionInheritanceMode( USE_PARENT_POSITION_PLUS_LOCAL_POSITION );
 -  actor.SetColorMode( USE_OWN_MULTIPLY_PARENT_COLOR );
 +  if( !image )
 +  {
 +    PropertyBuffer vertexBuffer;
 +    Shader shader;
 +    Material material;
 +
 +    Property::Map vertexFormat;
 +    vertexFormat["aPosition"] = Property::VECTOR2;
 +
 +    //Create a vertex buffer for vertex positions
 +    vertexBuffer = PropertyBuffer::New( vertexFormat, 4u );
 +    vertexBuffer.SetData( gQuad );
 +
 +    shader = Shader::New( VERTEX_SHADER_COLOR, FRAGMENT_SHADER_COLOR );
 +    material = Material::New( shader );
 +
 +    //Create the index buffer
 +    Property::Map indexFormat;
 +    indexFormat["indices"] = Property::UNSIGNED_INTEGER;
 +    PropertyBuffer indexBuffer = PropertyBuffer::New( indexFormat, 6u );
 +    indexBuffer.SetData(gQuadIndex);
 +
 +    //Create the geometry
 +    Geometry mesh = Geometry::New();
 +    mesh.AddVertexBuffer( vertexBuffer );
 +    mesh.SetIndexBuffer( indexBuffer );
 +
 +    //Add uniforms to the shader
 +    shader.RegisterProperty( "uBackgroundColor", color );
 +
 +    //Create the renderer
 +    Renderer renderer = Renderer::New( mesh, material );
 +    renderer.SetDepthIndex( BACKGROUND_DEPTH_INDEX );
 +
 +    //Create the actor
 +    Actor meshActor = Actor::New();
 +    meshActor.SetSize( Vector3::ONE );
 +    meshActor.AddRenderer( renderer );
 +    meshActor.SetPositionInheritanceMode( USE_PARENT_POSITION_PLUS_LOCAL_POSITION );
 +    meshActor.SetColorMode( USE_PARENT_COLOR );
 +
 +    //Constraint scale of the mesh actor to the size of the control
 +    Constraint constraint = Constraint::New<Vector3>( meshActor,
 +                                                      Actor::Property::SCALE,
 +                                                      EqualToConstraint() );
 +    constraint.AddSource( ParentSource( Actor::Property::SIZE ) );
 +    constraint.Apply();
 +
 +    return meshActor;
 +  }
 +  else
 +  {
 +    ImageActor imageActor = ImageActor::New( image );
 +    imageActor.SetColor( color );
 +    imageActor.SetPositionInheritanceMode( USE_PARENT_POSITION_PLUS_LOCAL_POSITION );
 +    imageActor.SetColorMode( USE_OWN_MULTIPLY_PARENT_COLOR );
 +    imageActor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
 +
 +    return imageActor;
 +  }
  
 -  Constraint constraint = Constraint::New<Vector3>( actor,
 -                                                    constrainingIndex,
 -                                                    EqualToConstraint() );
 -  constraint.AddSource( ParentSource( Actor::Property::SIZE ) );
 -  constraint.Apply();
  }
  
  } // unnamed namespace
@@@ -295,21 -256,21 +295,21 @@@ public
  
    // Construction & Destruction
    Impl(Control& controlImpl)
 -  : mControlImpl( controlImpl ),
 -    mStyleName(""),
 -    mBackground( NULL ),
 -    mStartingPinchScale( NULL ),
 -    mKeyEventSignal(),
 -    mPinchGestureDetector(),
 -    mPanGestureDetector(),
 -    mTapGestureDetector(),
 -    mLongPressGestureDetector(),
 -    mFlags( Control::ControlBehaviour( ACTOR_BEHAVIOUR_NONE ) ),
 -    mIsKeyboardNavigationSupported( false ),
 -    mIsKeyboardFocusGroup( false ),
 -    mAddRemoveBackgroundChild( false )
 -  {
 -  }
 +: mControlImpl( controlImpl ),
 +  mStyleName(""),
 +  mBackground( NULL ),
 +  mStartingPinchScale( NULL ),
 +  mKeyEventSignal(),
 +  mPinchGestureDetector(),
 +  mPanGestureDetector(),
 +  mTapGestureDetector(),
 +  mLongPressGestureDetector(),
 +  mFlags( Control::ControlBehaviour( ACTOR_BEHAVIOUR_NONE ) ),
 +  mIsKeyboardNavigationSupported( false ),
 +  mIsKeyboardFocusGroup( false ),
 +  mAddRemoveBackgroundChild( false )
 +{
 +}
  
    ~Impl()
    {
            Property::Map map;
  
            Background* back = controlImpl.mImpl->mBackground;
 -          if( back )
 +          if ( back && back->actor )
            {
 -            ImageActor imageActor = ImageActor::DownCast( back->actor );
 -            if ( imageActor )
 +            if( back->actor.GetRendererCount() > 0 && back->actor.GetRendererAt(0).GetMaterial().GetNumberOfSamplers() > 0 )
 +            {
 +              Image image = back->actor.GetRendererAt(0).GetMaterial().GetSamplerAt(0).GetImage();
 +              if ( image )
 +              {
 +                Scripting::CreatePropertyMap( image, map );
 +              }
 +            }
 +            else
              {
 -              Image image = imageActor.GetImage();
 -              Scripting::CreatePropertyMap( image, map );
 +              ImageActor imageActor = ImageActor::DownCast( back->actor );
 +              if ( imageActor )
 +              {
 +                Image image = imageActor.GetImage();
 +                Scripting::CreatePropertyMap( image, map );
 +              }
              }
            }
  
@@@ -564,24 -514,21 +564,24 @@@ void Control::SetBackgroundColor( cons
  
    if ( background.actor )
    {
 -    // Just set the actor color
 -    background.actor.SetColor( color );
 +    if( background.actor.GetRendererCount() > 0 )
 +    {
 +      Shader shader = background.actor.GetRendererAt(0).GetMaterial().GetShader();
 +      shader.SetProperty( shader.GetPropertyIndex("uBackgroundColor"), color );
 +    }
 +    else
 +    {
 +      background.actor.SetColor( color );
 +    }
    }
    else
    {
      // Create Mesh Actor
 -    MeshActor meshActor = MeshActor::New( CreateMesh() );
 -
 -    SetupBackgroundActorConstrained( meshActor, Actor::Property::SCALE, color );
 -
 -    background.actor = meshActor;
 -    // Set the flag to avoid notifying children
 +    Actor actor = CreateBackground(Self(), color );
 +    background.actor = actor;
      mImpl->mAddRemoveBackgroundChild = true;
      // use insert to guarantee its the first child (so that OVERLAY mode works)
 -    Self().Insert( 0, meshActor );
 +    Self().Insert( 0, actor );
      mImpl->mAddRemoveBackgroundChild = false;
    }
  
@@@ -601,23 -548,24 +601,23 @@@ void Control::SetBackgroundImage( Imag
  {
    Background& background( mImpl->GetBackground() );
  
 -  if ( background.actor )
 -  {
 -    // Remove Current actor, unset AFTER removal
 -    mImpl->mAddRemoveBackgroundChild = true;
 -    Self().Remove( background.actor );
 -    mImpl->mAddRemoveBackgroundChild = false;
 -    background.actor.Reset();
 -  }
 +   if ( background.actor )
 +   {
 +     // Remove Current actor, unset AFTER removal
 +     mImpl->mAddRemoveBackgroundChild = true;
 +     Self().Remove( background.actor );
 +     mImpl->mAddRemoveBackgroundChild = false;
 +     background.actor.Reset();
 +   }
  
 -  ImageActor imageActor = ImageActor::New( image );
 -  SetupBackgroundActor( imageActor, background.color );
 +   Actor actor = CreateBackground(Self(), background.color, image);
  
 -  // Set the background actor before adding so that we do not inform derived classes
 -  background.actor = imageActor;
 -  mImpl->mAddRemoveBackgroundChild = true;
 -  // use insert to guarantee its the first child (so that OVERLAY mode works)
 -  Self().Insert( 0, imageActor );
 -  mImpl->mAddRemoveBackgroundChild = false;
 +   // Set the background actor before adding so that we do not inform derived classes
 +   background.actor = actor;
 +   mImpl->mAddRemoveBackgroundChild = true;
 +   // use insert to guarantee its the first child (so that OVERLAY mode works)
 +   Self().Insert( 0, actor );
 +   mImpl->mAddRemoveBackgroundChild = false;
  }
  
  void Control::ClearBackground()
@@@ -787,6 -735,11 +787,11 @@@ bool Control::OnAccessibilityValueChang
    return false; // Accessibility value change action is not handled by default
  }
  
+ bool Control::OnAccessibilityZoom()
+ {
+   return false; // Accessibility zoom action is not handled by default
+ }
  Actor Control::GetNextKeyboardFocusableActor(Actor currentFocusedActor, Toolkit::Control::KeyboardFocus::Direction direction, bool loopEnabled)
  {
    return Actor();
@@@ -917,11 -870,11 +922,11 @@@ void Control::EmitKeyInputFocusSignal( 
  
    if ( focusGained )
    {
 -     // signals are allocated dynamically when someone connects
 -     if ( !mImpl->mKeyInputFocusGainedSignal.Empty() )
 -     {
 +    // signals are allocated dynamically when someone connects
 +    if ( !mImpl->mKeyInputFocusGainedSignal.Empty() )
 +    {
        mImpl->mKeyInputFocusGainedSignal.Emit( handle );
 -     }
 +    }
    }
    else
    {
    }
  }
  
 -void Control::OnStageConnection()
 +void Control::OnStageConnection( unsigned int depth )
  {
 +  unsigned int controlRendererCount = Self().GetRendererCount();
 +  for( unsigned int i(0); i<controlRendererCount; ++i )
 +  {
 +    Renderer controlRenderer = Self().GetRendererAt(i);
 +    if( controlRenderer )
 +    {
 +      controlRenderer.SetDepthIndex( CONTENT_DEPTH_INDEX+depth );
 +    }
 +  }
 +
 +  if( mImpl->mBackground )
 +  {
 +    if(mImpl->mBackground->actor.GetRendererCount() > 0 )
 +    {
 +      Renderer backgroundRenderer = mImpl->mBackground->actor.GetRendererAt( 0 );
 +      if(backgroundRenderer)
 +      {
 +        backgroundRenderer.SetDepthIndex( BACKGROUND_DEPTH_INDEX+depth );
 +      }
 +    }
 +    else
 +    {
 +
 +      ImageActor imageActor = ImageActor::DownCast( mImpl->mBackground->actor );
 +      if ( imageActor )
 +      {
 +        imageActor.SetSortModifier( BACKGROUND_DEPTH_INDEX+depth );
 +      }
 +    }
 +  }
  }
  
  void Control::OnStageDisconnection()
@@@ -1049,30 -972,15 +1054,30 @@@ void Control::OnSetResizePolicy( Resize
  
  Vector3 Control::GetNaturalSize()
  {
 +  //Control's natural size is the size of its background image if it has been set, or ZERO otherwise
 +  Vector3 naturalSize = Vector3::ZERO;
    if( mImpl->mBackground )
    {
 -    Actor actor = mImpl->mBackground->actor;
 -    if( actor )
 +    if( mImpl->mBackground->actor.GetRendererCount() > 0 )
 +    {
 +      Material backgroundMaterial = mImpl->mBackground->actor.GetRendererAt(0).GetMaterial();
 +      if( backgroundMaterial.GetNumberOfSamplers() > 0 )
 +      {
 +        Image backgroundImage =  backgroundMaterial.GetSamplerAt(0).GetImage();
 +        if( backgroundImage )
 +        {
 +          naturalSize.x = backgroundImage.GetWidth();
 +          naturalSize.y = backgroundImage.GetHeight();
 +        }
 +      }
 +    }
 +    else
      {
 -      return actor.GetNaturalSize();
 +      return mImpl->mBackground->actor.GetNaturalSize();
      }
    }
 -  return Vector3();
 +
 +  return naturalSize;
  }
  
  float Control::CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension )
@@@ -270,7 -270,7 +270,7 @@@ protected: // From CustomActorImpl, no
    /**
     * @copydoc CustomActorImpl::OnStageConnection()
     */
 -  virtual void OnStageConnection();
 +  virtual void OnStageConnection( unsigned int depth );
  
    /**
     * @copydoc CustomActorImpl::OnStageDisconnection()
@@@ -465,6 -465,14 +465,14 @@@ public: // API for derived classes to o
     */
    virtual bool OnAccessibilityValueChange( bool isIncrease );
  
+   /**
+    * @brief This method should be overridden by deriving classes when they wish to respond
+    * the accessibility zoom action
+    *
+    * @return true if the zoom action has been consumed by this control
+    */
+   virtual bool OnAccessibilityZoom();
    // Keyboard focus
  
    /**