Merge branch 'tizen' into devel/new_mesh 91/37591/3
authorDavid Steele <david.steele@partner.samsung.com>
Tue, 31 Mar 2015 14:44:46 +0000 (15:44 +0100)
committerDavid Steele <david.steele@partner.samsung.com>
Tue, 31 Mar 2015 16:03:32 +0000 (17:03 +0100)
Change-Id: I1df97f4ad515536413b587eb178a5645c31dbf3a

15 files changed:
1  2 
build/tizen/configure.ac
dali-toolkit/dali-toolkit.h
dali-toolkit/internal/builder/builder-impl.cpp
dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp
dali-toolkit/internal/controls/text-input/text-input-decorator-impl.cpp
dali-toolkit/internal/controls/text-input/text-input-impl.cpp
dali-toolkit/internal/controls/text-input/text-input-impl.h
dali-toolkit/internal/controls/text-view/relayout-utilities.cpp
dali-toolkit/internal/controls/text-view/text-view-impl.cpp
dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp
dali-toolkit/internal/file.list
dali-toolkit/public-api/controls/control-impl.cpp
dali-toolkit/public-api/file.list
dali-toolkit/public-api/shader-effects/motion-blur-effect.cpp
dali-toolkit/public-api/shader-effects/motion-stretch-effect.cpp

diff --combined build/tizen/configure.ac
@@@ -46,30 -46,34 +46,34 @@@ AC_ARG_ENABLE([debug]
                [enable_debug=$enableval],
                [enable_debug=no])
  
- # option for JavaScript plugin
- AC_ARG_ENABLE(javascript,
+ # option to build JavaScript plugin
+ # configure settings and output
+ # --enable-javascript        // enable_javascript = yes
+ # --enable-javascript=yes    // enable_javascript = yes
+ # --enable-javascript=no     // enable_javascript = no
+ # --disable-javascript       // enable_javascript = no
+ #  no setting                // enable_javascript = automatic ( enable if v8 present)
+ AC_ARG_ENABLE([javascript],
                [AC_HELP_STRING([--enable-javascript],
-                               [Enable JavaScript plugin])] ,
-                [enable_javascript=yes],
+                [Enable JavaScript plugin])] ,
+                [enable_javascript=$enableval],
 -               [enable_javascript=automatic])
 -
 +               [enable_javascript=no])
++#TODO MESH_REWORK  Change default back to automatic
  
  if test "x$enable_debug" = "xyes"; then
    DALI_TOOLKIT_CFLAGS="$DALI_TOOLKIT_CFLAGS -DDEBUG_ENABLED"
-   DALI_SCRIPTV8_CFLAGS="$DALI_TOOLKIT_CFLAGS -DDEBUG_ENABLED"
  fi
  
  if test "x$enable_debug" = "xno" -a "x$enable_exportall" = "xno"; then
    DALI_TOOLKIT_CFLAGS="$DALI_TOOLKIT_CFLAGS -fvisibility=hidden -DHIDE_DALI_INTERNALS"
-   DALI_SCRIPTV8_CFLAGS="$DALI_TOOLKIT_CFLAGS -fvisibility=hidden -DHIDE_DALI_INTERNALS"
  fi
  
- #set a variable for the makefile to conditionally compile the plugin
- AM_CONDITIONAL([ENABLE_JAVASCRIPT_PLUGIN], [test x$enable_javascript = xyes])
  
  
  # Tizen Profile options
  AC_ARG_ENABLE([profile],
-               [AC_HELP_STRING([--enable-profile=COMMON,MOBILE,LITE,WEARABLE,TV],
+               [AC_HELP_STRING([--enable-profile=COMMON,MOBILE,WEARABLE,TV],
                              [Select the variant of tizen])],
                [dali_profile=$enableval],
                [dali_profile=COMMON])
@@@ -86,11 -90,37 +90,37 @@@ els
    dataReadOnlyDir=${prefix}/share/dali/
  fi
  
+ # v8 version 4+ requires c++11
+ PKG_CHECK_MODULES(V8, v8 = 3.32.7, [ pkg_check_v8=yes ],  [ pkg_check_v8=no  ] )
+ # Rules for building JavaScript plugin
+ # If enable_javascript=yes and v8 installed = build javascript
+ # If enable_javascript=automatic and v8 installed = build javascript
+ # If enable_javascript=yes and v8 not installed = throw an error
+ build_javascript_plugin=no
+ if test x$enable_javascript = xyes; then
+   if test x$pkg_check_v8 = xno; then
+     [build_javascript_plugin=no]
+     AC_MSG_ERROR("V8 not found or incorrect version installed")
+     AC_MSG_NOTICE("To disable building of JavaScript plugin use --disable-javascript")
+   else
+     [build_javascript_plugin=yes]
+     AC_MSG_NOTICE(V8 library found. Building DALi JavaScript plugin)
+   fi
+ fi
+ if test x$enable_javascript = xautomatic && test x$pkg_check_v8 = xyes; then
+   [build_javascript_plugin=yes]
+   AC_MSG_NOTICE( V8 library found. Automatic building of JavaScript plugin. Use  use --disable-javascript to disable)
+ fi
+ #set a variable for the makefile to force compile the JAvaSplugin
+ AM_CONDITIONAL([ENABLE_JAVASCRIPT_PLUGIN], [test x$build_javascript_plugin = xyes])
  AC_SUBST(dataReadWriteDir)
  AC_SUBST(dataReadOnlyDir)
  AC_SUBST(DALI_TOOLKIT_CFLAGS)
- AC_SUBST(DALI_SCRIPTV8_CFLAGS)
- AC_SUBST(DALI_SCRIPTV8_LIBS)
  
  # Specify the include directory for development headers
  #devincludepath=${includedir}/dali/internal
@@@ -119,7 -149,7 +149,7 @@@ Configuratio
  -------------
    Prefix:                           $prefix
    Debug Build:                      $enable_debug
-   JavaScript support (V8 required)  $enable_javascript
+   JavaScript support (V8 required)  $build_javascript_plugin
    Profile:                          $dali_profile
    Data Dir (Read/Write):            $dataReadWriteDir
    Data Dir (Read Only):             $dataReadOnlyDir
@@@ -25,6 -25,7 +25,6 @@@
  #include <dali-toolkit/public-api/builder/tree-node.h>
  #include <dali-toolkit/public-api/controls/alignment/alignment.h>
  #include <dali-toolkit/public-api/controls/bloom-view/bloom-view.h>
 -#include <dali-toolkit/public-api/controls/bubble-effect/bubble-emitter.h>
  #include <dali-toolkit/public-api/controls/buttons/button.h>
  #include <dali-toolkit/public-api/controls/buttons/check-box-button.h>
  #include <dali-toolkit/public-api/controls/buttons/push-button.h>
@@@ -56,8 -57,6 +56,6 @@@
  #include <dali-toolkit/public-api/controls/scrollable/item-view/item-factory.h>
  #include <dali-toolkit/public-api/controls/scrollable/item-view/item-layout.h>
  #include <dali-toolkit/public-api/controls/scrollable/item-view/item-view.h>
- #include <dali-toolkit/public-api/controls/scrollable/item-view/navigation-layout.h>
- #include <dali-toolkit/public-api/controls/scrollable/item-view/roll-layout.h>
  #include <dali-toolkit/public-api/controls/scrollable/item-view/spiral-layout.h>
  #include <dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-carousel-effect.h>
  #include <dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-constraints.h>
@@@ -91,6 -90,7 +89,6 @@@
  #include <dali-toolkit/public-api/shader-effects/alpha-discard-effect.h>
  #include <dali-toolkit/public-api/shader-effects/bendy-effect.h>
  #include <dali-toolkit/public-api/shader-effects/blind-effect.h>
 -#include <dali-toolkit/public-api/shader-effects/bouncing-effect.h>
  #include <dali-toolkit/public-api/shader-effects/carousel-effect.h>
  #include <dali-toolkit/public-api/shader-effects/displacement-effect.h>
  #include <dali-toolkit/public-api/shader-effects/dissolve-local-effect.h>
  #include <dali-toolkit/public-api/shader-effects/spot-effect.h>
  #include <dali-toolkit/public-api/shader-effects/square-dissolve-effect.h>
  #include <dali-toolkit/public-api/shader-effects/water-effect.h>
 -#include <dali-toolkit/public-api/shader-effects/bubble-effect/bubble-effect.h>
 -#include <dali-toolkit/public-api/shader-effects/bubble-effect/color-adjuster.h>
  #include <dali-toolkit/public-api/shader-effects/dissolve-effect.h>
  #include <dali-toolkit/public-api/shader-effects/image-region-effect.h>
  #include <dali-toolkit/public-api/shader-effects/iris-effect.h>
@@@ -273,7 -273,7 +273,7 @@@ void Builder::SetProperties( const Tree
        // special field 'effect' references the shader effect instances
        if(key == "effect")
        {
 -        RenderableActor actor = RenderableActor::DownCast(handle);
 +        ImageActor actor = ImageActor::DownCast(handle);
          if( actor )
          {
            OptionalString str = constant.IsString( keyChild.second );
  
        if( Property::INVALID_INDEX == index )
        {
 -        RenderableActor actor = RenderableActor::DownCast(handle);
 +        ImageActor actor = ImageActor::DownCast(handle);
          if( actor )
          {
            if( ShaderEffect effect = actor.GetShaderEffect() )
@@@ -529,6 -529,9 +529,9 @@@ BaseHandle Builder::DoCreate( const Tre
  
        if( actor )
        {
+         // TEMP: Assume all script created actors are not using size negotiation for now
+         actor.SetRelayoutEnabled( false );
          // add children of all the styles
          if( OptionalChild actors = IsChild( node, KEYNAME_ACTORS ) )
          {
@@@ -770,7 -773,7 +773,7 @@@ Path Builder::GetPath( const std::strin
            if( SetPropertyFromNode( *pointsProperty, Property::ARRAY, points ) )
            {
              ret = Path::New();
-             ret.SetProperty( Path::Property::Points, points);
+             ret.SetProperty( Path::Property::POINTS, points);
  
              //control-points property
              if( OptionalChild pointsProperty = IsChild( *path, "control-points") )
                Dali::Property::Value points(Property::ARRAY);
                if( SetPropertyFromNode( *pointsProperty, Property::ARRAY, points ) )
                {
-                 ret.SetProperty( Path::Property::ControlPoints, points);
+                 ret.SetProperty( Path::Property::CONTROL_POINTS, points);
                }
              }
              else
  #include <dali/public-api/events/mouse-wheel-event.h>
  #include <dali/public-api/events/touch-event.h>
  #include <dali/public-api/object/type-registry.h>
+ #include <dali/public-api/object/type-registry-helper.h>
  
  // INTERNAL INCLUDES
  #include <dali-toolkit/public-api/controls/scrollable/item-view/item-factory.h>
 -#include <dali-toolkit/internal/controls/scrollable/bouncing-effect-actor.h>
  #include <dali-toolkit/internal/controls/scrollable/scroll-connector-impl.h>
  
  using std::string;
  using std::set;
  using namespace Dali;
  
- namespace // unnamed namespace
+ namespace // Unnamed namespace
  {
  
  //Type registration
- TypeRegistration mType( typeid(Toolkit::ItemView), typeid(Toolkit::Scrollable), NULL );
+ DALI_TYPE_REGISTRATION_BEGIN( Toolkit::ItemView, Toolkit::Scrollable, NULL )
+ DALI_TYPE_REGISTRATION_END()
  
  const float DEFAULT_MINIMUM_SWIPE_SPEED = 1.0f;
  const float DEFAULT_MINIMUM_SWIPE_DISTANCE = 3.0f;
@@@ -122,8 -126,7 +125,7 @@@ struct OvershootOverlayRotationConstrai
      const float parentOvershoot = parentOvershootProperty.GetFloat();
      const Toolkit::ControlOrientation::Type& parentOrientation = static_cast<Toolkit::ControlOrientation::Type>(parentScrollDirection.z);
  
-     Quaternion rotation;
+     float multiplier = 0;
      if(Toolkit::IsVertical(parentOrientation))
      {
        if(fabsf(parentScrollDirection.y) <= Math::MACHINE_EPSILON_1)
          if( (parentOrientation == Toolkit::ControlOrientation::Up && parentOvershoot < Math::MACHINE_EPSILON_0)
              || (parentOrientation == Toolkit::ControlOrientation::Down && parentOvershoot > Math::MACHINE_EPSILON_0) )
          {
-           rotation = Quaternion(0.5f * Math::PI, Vector3::ZAXIS);
+           multiplier = 0.5f;
          }
          else
          {
-           rotation = Quaternion(1.5f * Math::PI, Vector3::ZAXIS);
+           multiplier = 1.5f;
          }
        }
        else if( (parentOvershoot > Math::MACHINE_EPSILON_0 && parentScrollDirection.y > Math::MACHINE_EPSILON_0)
              || (parentOvershoot < Math::MACHINE_EPSILON_0 && parentScrollDirection.y < Math::MACHINE_EPSILON_0) )
        {
-         rotation = Quaternion(0.0f, Vector3::ZAXIS);
+         multiplier = 0.0f;
        }
        else
        {
-         rotation = Quaternion(Math::PI, Vector3::ZAXIS);
+         multiplier = 1.0f;
        }
      }
      else
          if( (parentOrientation == Toolkit::ControlOrientation::Left && parentOvershoot > Math::MACHINE_EPSILON_0)
              ||(parentOrientation == Toolkit::ControlOrientation::Right && parentOvershoot < Math::MACHINE_EPSILON_0) )
          {
-           rotation = Quaternion(Math::PI, Vector3::ZAXIS);
+           multiplier = 1.0f;
          }
          else
          {
-           rotation = Quaternion(0.0f, Vector3::ZAXIS);
+           multiplier = 0.0f;
          }
        }
        else if( (parentOvershoot > Math::MACHINE_EPSILON_0 && parentScrollDirection.x > Math::MACHINE_EPSILON_0)
              || (parentOvershoot < Math::MACHINE_EPSILON_0 && parentScrollDirection.x < Math::MACHINE_EPSILON_0) )
        {
-         rotation = Quaternion(1.5f * Math::PI, Vector3::ZAXIS);
+         multiplier = 1.5f;
        }
        else
        {
-         rotation = Quaternion(0.5f * Math::PI, Vector3::ZAXIS);
+         multiplier = 0.5f;
        }
      }
  
+     Quaternion rotation( Radian( multiplier * Math::PI ), Vector3::ZAXIS );
      return rotation;
    }
  };
@@@ -357,12 -362,13 +361,13 @@@ ItemView::ItemView(ItemFactory& factory
  
  void ItemView::OnInitialize()
  {
-   SetSizePolicy( Toolkit::Control::Fixed, Toolkit::Control::Fixed );
    RegisterCommonProperties();
  
    Actor self = Self();
  
+   // Disable size negotiation for item views
+   self.SetRelayoutEnabled( false );
    mScrollConnector = Dali::Toolkit::ScrollConnector::New();
    mScrollPositionObject = mScrollConnector.GetScrollPositionObject();
    mScrollConnector.ScrollPositionChangedSignal().Connect( this, &ItemView::OnScrollPositionChanged );
                                                     LocalSource(mPropertyPosition),
                                                     LocalSource(mPropertyPositionMin),
                                                     LocalSource(mPropertyPositionMax),
-                                                    LocalSource(Actor::Property::Size),
+                                                    LocalSource(Actor::Property::SIZE),
                                                     RelativePositionConstraint);
    self.ApplyConstraint(constraint);
  
@@@ -455,7 -461,6 +460,6 @@@ void ItemView::ActivateLayout(unsigned 
  
    // Move the items to the new layout positions...
  
-   bool resizeAnimationNeeded(false);
    for (ConstItemPoolIter iter = mItemPool.begin(); iter != mItemPool.end(); ++iter)
    {
      unsigned int itemId = iter->first;
      Vector3 size;
      if(mActiveLayout->GetItemSize(itemId, targetSize, size))
      {
-       if( durationSeconds > 0.0f )
-       {
-         // Use a size animation
-         if (!resizeAnimationNeeded)
-         {
-           resizeAnimationNeeded = true;
-           RemoveAnimation(mResizeAnimation);
-           mResizeAnimation = Animation::New(durationSeconds);
-         }
-         // The layout provides its own resize animation
-         mActiveLayout->GetResizeAnimation(mResizeAnimation, actor, size, durationSeconds);
-       }
-       else
-       {
-         // resize immediately
-         actor.SetSize(size);
-       }
+       // resize immediately
+       actor.SetResizePolicy( FIXED, ALL_DIMENSIONS );
+       actor.SetPreferredSize( size.GetVectorXY() );
      }
  
      mActiveLayout->ApplyConstraints(actor, itemId, durationSeconds, mScrollPositionObject, Self() );
    }
  
-   if (resizeAnimationNeeded)
-   {
-     mResizeAnimation.Play();
-   }
    // Refresh the new layout
    ItemRange range = GetItemRange(*mActiveLayout, targetSize, GetCurrentLayoutPosition(0), false/* don't reserve extra*/);
    AddActorsWithinRange( range, durationSeconds );
@@@ -565,6 -550,17 +549,17 @@@ void ItemView::OnRefreshNotification(Pr
    }
  }
  
+ void ItemView::Refresh()
+ {
+   for (ItemPoolIter iter = mItemPool.begin(); iter != mItemPool.end(); ++iter )
+   {
+     ReleaseActor( iter->first, iter->second );
+   }
+   mItemPool.clear();
+   DoRefresh(GetCurrentLayoutPosition(0), true);
+ }
  void ItemView::DoRefresh(float currentLayoutPosition, bool cacheExtra)
  {
    if (mActiveLayout)
@@@ -1000,7 -996,8 +995,8 @@@ void ItemView::SetupActor( Item item, f
      Vector3 size;
      if( mActiveLayout->GetItemSize( item.first, mActiveLayoutTargetSize, size ) )
      {
-       item.second.SetSize( size );
+       item.second.SetResizePolicy( FIXED, ALL_DIMENSIONS );
+       item.second.SetPreferredSize( size.GetVectorXY() );
      }
  
      mActiveLayout->ApplyConstraints( item.second, item.first, durationSeconds, mScrollPositionObject, Self() );
@@@ -1561,29 -1558,35 +1557,29 @@@ void ItemView::SetOvershootEnabled( boo
    if( enable )
    {
      Property::Index effectOvershootPropertyIndex = Property::INVALID_INDEX;
 -    mOvershootOverlay = CreateBouncingEffectActor( effectOvershootPropertyIndex );
 -    mOvershootOverlay.SetColor(mOvershootEffectColor);
 -    mOvershootOverlay.SetParentOrigin(ParentOrigin::TOP_LEFT);
 -    mOvershootOverlay.SetAnchorPoint(AnchorPoint::TOP_LEFT);
 -    mOvershootOverlay.SetDrawMode(DrawMode::OVERLAY);
 -    self.Add(mOvershootOverlay);
  
-     Constraint constraint = Constraint::New<Vector3>( Actor::Property::Size,
+     Constraint constraint = Constraint::New<Vector3>( Actor::Property::SIZE,
                                                        ParentSource( mPropertyScrollDirection ),
                                                        Source( mScrollPositionObject, ScrollConnector::OVERSHOOT ),
-                                                       ParentSource( Actor::Property::Size ),
+                                                       ParentSource( Actor::Property::SIZE ),
                                                        OvershootOverlaySizeConstraint() );
      mOvershootOverlay.ApplyConstraint(constraint);
      mOvershootOverlay.SetSize(OVERSHOOT_BOUNCE_ACTOR_DEFAULT_SIZE.width, OVERSHOOT_BOUNCE_ACTOR_DEFAULT_SIZE.height);
  
-     constraint = Constraint::New<Quaternion>( Actor::Property::Rotation,
+     constraint = Constraint::New<Quaternion>( Actor::Property::ORIENTATION,
                                                ParentSource( mPropertyScrollDirection ),
                                                Source( mScrollPositionObject, ScrollConnector::OVERSHOOT ),
                                                OvershootOverlayRotationConstraint() );
      mOvershootOverlay.ApplyConstraint(constraint);
  
-     constraint = Constraint::New<Vector3>( Actor::Property::Position,
-                                            ParentSource( Actor::Property::Size ),
+     constraint = Constraint::New<Vector3>( Actor::Property::POSITION,
+                                            ParentSource( Actor::Property::SIZE ),
                                             ParentSource( mPropertyScrollDirection ),
                                             Source( mScrollPositionObject, ScrollConnector::OVERSHOOT ),
                                             OvershootOverlayPositionConstraint() );
      mOvershootOverlay.ApplyConstraint(constraint);
  
-     constraint = Constraint::New<bool>( Actor::Property::Visible,
+     constraint = Constraint::New<bool>( Actor::Property::VISIBLE,
                                          ParentSource( mPropertyCanScrollVertical ),
                                          OvershootOverlayVisibilityConstraint() );
      mOvershootOverlay.ApplyConstraint(constraint);
@@@ -439,7 -439,7 +439,7 @@@ void Decorator::DrawCursor(const std::s
    {
      DALI_ASSERT_DEBUG( ( 0 <= cursorPosition-1 ) && ( cursorPosition-1 < mTextViewCharacterPositioning.StyledTextSize() ) );
      const TextStyle styleAtCursor = mTextViewCharacterPositioning.GetStyleAt( cursorPosition-1 );
-     mCursor.SetRotation( styleAtCursor.IsItalicsEnabled() ? Degree( styleAtCursor.GetItalicsAngle() - CURSOR_ANGLE_OFFSET ) : Degree( 0.f ), Vector3::ZAXIS );
+     mCursor.SetOrientation( styleAtCursor.IsItalicsEnabled() ? Degree( styleAtCursor.GetItalicsAngle() - CURSOR_ANGLE_OFFSET ) : Degree( 0.f ), Vector3::ZAXIS );
    }
  
    DALI_ASSERT_DEBUG( cursorPosition <= mTextViewCharacterPositioning.GetNumberOfCharactersInText() );
@@@ -580,14 -580,30 +580,14 @@@ void Decorator::CreateHighlight( Actor 
  {
    DALI_ASSERT_DEBUG( parent && "Highlight target parent does not exist" );
  
 -  if ( !mHighlightMeshActor )
 -  {
 -    mHighlightMeshActor = MeshActor::New( mTextHighlight.CreateHighLightMesh() );
 -    mHighlightMeshActor.SetName( "HighlightMeshActor" );
 -    parent.Add( mHighlightMeshActor );
 -  }
  }
  
  void Decorator::RemoveHighlight()
  {
 -  if ( mHighlightMeshActor )
 -  {
 -    mHighlightMeshActor.Unparent();
 -    mHighlightMeshActor.Reset();
 -    // NOTE: We cannot dereference mHighlightMesh, due to a how the scene-graph MeshRenderer uses the Mesh data.
 -  }
  }
  
  void Decorator::HighlightVisibility( bool visiblility )
  {
 -  if ( mHighlightMeshActor )
 -  {
 -    mHighlightMeshActor.SetVisible( visiblility );
 -  }
  }
  
  /**
@@@ -654,37 -670,37 +654,37 @@@ void Decorator::SetUpHandlePropertyNoti
    Actor selectionHandleTwo = mTextInputHandles.GetSelectionHandleTwo();
  
    // Exceeding horizontal boundary
-   PropertyNotification leftNotification = selectionHandleOne.AddPropertyNotification( Actor::Property::WorldPositionX, LessThanCondition( mBoundingRectangleWorldCoordinates.x + handlesize.x) );
+   PropertyNotification leftNotification = selectionHandleOne.AddPropertyNotification( Actor::Property::WORLD_POSITION_X, LessThanCondition( mBoundingRectangleWorldCoordinates.x + handlesize.x) );
    leftNotification.NotifySignal().Connect( this, &Decorator::OnLeftBoundaryExceeded );
  
-   PropertyNotification rightNotification = selectionHandleTwo.AddPropertyNotification( Actor::Property::WorldPositionX, GreaterThanCondition( mBoundingRectangleWorldCoordinates.z - handlesize.x ) );
+   PropertyNotification rightNotification = selectionHandleTwo.AddPropertyNotification( Actor::Property::WORLD_POSITION_X, GreaterThanCondition( mBoundingRectangleWorldCoordinates.z - handlesize.x ) );
    rightNotification.NotifySignal().Connect( this, &Decorator::OnRightBoundaryExceeded );
  
    // Within horizontal boundary
-   PropertyNotification leftLeaveNotification = selectionHandleOne.AddPropertyNotification( Actor::Property::WorldPositionX, GreaterThanCondition( mBoundingRectangleWorldCoordinates.x + 2*handlesize.x ) );
+   PropertyNotification leftLeaveNotification = selectionHandleOne.AddPropertyNotification( Actor::Property::WORLD_POSITION_X, GreaterThanCondition( mBoundingRectangleWorldCoordinates.x + 2*handlesize.x ) );
    leftLeaveNotification.NotifySignal().Connect( this, &Decorator::OnReturnToLeftBoundary );
  
-   PropertyNotification rightLeaveNotification = selectionHandleTwo.AddPropertyNotification( Actor::Property::WorldPositionX, LessThanCondition( mBoundingRectangleWorldCoordinates.z - 2*handlesize.x ) );
+   PropertyNotification rightLeaveNotification = selectionHandleTwo.AddPropertyNotification( Actor::Property::WORLD_POSITION_X, LessThanCondition( mBoundingRectangleWorldCoordinates.z - 2*handlesize.x ) );
    rightLeaveNotification.NotifySignal().Connect( this, &Decorator::OnReturnToRightBoundary );
  
    // Exceeding vertical boundary
-   PropertyNotification verticalExceedNotificationOne = selectionHandleOne.AddPropertyNotification( Actor::Property::WorldPositionY,
+   PropertyNotification verticalExceedNotificationOne = selectionHandleOne.AddPropertyNotification( Actor::Property::WORLD_POSITION_Y,
                                                         OutsideCondition( mBoundingRectangleWorldCoordinates.y + handlesize.y,
                                                                           mBoundingRectangleWorldCoordinates.w - handlesize.y ) );
    verticalExceedNotificationOne.NotifySignal().Connect( this, &Decorator::OnHandleOneLeavesBoundary );
  
-   PropertyNotification verticalExceedNotificationTwo = selectionHandleTwo.AddPropertyNotification( Actor::Property::WorldPositionY,
+   PropertyNotification verticalExceedNotificationTwo = selectionHandleTwo.AddPropertyNotification( Actor::Property::WORLD_POSITION_Y,
                                                         OutsideCondition( mBoundingRectangleWorldCoordinates.y + handlesize.y,
                                                                           mBoundingRectangleWorldCoordinates.w - handlesize.y ) );
    verticalExceedNotificationTwo.NotifySignal().Connect( this, &Decorator::OnHandleTwoLeavesBoundary );
  
    // Within vertical boundary
-   PropertyNotification verticalWithinNotificationOne = selectionHandleOne.AddPropertyNotification( Actor::Property::WorldPositionY,
+   PropertyNotification verticalWithinNotificationOne = selectionHandleOne.AddPropertyNotification( Actor::Property::WORLD_POSITION_Y,
                                                         InsideCondition( mBoundingRectangleWorldCoordinates.y + handlesize.y,
                                                                          mBoundingRectangleWorldCoordinates.w - handlesize.y ) );
    verticalWithinNotificationOne.NotifySignal().Connect( this, &Decorator::OnHandleOneWithinBoundary );
  
-   PropertyNotification verticalWithinNotificationTwo = selectionHandleTwo.AddPropertyNotification( Actor::Property::WorldPositionY,
+   PropertyNotification verticalWithinNotificationTwo = selectionHandleTwo.AddPropertyNotification( Actor::Property::WORLD_POSITION_Y,
                                                         InsideCondition( mBoundingRectangleWorldCoordinates.y + handlesize.y,
                                                                          mBoundingRectangleWorldCoordinates.w - handlesize.y ) );
    verticalWithinNotificationTwo.NotifySignal().Connect( this, &Decorator::OnHandleTwoWithinBoundary );
@@@ -774,6 -790,11 +774,6 @@@ void Decorator::ShowPopUp(
  
    DALI_ASSERT_DEBUG( mPopUpTarget && "PopUp Target Actor does not exist" );
  
 -  if( mHighlightMeshActor ) // Text Selection mode
 -  {
 -    position = PositionOfPopUpRelativeToSelectionHandles();
 -  }
 -  else // Not in Text Selection mode so position relative to cursor.
    {
      position = PositionOfPopUpRelativeToCursor();
    }
@@@ -797,7 -818,7 +797,7 @@@ void Decorator::ShowPopupCutCopyPaste(
  {
    bool isAllTextSelectedAlready = ( mTextViewCharacterPositioning.StyledTextSize() == GetSelectedText().size() );
    bool isTextEmpty = mTextViewCharacterPositioning.IsStyledTextEmpty() ;
 -  bool isSubsetOfTextAlreadySelected = ( !isAllTextSelectedAlready ) && mHighlightMeshActor;
 +  bool isSubsetOfTextAlreadySelected = ( !isAllTextSelectedAlready ) &&false;
  
    Clipboard clipboard = Clipboard::Get();
    bool hasClipboardGotContent = clipboard.NumberOfItems();
@@@ -824,6 -845,11 +824,6 @@@ void Decorator::PopUpLeavesVerticalBoun
  {
    Vector3 position, alternativePosition;
  
 -  if( mHighlightMeshActor ) // Text Selection mode
 -  {
 -    alternativePosition = AlternatePopUpPositionRelativeToSelectionHandles();
 -  }
 -  else // Not in Text Selection mode
    {
      alternativePosition = AlternatePopUpPositionRelativeToCursor();
      // if can't be positioned above, then position below row.
@@@ -837,7 -863,7 +837,7 @@@ void Decorator::SetUpPopUpPositionNotif
    // Note Property notifications ignore any set anchor point so conditions must allow for this.  Default is Top Left.
  
    // Exceeding vertical boundary
-   PropertyNotification verticalExceedNotificationOne = mPopUpPanel.Self().AddPropertyNotification( Actor::Property::WorldPositionY,
+   PropertyNotification verticalExceedNotificationOne = mPopUpPanel.Self().AddPropertyNotification( Actor::Property::WORLD_POSITION_Y,
                                                         OutsideCondition( mBoundingRectangleWorldCoordinates.y + mPopUpPanel.GetSize().y/2,
                                                                           mBoundingRectangleWorldCoordinates.w - mPopUpPanel.GetSize().y/2 ) );
    verticalExceedNotificationOne.NotifySignal().Connect( this, &Decorator::PopUpLeavesVerticalBoundary );
@@@ -921,6 -947,11 +921,6 @@@ void Decorator::TextViewScrolled( Toolk
      PositionSelectionHandle( selectionHandleOne, mSelectionHandleOneActualPosition, mSelectionHandleOnePosition );
      PositionSelectionHandle( selectionHandleTwo, mSelectionHandleTwoActualPosition, mSelectionHandleTwoPosition );
  
 -    if( mHighlightMeshActor )
 -    {
 -      mHighlightMeshActor.SetVisible( true );
 -      ShowUpdatedHighlight();
 -    }
    }
  }
  
@@@ -1030,6 -1061,17 +1030,6 @@@ MarkupProcessor::StyledTextArray Decora
  {
    MarkupProcessor::StyledTextArray currentSelectedText;
  
 -  if ( mHighlightMeshActor ) // Text Selected
 -  {
 -    MarkupProcessor::StyledTextArray::iterator it = mTextViewCharacterPositioning.GetStyledTextArray().begin() + std::min(mSelectionHandleOnePosition, mSelectionHandleTwoPosition);
 -    MarkupProcessor::StyledTextArray::iterator end = mTextViewCharacterPositioning.GetStyledTextArray().begin() + std::max(mSelectionHandleOnePosition, mSelectionHandleTwoPosition);
 -
 -    for(; it != end; ++it)
 -    {
 -      MarkupProcessor::StyledText& styledText( *it );
 -      currentSelectedText.push_back( styledText );
 -    }
 -  }
    return currentSelectedText;
  }
  
@@@ -28,7 -28,9 +28,9 @@@
  #include <dali/public-api/events/key-event.h>
  #include <dali/public-api/events/touch-event.h>
  #include <dali/public-api/object/type-registry.h>
+ #include <dali/public-api/object/type-registry-helper.h>
  #include <dali/public-api/object/property-notification.h>
+ #include <dali/public-api/size-negotiation/relayout-container.h>
  #include <dali/integration-api/debug.h>
  #include <dali/public-api/images/resource-image.h>
  
@@@ -70,13 -72,13 +72,13 @@@ const float UI_Z_OFFSET( 0.2f )
  const Vector3 UI_OFFSET(0.0f, 0.0f, UI_Z_OFFSET);                           ///< Text Selection Handles/Cursor offset.
  const Vector3 DEFAULT_HANDLE_ONE_OFFSET(0.0f, -5.0f, 0.0f);                 ///< Handle One's Offset
  const Vector3 DEFAULT_HANDLE_TWO_OFFSET(0.0f, -5.0f, 0.0f);                 ///< Handle Two's Offset
- const float TOP_HANDLE_TOP_OFFSET( 34.0f);                                   ///< Offset between top handle and cutCopyPaste pop-up
- const float BOTTOM_HANDLE_BOTTOM_OFFSET(34.0f);                              ///< Offset between bottom handle and cutCopyPaste pop-up
+ const float TOP_HANDLE_TOP_OFFSET( 34.0f);                                  ///< Offset between top handle and cutCopyPaste pop-up
+ const float BOTTOM_HANDLE_BOTTOM_OFFSET(34.0f);                             ///< Offset between bottom handle and cutCopyPaste pop-up
  const float CURSOR_THICKNESS(4.0f);
  const Degree CURSOR_ANGLE_OFFSET(2.0f);                                     ///< Offset from the angle of italic angle.
  const Vector4 DEFAULT_CURSOR_COLOR(1.0f, 1.0f, 1.0f, 1.0f);
  
- const std::string NEWLINE( "\n" );
+ const char* const NEWLINE = "\n";
  
  const TextStyle DEFAULT_TEXT_STYLE;
  
@@@ -173,73 -175,48 +175,48 @@@ namespace Dal
  
  namespace Toolkit
  {
- // Properties
- const Property::Index TextInput::HIGHLIGHT_COLOR_PROPERTY                     = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX;
- const Property::Index TextInput::CUT_AND_PASTE_COLOR_PROPERTY                 = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+1;
- const Property::Index TextInput::CUT_AND_PASTE_PRESSED_COLOR_PROPERTY         = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+2;
- const Property::Index TextInput::CUT_AND_PASTE_BORDER_COLOR_PROPERTY          = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+3;
- const Property::Index TextInput::CUT_AND_PASTE_ICON_COLOR_PROPERTY            = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+4;
- const Property::Index TextInput::CUT_AND_PASTE_ICON_PRESSED_COLOR_PROPERTY    = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+5;
- const Property::Index TextInput::CUT_AND_PASTE_TEXT_COLOR_PROPERTY            = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+6;
- const Property::Index TextInput::CUT_AND_PASTE_TEXT_PRESSED_COLOR_PROPERTY    = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+7;
- const Property::Index TextInput::CUT_BUTTON_POSITION_PRIORITY_PROPERTY        = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+8;
- const Property::Index TextInput::COPY_BUTTON_POSITION_PRIORITY_PROPERTY       = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+9;
- const Property::Index TextInput::PASTE_BUTTON_POSITION_PRIORITY_PROPERTY      = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+10;
- const Property::Index TextInput::SELECT_BUTTON_POSITION_PRIORITY_PROPERTY     = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+11;
- const Property::Index TextInput::SELECT_ALL_BUTTON_POSITION_PRIORITY_PROPERTY = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+12;
- const Property::Index TextInput::CLIPBOARD_BUTTON_POSITION_PRIORITY_PROPERTY  = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+13;
- const Property::Index TextInput::POP_UP_OFFSET_FROM_TEXT_PROPERTY             = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+14;
- const Property::Index TextInput::CURSOR_COLOR_PROPERTY                        = Internal::TextInput::TEXTINPUT_PROPERTY_START_INDEX+15;
  
  namespace Internal
  {
  
- namespace
+ namespace // Unnamed namespace
  {
  
- // Signals
- const char* const SIGNAL_START_INPUT =                  "start-input";
- const char* const SIGNAL_END_INPUT =                    "end-input";
- const char* const SIGNAL_STYLE_CHANGED =                "style-changed";
- const char* const SIGNAL_MAX_INPUT_CHARACTERS_REACHED = "max-input-characters-reached";
- const char* const SIGNAL_TOOLBAR_DISPLAYED =            "toolbar-displayed";
- const char* const SIGNAL_TEXT_EXCEED_BOUNDARIES =       "text-exceed-boundaries";
  BaseHandle Create()
  {
    return Toolkit::TextInput::New();
  }
  
- TypeRegistration typeRegistration( typeid( Toolkit::TextInput ), typeid( Toolkit::Control ), Create );
+ // Setup properties, signals and actions using the type-registry.
+ DALI_TYPE_REGISTRATION_BEGIN( Toolkit::TextInput, Toolkit::Control, Create )
  
- SignalConnectorType signalConnector1( typeRegistration, SIGNAL_START_INPUT,                  &TextInput::DoConnectSignal );
- SignalConnectorType signalConnector2( typeRegistration, SIGNAL_END_INPUT,                    &TextInput::DoConnectSignal );
- SignalConnectorType signalConnector3( typeRegistration, SIGNAL_STYLE_CHANGED,                &TextInput::DoConnectSignal );
- SignalConnectorType signalConnector4( typeRegistration, SIGNAL_MAX_INPUT_CHARACTERS_REACHED, &TextInput::DoConnectSignal );
- SignalConnectorType signalConnector5( typeRegistration, SIGNAL_TOOLBAR_DISPLAYED,            &TextInput::DoConnectSignal );
- SignalConnectorType signalConnector6( typeRegistration, SIGNAL_TEXT_EXCEED_BOUNDARIES,       &TextInput::DoConnectSignal );
+ DALI_PROPERTY_REGISTRATION( TextInput, "highlight-color",                     VECTOR4,          HIGHLIGHT_COLOR                     )
+ DALI_PROPERTY_REGISTRATION( TextInput, "cut-and-paste-bg-color",              VECTOR4,          CUT_AND_PASTE_COLOR                 )
+ DALI_PROPERTY_REGISTRATION( TextInput, "cut-and-paste-pressed-color",         VECTOR4,          CUT_AND_PASTE_PRESSED_COLOR         )
+ DALI_PROPERTY_REGISTRATION( TextInput, "cut-and-paste-border-color",          VECTOR4,          CUT_AND_PASTE_BORDER_COLOR          )
+ DALI_PROPERTY_REGISTRATION( TextInput, "cut-and-paste-icon-color",            VECTOR4,          CUT_AND_PASTE_ICON_COLOR            )
+ DALI_PROPERTY_REGISTRATION( TextInput, "cut-and-paste-icon-pressed-color",    VECTOR4,          CUT_AND_PASTE_ICON_PRESSED_COLOR    )
+ DALI_PROPERTY_REGISTRATION( TextInput, "cut-and-paste-text-color",            VECTOR4,          CUT_AND_PASTE_TEXT_COLOR            )
+ DALI_PROPERTY_REGISTRATION( TextInput, "cut-and-paste-text-pressed-color",    VECTOR4,          CUT_AND_PASTE_TEXT_PRESSED_COLOR    )
+ DALI_PROPERTY_REGISTRATION( TextInput, "cut-button-position-priority",        UNSIGNED_INTEGER, CUT_BUTTON_POSITION_PRIORITY        )
+ DALI_PROPERTY_REGISTRATION( TextInput, "copy-button-position-priority",       UNSIGNED_INTEGER, COPY_BUTTON_POSITION_PRIORITY       )
+ DALI_PROPERTY_REGISTRATION( TextInput, "paste-button-position-priority",      UNSIGNED_INTEGER, PASTE_BUTTON_POSITION_PRIORITY      )
+ DALI_PROPERTY_REGISTRATION( TextInput, "select-button-position-priority",     UNSIGNED_INTEGER, SELECT_BUTTON_POSITION_PRIORITY     )
+ DALI_PROPERTY_REGISTRATION( TextInput, "select-all-button-position-priority", UNSIGNED_INTEGER, SELECT_ALL_BUTTON_POSITION_PRIORITY )
+ DALI_PROPERTY_REGISTRATION( TextInput, "clipboard-button-position-priority",  UNSIGNED_INTEGER, CLIPBOARD_BUTTON_POSITION_PRIORITY  )
+ DALI_PROPERTY_REGISTRATION( TextInput, "popup-offset-from-text",              VECTOR4,          POP_UP_OFFSET_FROM_TEXT             )
+ DALI_PROPERTY_REGISTRATION( TextInput, "cursor-color",                        VECTOR4,          CURSOR_COLOR                        )
  
- }
+ DALI_SIGNAL_REGISTRATION(   TextInput, "start-input",                                           SIGNAL_START_INPUT                  )
+ DALI_SIGNAL_REGISTRATION(   TextInput, "end-input",                                             SIGNAL_END_INPUT                    )
+ DALI_SIGNAL_REGISTRATION(   TextInput, "style-changed",                                         SIGNAL_STYLE_CHANGED                )
+ DALI_SIGNAL_REGISTRATION(   TextInput, "max-input-characters-reached",                          SIGNAL_MAX_INPUT_CHARACTERS_REACHED )
+ DALI_SIGNAL_REGISTRATION(   TextInput, "toolbar-displayed",                                     SIGNAL_TOOLBAR_DISPLAYED            )
+ DALI_SIGNAL_REGISTRATION(   TextInput, "text-exceed-boundaries",                                SIGNAL_TEXT_EXCEED_BOUNDARIES       )
  
- PropertyRegistration property1( typeRegistration, "highlight-color",  Toolkit::TextInput::HIGHLIGHT_COLOR_PROPERTY, Property::VECTOR4, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property2( typeRegistration, "cut-and-paste-bg-color",  Toolkit::TextInput::CUT_AND_PASTE_COLOR_PROPERTY, Property::VECTOR4, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property3( typeRegistration, "cut-and-paste-pressed-color",  Toolkit::TextInput::CUT_AND_PASTE_PRESSED_COLOR_PROPERTY, Property::VECTOR4, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property4( typeRegistration, "cut-and-paste-icon-color",  Toolkit::TextInput::CUT_AND_PASTE_ICON_COLOR_PROPERTY, Property::VECTOR4, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property5( typeRegistration, "cut-and-paste-icon-pressed-color",  Toolkit::TextInput::CUT_AND_PASTE_ICON_PRESSED_COLOR_PROPERTY, Property::VECTOR4, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property6( typeRegistration, "cut-and-paste-text-color",  Toolkit::TextInput::CUT_AND_PASTE_TEXT_COLOR_PROPERTY, Property::VECTOR4, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property7( typeRegistration, "cut-and-paste-text-pressed-color",  Toolkit::TextInput::CUT_AND_PASTE_TEXT_PRESSED_COLOR_PROPERTY, Property::VECTOR4, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property8( typeRegistration, "cut-and-paste-border-color",  Toolkit::TextInput::CUT_AND_PASTE_BORDER_COLOR_PROPERTY, Property::VECTOR4, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property9( typeRegistration, "cut-button-position-priority",  Toolkit::TextInput::CUT_BUTTON_POSITION_PRIORITY_PROPERTY, Property::UNSIGNED_INTEGER, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property10( typeRegistration, "copy-button-position-priority",  Toolkit::TextInput::COPY_BUTTON_POSITION_PRIORITY_PROPERTY, Property::UNSIGNED_INTEGER, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property11( typeRegistration, "paste-button-position-priority",  Toolkit::TextInput::PASTE_BUTTON_POSITION_PRIORITY_PROPERTY, Property::UNSIGNED_INTEGER, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property12( typeRegistration, "select-button-position-priority",  Toolkit::TextInput::SELECT_BUTTON_POSITION_PRIORITY_PROPERTY, Property::UNSIGNED_INTEGER, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property13( typeRegistration, "select-all-button-position-priority",  Toolkit::TextInput::SELECT_ALL_BUTTON_POSITION_PRIORITY_PROPERTY, Property::UNSIGNED_INTEGER, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property14( typeRegistration, "clipboard-button-position-priority",  Toolkit::TextInput::CLIPBOARD_BUTTON_POSITION_PRIORITY_PROPERTY, Property::UNSIGNED_INTEGER, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property15( typeRegistration, "popup-offset-from-text", Toolkit::TextInput::POP_UP_OFFSET_FROM_TEXT_PROPERTY, Property::VECTOR4, &TextInput::SetProperty, &TextInput::GetProperty );
- PropertyRegistration property16( typeRegistration, "cursor-color", Toolkit::TextInput::CURSOR_COLOR_PROPERTY, Property::VECTOR4, &TextInput::SetProperty, &TextInput::GetProperty );
+ DALI_TYPE_REGISTRATION_END()
  
+ }
  
  // [TextInput::HighlightInfo] /////////////////////////////////////////////////
  
@@@ -534,6 -511,11 +511,6 @@@ std::size_t TextInput::GetNumberOfChara
  void TextInput::SetMaterialDiffuseColor( const Vector4& color )
  {
    mMaterialColor = color;
 -  if ( mCustomMaterial )
 -  {
 -    mCustomMaterial.SetDiffuseColor( mMaterialColor );
 -    mMeshData.SetMaterial( mCustomMaterial );
 -  }
  }
  
  const Vector4& TextInput::GetMaterialDiffuseColor() const
@@@ -692,7 -674,7 +669,7 @@@ bool TextInput::IsTextSelectable() cons
  
  bool TextInput::IsTextSelected() const
  {
 -  return mHighlightMeshActor;
 +  return false;
  }
  
  void TextInput::DeSelectText()
@@@ -1175,10 -1157,10 +1152,10 @@@ void TextInput::OnControlSizeSet(const 
    mActiveLayer.SetSize(targetSize);
  }
  
- void TextInput::OnRelayout( const Vector2& size, ActorSizeContainer& container )
+ void TextInput::OnRelayout( const Vector2& size, RelayoutContainer& container )
  {
-   Relayout( mDisplayedTextView, size, container );
-   Relayout( mPopupPanel.GetRootActor(), size, container );
+   container.Add( mDisplayedTextView, size );
+   container.Add( mPopupPanel.GetRootActor(), size );
  
    GetTextLayoutInfo();
  
@@@ -1532,6 -1514,10 +1509,6 @@@ void TextInput::OnLongPress(Dali::Acto
    DALI_LOG_INFO( gLogFilter, Debug::General, "OnLongPress\n" );
  
    // Ignore longpress if in selection mode already
 -  if( mHighlightMeshActor )
 -  {
 -    return;
 -  }
  
    if(longPress.state == Dali::Gesture::Started)
    {
@@@ -1699,6 -1685,10 +1676,6 @@@ void TextInput::OnPopupHideFinished(Tex
    popup.HideFinishedSignal().Disconnect( this, &TextInput::OnPopupHideFinished );
  
    // Change Popup menu to Cut/Copy/Paste if text has been selected.
 -  if(mHighlightMeshActor && mState == StateEdit)
 -  {
 -    ShowPopupCutCopyPaste();
 -  }
  }
  
  //FIXME this routine needs to be re-written as it contains too many branches.
@@@ -1763,6 -1753,11 +1740,6 @@@ bool TextInput::OnKeyDownEvent(const Ke
    } // Return
    else if ( keyName == "space" )
    {
 -    if ( mHighlightMeshActor )
 -    {
 -      // Some text is selected so erase it before adding space.
 -      DeleteHighlightedText( true );
 -    }
  
      mCursorPosition = mCursorPosition + InsertAt(Text(keyString), mCursorPosition, 0);
  
    } // space
    else if (keyName == "BackSpace")
    {
 -    if ( mHighlightMeshActor )
 -    {
 -      // Some text is selected so erase it
 -      DeleteHighlightedText( true );
 -      update = true;
 -    }
 -    else
      {
        if ( mCursorPosition > 0 )
        {
@@@ -1982,6 -1984,11 +1959,6 @@@ void TextInput::OnTextViewScrolled( Too
      mSelectionHandleOne.SetPosition( mSelectionHandleOneActualPosition + UI_OFFSET + mSelectionHandleOneOffset );
      mSelectionHandleTwo.SetPosition( mSelectionHandleTwoActualPosition + UI_OFFSET + mSelectionHandleTwoOffset );
  
 -    if( mHighlightMeshActor )
 -    {
 -      mHighlightMeshActor.SetVisible( true );
 -      UpdateHighlight();
 -    }
    }
  }
  
@@@ -2136,7 -2143,6 +2113,6 @@@ void TextInput::CreateTextViewActor(
    mDisplayedTextView.SetLineJustification( Toolkit::TextView::Left );
    mDisplayedTextView.SetTextAlignment( static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalLeft | Toolkit::Alignment::VerticalTop ) );
    mDisplayedTextView.SetPosition( Vector3( 0.0f, 0.0f, DISPLAYED_TEXT_VIEW_Z_OFFSET ) );
-   mDisplayedTextView.SetSizePolicy( Toolkit::Control::Fixed, Toolkit::Control::Fixed );
  
    mDisplayedTextView.ScrolledSignal().Connect( this, &TextInput::OnTextViewScrolled );
  
@@@ -2235,6 -2241,11 +2211,6 @@@ ImfManager::ImfCallbackData TextInput::
        mIgnoreFirstCommitFlag = false;
  
        // Some text may be selected, hiding keyboard causes an empty predictive string to be sent, we don't want to delete highlight in this case
 -      if ( mHighlightMeshActor &&  (!imfEvent.predictiveString.empty()) )
 -      {
 -        // replaces highlighted text with new character
 -        DeleteHighlightedText( false );
 -      }
  
        preeditResetRequired = PreEditReceived( imfEvent.predictiveString, imfEvent.cursorOffset );
  
          // A Commit message is a word that has been accepted, it may have been a pre-edit word previously but now commited.
  
          // Some text may be selected, hiding keyboard causes an empty predictive string to be sent, we don't want to delete highlight in this case
 -        if ( mHighlightMeshActor &&  (!imfEvent.predictiveString.empty()) )
 -        {
 -          // replaces highlighted text with new character
 -          DeleteHighlightedText( false );
 -        }
  
         // A PreEditReset can cause a commit message to be sent, the Ignore Commit flag is used in scenarios where the word is
         // not needed, one such scenario is when the pre-edit word is too long to fit.
        std::size_t toDelete = 0;
        std::size_t numberOfCharacters = 0;
  
 -      if( mHighlightMeshActor )
 -      {
 -        // delete highlighted text.
 -        toDelete = std::min( mSelectionHandleOnePosition, mSelectionHandleTwoPosition );
 -        numberOfCharacters = std::max( mSelectionHandleOnePosition, mSelectionHandleTwoPosition ) - toDelete;
 -      }
 -      else
        {
          if( static_cast<std::size_t>(std::abs( imfEvent.cursorOffset )) < mCursorPosition )
          {
      {
        // If text is selected/highlighted and surrounding text received we do not want the keyboard to store the word at cursor and return it as a predictive word along with
        // the next key pressed.  Instead the Select function sets the cursor position and surrounding text.
 -      if (! ( mHighlightMeshActor || mSelectingText ) )
 +      if (! ( false || mSelectingText ) )
        {
          std::string text( GetText() );
          DALI_LOG_INFO( gLogFilter, Debug::General, "OnKey - surrounding text - set text [%s] and cursor[%u] \n", text.c_str(), mCursorPosition );
@@@ -2610,6 -2633,78 +2586,6 @@@ void TextInput::DeleteHighlightedText( 
  {
    DALI_LOG_INFO( gLogFilter, Debug::General, "DeleteHighlightedText handlePosOne[%u] handlePosTwo[%u]\n", mSelectionHandleOnePosition, mSelectionHandleTwoPosition);
  
 -  if( mHighlightMeshActor )
 -  {
 -    mCursorPosition = std::min( mSelectionHandleOnePosition, mSelectionHandleTwoPosition );
 -
 -    MarkupProcessor::StyledTextArray::iterator start = mStyledText.begin() + mCursorPosition;
 -    MarkupProcessor::StyledTextArray::iterator end =  mStyledText.begin() + std::max( mSelectionHandleOnePosition, mSelectionHandleTwoPosition );
 -
 -    // Get the styled text of the characters to be deleted as it may be needed if
 -    // the "exceed the text-input's boundaries" option is disabled.
 -    MarkupProcessor::StyledTextArray styledCharactersToDelete;
 -
 -    styledCharactersToDelete.insert( styledCharactersToDelete.begin(), start, end );
 -
 -    mStyledText.erase( start, end ); // erase range of characters
 -
 -    // Remove text from TextView and update place holder text if required
 -
 -    // Set the placeholder text only if the styled text is empty.
 -    if( mStyledText.empty() )
 -    {
 -      ShowPlaceholderText( mStyledPlaceHolderText );
 -    }
 -    else
 -    {
 -      const std::size_t numberOfCharacters = std::max( mSelectionHandleOnePosition, mSelectionHandleTwoPosition ) - mCursorPosition;
 -
 -      mDisplayedTextView.RemoveTextFrom( mCursorPosition, numberOfCharacters );
 -
 -      // It may happen than after removing a white space or a new line character,
 -      // two words merge, this new word could be big enough to not fit in its
 -      // current line, so moved to the next one, and make some part of the text to
 -      // exceed the text-input's boundary.
 -      if( !mExceedEnabled )
 -      {
 -        // Get the new text layout after removing some characters.
 -        mDisplayedTextView.GetTextLayoutInfo( mTextLayoutInfo );
 -
 -        // Get text-input's size.
 -        const Vector3& size = GetControlSize();
 -
 -        if( ( mTextLayoutInfo.mTextSize.width > size.width ) ||
 -            ( mTextLayoutInfo.mTextSize.height > size.height ) )
 -        {
 -          mDisplayedTextView.InsertTextAt( mCursorPosition, styledCharactersToDelete );
 -
 -          mStyledText.insert( mStyledText.begin() + mCursorPosition,
 -                              styledCharactersToDelete.begin(),
 -                              styledCharactersToDelete.end() );
 -        }
 -      }
 -    }
 -    GetTextLayoutInfo();
 -
 -    RemoveHighlight();
 -
 -    EmitTextModified();
 -
 -    if( inheritStyle )
 -    {
 -      const TextStyle oldInputStyle( mInputStyle );
 -
 -      mInputStyle = GetStyleAtCursor(); // Inherit style from cursor position
 -
 -      if( oldInputStyle != mInputStyle )
 -      {
 -        // Updates the line height accordingly with the input style.
 -        UpdateLineHeight();
 -
 -        EmitStyleChangedSignal();
 -      }
 -    }
 -  }
  }
  
  void TextInput::DeleteRange( const std::size_t start, const std::size_t ncharacters )
      mStyledText.erase(itStart, itEnd);
  
      // update the selection handles if they are visible.
 -    if( mHighlightMeshActor )
 -    {
 -      std::size_t& minHandle = ( mSelectionHandleOnePosition <= mSelectionHandleTwoPosition ? mSelectionHandleOnePosition : mSelectionHandleTwoPosition );
 -      std::size_t& maxHandle = ( mSelectionHandleTwoPosition > mSelectionHandleOnePosition ? mSelectionHandleTwoPosition : mSelectionHandleOnePosition );
 -
 -      if( minHandle >= start + ncharacters )
 -      {
 -        minHandle -= ncharacters;
 -      }
 -      else if( ( minHandle > start ) && ( minHandle < start + ncharacters ) )
 -      {
 -        minHandle = start;
 -      }
 -
 -      if( maxHandle >= start + ncharacters )
 -      {
 -        maxHandle -= ncharacters;
 -      }
 -      else if( ( maxHandle > start ) && ( maxHandle < start + ncharacters ) )
 -      {
 -        maxHandle = start;
 -      }
 -    }
  
      // Set text is not called here as currently it can not process the set text from deletion and then the set text from the in-coming pre-edit.
    }
@@@ -2836,7 -2954,7 +2812,7 @@@ void TextInput::DrawCursor(
    mCursor.SetSize(size);
  
    // If the character is italic then the cursor also tilts.
-   mCursor.SetRotation( mInputStyle.IsItalicsEnabled() ? Degree( mInputStyle.GetItalicsAngle() - CURSOR_ANGLE_OFFSET ) : Degree( 0.f ), Vector3::ZAXIS );
+   mCursor.SetOrientation( mInputStyle.IsItalicsEnabled() ? Degree( mInputStyle.GetItalicsAngle() - CURSOR_ANGLE_OFFSET ) : Degree( 0.f ), Vector3::ZAXIS );
  
    DALI_ASSERT_DEBUG( mCursorPosition <= mTextLayoutInfo.mCharacterLayoutInfoTable.size() );
  
@@@ -3098,37 -3216,37 +3074,37 @@@ void TextInput::SetUpHandlePropertyNoti
    Vector3 handlesize = GetSelectionHandleSize();
  
    // Exceeding horizontal boundary
-   PropertyNotification leftNotification = mSelectionHandleOne.AddPropertyNotification( Actor::Property::WorldPositionX, LessThanCondition( mBoundingRectangleWorldCoordinates.x + handlesize.x) );
+   PropertyNotification leftNotification = mSelectionHandleOne.AddPropertyNotification( Actor::Property::WORLD_POSITION_X, LessThanCondition( mBoundingRectangleWorldCoordinates.x + handlesize.x) );
    leftNotification.NotifySignal().Connect( this, &TextInput::OnLeftBoundaryExceeded );
  
-   PropertyNotification rightNotification = mSelectionHandleTwo.AddPropertyNotification( Actor::Property::WorldPositionX, GreaterThanCondition( mBoundingRectangleWorldCoordinates.z - handlesize.x ) );
+   PropertyNotification rightNotification = mSelectionHandleTwo.AddPropertyNotification( Actor::Property::WORLD_POSITION_X, GreaterThanCondition( mBoundingRectangleWorldCoordinates.z - handlesize.x ) );
    rightNotification.NotifySignal().Connect( this, &TextInput::OnRightBoundaryExceeded );
  
    // Within horizontal boundary
-   PropertyNotification leftLeaveNotification = mSelectionHandleOne.AddPropertyNotification( Actor::Property::WorldPositionX, GreaterThanCondition( mBoundingRectangleWorldCoordinates.x + 2*handlesize.x ) );
+   PropertyNotification leftLeaveNotification = mSelectionHandleOne.AddPropertyNotification( Actor::Property::WORLD_POSITION_X, GreaterThanCondition( mBoundingRectangleWorldCoordinates.x + 2*handlesize.x ) );
    leftLeaveNotification.NotifySignal().Connect( this, &TextInput::OnReturnToLeftBoundary );
  
-   PropertyNotification rightLeaveNotification = mSelectionHandleTwo.AddPropertyNotification( Actor::Property::WorldPositionX, LessThanCondition( mBoundingRectangleWorldCoordinates.z - 2*handlesize.x ) );
+   PropertyNotification rightLeaveNotification = mSelectionHandleTwo.AddPropertyNotification( Actor::Property::WORLD_POSITION_X, LessThanCondition( mBoundingRectangleWorldCoordinates.z - 2*handlesize.x ) );
    rightLeaveNotification.NotifySignal().Connect( this, &TextInput::OnReturnToRightBoundary );
  
    // Exceeding vertical boundary
-   PropertyNotification verticalExceedNotificationOne = mSelectionHandleOne.AddPropertyNotification( Actor::Property::WorldPositionY,
+   PropertyNotification verticalExceedNotificationOne = mSelectionHandleOne.AddPropertyNotification( Actor::Property::WORLD_POSITION_Y,
                                                         OutsideCondition( mBoundingRectangleWorldCoordinates.y + handlesize.y,
                                                                           mBoundingRectangleWorldCoordinates.w - handlesize.y ) );
    verticalExceedNotificationOne.NotifySignal().Connect( this, &TextInput::OnHandleOneLeavesBoundary );
  
-   PropertyNotification verticalExceedNotificationTwo = mSelectionHandleTwo.AddPropertyNotification( Actor::Property::WorldPositionY,
+   PropertyNotification verticalExceedNotificationTwo = mSelectionHandleTwo.AddPropertyNotification( Actor::Property::WORLD_POSITION_Y,
                                                         OutsideCondition( mBoundingRectangleWorldCoordinates.y + handlesize.y,
                                                                           mBoundingRectangleWorldCoordinates.w - handlesize.y ) );
    verticalExceedNotificationTwo.NotifySignal().Connect( this, &TextInput::OnHandleTwoLeavesBoundary );
  
    // Within vertical boundary
-   PropertyNotification verticalWithinNotificationOne = mSelectionHandleOne.AddPropertyNotification( Actor::Property::WorldPositionY,
+   PropertyNotification verticalWithinNotificationOne = mSelectionHandleOne.AddPropertyNotification( Actor::Property::WORLD_POSITION_Y,
                                                         InsideCondition( mBoundingRectangleWorldCoordinates.y + handlesize.y,
                                                                          mBoundingRectangleWorldCoordinates.w - handlesize.y ) );
    verticalWithinNotificationOne.NotifySignal().Connect( this, &TextInput::OnHandleOneWithinBoundary );
  
-   PropertyNotification verticalWithinNotificationTwo = mSelectionHandleTwo.AddPropertyNotification( Actor::Property::WorldPositionY,
+   PropertyNotification verticalWithinNotificationTwo = mSelectionHandleTwo.AddPropertyNotification( Actor::Property::WORLD_POSITION_Y,
                                                         InsideCondition( mBoundingRectangleWorldCoordinates.y + handlesize.y,
                                                                          mBoundingRectangleWorldCoordinates.w - handlesize.y ) );
    verticalWithinNotificationTwo.NotifySignal().Connect( this, &TextInput::OnHandleTwoWithinBoundary );
@@@ -3636,6 -3754,74 +3612,6 @@@ void TextInput::UpdateHighlight(
  //  9*    *7
  //
  
 -  if ( mHighlightMeshActor )
 -  {
 -    // vertex and triangle buffers should always be present if MeshActor is alive.
 -    HighlightInfo newHighlightInfo = CalculateHighlightInfoRtl();
 -    MeshData::VertexContainer vertices;
 -    Dali::MeshData::FaceIndices faceIndices;
 -
 -    if( !newHighlightInfo.mQuadList.empty() )
 -    {
 -      std::vector<QuadCoordinates>::iterator iter = newHighlightInfo.mQuadList.begin();
 -      std::vector<QuadCoordinates>::iterator endIter = newHighlightInfo.mQuadList.end();
 -
 -      // vertex position defaults to (0 0 0)
 -      MeshData::Vertex vertex;
 -      // set normal for all vertices as (0 0 1) pointing outward from TextInput Actor.
 -      vertex.nZ = 1.0f;
 -
 -      for(std::size_t v = 0; iter != endIter; ++iter,v+=4 )
 -      {
 -        // Add each quad geometry (a sub-selection) to the mesh data.
 -
 -        // 0-----1
 -        // |\    |
 -        // | \ A |
 -        // |  \  |
 -        // | B \ |
 -        // |    \|
 -        // 2-----3
 -
 -        QuadCoordinates& quad = *iter;
 -        // top-left (v+0)
 -        vertex.x = quad.min.x;
 -        vertex.y = quad.min.y;
 -        vertices.push_back( vertex );
 -
 -        // top-right (v+1)
 -        vertex.x = quad.max.x;
 -        vertex.y = quad.min.y;
 -        vertices.push_back( vertex );
 -
 -        // bottom-left (v+2)
 -        vertex.x = quad.min.x;
 -        vertex.y = quad.max.y;
 -        vertices.push_back( vertex );
 -
 -        // bottom-right (v+3)
 -        vertex.x = quad.max.x;
 -        vertex.y = quad.max.y;
 -        vertices.push_back( vertex );
 -
 -        // triangle A (3, 1, 0)
 -        faceIndices.push_back( v + 3 );
 -        faceIndices.push_back( v + 1 );
 -        faceIndices.push_back( v );
 -
 -        // triangle B (0, 2, 3)
 -        faceIndices.push_back( v );
 -        faceIndices.push_back( v + 2 );
 -        faceIndices.push_back( v + 3 );
 -
 -        mMeshData.SetFaceIndices( faceIndices );
 -      }
 -
 -      BoneContainer bones(0); // passed empty as bones not required
 -      mMeshData.SetData( vertices, faceIndices, bones, mCustomMaterial );
 -      mHighlightMesh.UpdateMeshData(mMeshData);
 -    }
 -  }
  }
  
  void TextInput::ClearPopup()
@@@ -3707,7 -3893,7 +3683,7 @@@ void TextInput::ShowPopup( bool animat
    Vector3 position;
    Vector2 alternativePopupPosition;
  
 -  if(mHighlightMeshActor && mState == StateEdit)
 +  if(false && mState == StateEdit)
    {
      Vector3 topHandle;
      Vector3 bottomHandle; // referring to the bottom most point of the handle or the bottom line of selection.
@@@ -4500,7 -4686,7 +4476,7 @@@ void TextInput::OnStageTouched(const To
  
        bool textInputTouched = (touchedActor && WasTouchedCheck( touchedActor ));
  
 -      if ( ( mHighlightMeshActor || popUpShown ) && !textInputTouched )
 +      if ( ( false || popUpShown ) && !textInputTouched )
        {
          EndMonitoringStageForTouch();
          HidePopup( true, false );
@@@ -4628,7 -4814,7 +4604,7 @@@ void TextInput::RemoveHighlight( bool h
  {
    DALI_LOG_INFO(gLogFilter, Debug::General, "RemoveHighlight\n");
  
 -  if ( mHighlightMeshActor )
 +  if ( false )
    {
      if ( mSelectionHandleOne )
      {
  
      mNewHighlightInfo.mQuadList.clear();
  
 -    Self().Remove( mHighlightMeshActor );
  
      SetCursorVisibility( true );
      StartCursorBlinkTimer();
  
 -    mHighlightMeshActor.Reset();
      // NOTE: We cannot dereference mHighlightMesh, due
      // to a bug in how the scene-graph MeshRenderer uses the Mesh data incorrectly.
  
  
  void TextInput::CreateHighlight()
  {
 -  if ( !mHighlightMeshActor )
 -  {
 -    mMeshData = MeshData( );
 -    mMeshData.SetHasNormals( true );
 -
 -    mCustomMaterial = Material::New("CustomMaterial");
 -    mCustomMaterial.SetDiffuseColor( mMaterialColor );
 -
 -    mMeshData.SetMaterial( mCustomMaterial );
 -
 -    mHighlightMesh = Mesh::New( mMeshData );
 -
 -    mHighlightMeshActor = MeshActor::New( mHighlightMesh );
 -    mHighlightMeshActor.SetName( "HighlightMeshActor" );
 -    mHighlightMeshActor.SetParentOrigin( ParentOrigin::TOP_LEFT );
 -    mHighlightMeshActor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
 -    mHighlightMeshActor.SetPosition( 0.0f, 0.0f, DISPLAYED_HIGHLIGHT_Z_OFFSET );
 -
 -    Self().Add(mHighlightMeshActor);
 -  }
  }
  
  
@@@ -4691,7 -4899,7 +4667,7 @@@ void TextInput::PasteText( const Text& 
    // Any key stroke that results in a visual change of the text-input should
    // set this flag to true.
    bool update = false;
 -  if( mHighlightMeshActor )
 +  if( false )
    {
      /* if highlighted, delete entire text, and position cursor at start of deleted text. */
      mCursorPosition = std::min(mSelectionHandleOnePosition, mSelectionHandleTwoPosition);
@@@ -4887,6 -5095,10 +4863,6 @@@ void TextInput::SetScrollEnabled( bool 
        mSelectionHandleOne.SetVisible( true );
        mSelectionHandleTwo.SetVisible( true );
  
 -      if( mHighlightMeshActor )
 -      {
 -        mHighlightMeshActor.SetVisible( true );
 -      }
      }
    }
  }
@@@ -5103,84 -5315,85 +5079,85 @@@ void TextInput::SetProperty( BaseObject
  
      switch ( propertyIndex )
      {
-       case Toolkit::TextInput::HIGHLIGHT_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::HIGHLIGHT_COLOR:
        {
          textInputImpl.SetMaterialDiffuseColor( value.Get< Vector4 >() );
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_COLOR:
        {
          textInputImpl.mPopupPanel.SetCutPastePopupColor( value.Get< Vector4 >() );
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_PRESSED_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_PRESSED_COLOR:
        {
          textInputImpl.mPopupPanel.SetCutPastePopupPressedColor( value.Get< Vector4 >() );
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_BORDER_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_BORDER_COLOR:
        {
          textInputImpl.mPopupPanel.SetCutPastePopupBorderColor( value.Get< Vector4 >() );
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_ICON_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_ICON_COLOR:
        {
          textInputImpl.mPopupPanel.SetCutPastePopupIconColor( value.Get< Vector4 >() );
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_ICON_PRESSED_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_ICON_PRESSED_COLOR:
        {
          textInputImpl.mPopupPanel.SetCutPastePopupIconPressedColor( value.Get< Vector4 >() );
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_TEXT_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_TEXT_COLOR:
        {
          textInputImpl.mPopupPanel.SetCutPastePopupTextColor( value.Get< Vector4 >() );
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_TEXT_PRESSED_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_TEXT_PRESSED_COLOR:
        {
          textInputImpl.mPopupPanel.SetCutPastePopupTextPressedColor( value.Get< Vector4 >() );
          break;
        }
-       case Toolkit::TextInput::CUT_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_BUTTON_POSITION_PRIORITY:
        {
          textInputImpl.mPopupPanel.SetButtonPriorityPosition( TextInputPopup::ButtonsCut, value.Get<unsigned int>() );
          break;
        }
-       case Toolkit::TextInput::COPY_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::COPY_BUTTON_POSITION_PRIORITY:
        {
          textInputImpl.mPopupPanel.SetButtonPriorityPosition( TextInputPopup::ButtonsCopy, value.Get<unsigned int>() );
          break;
        }
-       case Toolkit::TextInput::PASTE_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::PASTE_BUTTON_POSITION_PRIORITY:
        {
          textInputImpl.mPopupPanel.SetButtonPriorityPosition( TextInputPopup::ButtonsPaste, value.Get<unsigned int>() );
          break;
        }
-       case Toolkit::TextInput::SELECT_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::SELECT_BUTTON_POSITION_PRIORITY:
        {
          textInputImpl.mPopupPanel.SetButtonPriorityPosition( TextInputPopup::ButtonsSelect, value.Get<unsigned int>() );
          break;
        }
-       case Toolkit::TextInput::SELECT_ALL_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::SELECT_ALL_BUTTON_POSITION_PRIORITY:
        {
          textInputImpl.mPopupPanel.SetButtonPriorityPosition( TextInputPopup::ButtonsSelectAll, value.Get<unsigned int>() );
          break;
        }
-       case Toolkit::TextInput::CLIPBOARD_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::CLIPBOARD_BUTTON_POSITION_PRIORITY:
        {
          textInputImpl.mPopupPanel.SetButtonPriorityPosition( TextInputPopup::ButtonsClipboard, value.Get<unsigned int>() );
          break;
        }
-       case Toolkit::TextInput::POP_UP_OFFSET_FROM_TEXT_PROPERTY:
+       case Toolkit::TextInput::Property::POP_UP_OFFSET_FROM_TEXT:
        {
          textInputImpl.SetOffsetFromText( value.Get< Vector4 >() );
          break;
        }
-       case Toolkit::TextInput::CURSOR_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CURSOR_COLOR:
        {
          textInputImpl.mCursor.SetColor( value.Get< Vector4 >() );
+         break;
        }
      }
    }
@@@ -5198,82 -5411,82 +5175,82 @@@ Property::Value TextInput::GetProperty
  
      switch ( propertyIndex )
      {
-       case Toolkit::TextInput::HIGHLIGHT_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::HIGHLIGHT_COLOR:
        {
          value = textInputImpl.GetMaterialDiffuseColor();
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_COLOR:
        {
          value = textInputImpl.mPopupPanel.GetCutPastePopupColor();
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_PRESSED_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_PRESSED_COLOR:
        {
          value = textInputImpl.mPopupPanel.GetCutPastePopupPressedColor();
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_BORDER_COLOR_PROPERTY :
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_BORDER_COLOR :
        {
          value = textInputImpl.mPopupPanel.GetCutPastePopupBorderColor();
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_ICON_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_ICON_COLOR:
        {
          value = textInputImpl.mPopupPanel.GetCutPastePopupIconColor();
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_ICON_PRESSED_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_ICON_PRESSED_COLOR:
        {
          value = textInputImpl.mPopupPanel.GetCutPastePopupIconPressedColor();
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_TEXT_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_TEXT_COLOR:
        {
          value = textInputImpl.mPopupPanel.GetCutPastePopupTextColor();
          break;
        }
-       case Toolkit::TextInput::CUT_AND_PASTE_TEXT_PRESSED_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_AND_PASTE_TEXT_PRESSED_COLOR:
        {
          value = textInputImpl.mPopupPanel.GetCutPastePopupTextPressedColor();
          break;
        }
-       case Toolkit::TextInput::CUT_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::CUT_BUTTON_POSITION_PRIORITY:
        {
          value = textInputImpl.mPopupPanel.GetButtonPriorityPosition( TextInputPopup::ButtonsCut );
          break;
        }
-       case Toolkit::TextInput::COPY_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::COPY_BUTTON_POSITION_PRIORITY:
        {
          value =  textInputImpl.mPopupPanel.GetButtonPriorityPosition( TextInputPopup::ButtonsCopy );
          break;
        }
-       case Toolkit::TextInput::PASTE_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::PASTE_BUTTON_POSITION_PRIORITY:
        {
          value = textInputImpl.mPopupPanel.GetButtonPriorityPosition( TextInputPopup::ButtonsPaste );
          break;
        }
-       case Toolkit::TextInput::SELECT_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::SELECT_BUTTON_POSITION_PRIORITY:
        {
          value = textInputImpl.mPopupPanel.GetButtonPriorityPosition( TextInputPopup::ButtonsSelect );
          break;
        }
-       case Toolkit::TextInput::SELECT_ALL_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::SELECT_ALL_BUTTON_POSITION_PRIORITY:
        {
          value = textInputImpl.mPopupPanel.GetButtonPriorityPosition( TextInputPopup::ButtonsSelectAll );
          break;
        }
-       case Toolkit::TextInput::CLIPBOARD_BUTTON_POSITION_PRIORITY_PROPERTY:
+       case Toolkit::TextInput::Property::CLIPBOARD_BUTTON_POSITION_PRIORITY:
        {
          value = textInputImpl.mPopupPanel.GetButtonPriorityPosition( TextInputPopup::ButtonsClipboard );
          break;
        }
-       case Toolkit::TextInput::POP_UP_OFFSET_FROM_TEXT_PROPERTY:
+       case Toolkit::TextInput::Property::POP_UP_OFFSET_FROM_TEXT:
        {
          value = textInputImpl.GetOffsetFromText();
          break;
        }
-       case Toolkit::TextInput::CURSOR_COLOR_PROPERTY:
+       case Toolkit::TextInput::Property::CURSOR_COLOR:
        {
          value = textInputImpl.mCursor.GetCurrentColor();
        }
   */
  
  // EXTERNAL INCLUDES
 -#include <dali/public-api/actors/mesh-actor.h>
  #include <dali/public-api/adaptor-framework/clipboard.h>
  #include <dali/public-api/adaptor-framework/clipboard-event-notifier.h>
  #include <dali/public-api/adaptor-framework/imf-manager.h>
  #include <dali/public-api/adaptor-framework/timer.h>
  #include <dali/public-api/common/dali-vector.h>
 -#include <dali/public-api/geometry/mesh.h>
  
  // INTERNAL INCLUDES
  #include <dali-toolkit/public-api/controls/control-impl.h>
@@@ -50,13 -52,6 +50,6 @@@ class TextInput : public Contro
  {
  public:
  
-   // Properties
-   enum
-   {
-     TEXTINPUT_PROPERTY_START_INDEX = Control::CONTROL_PROPERTY_END_INDEX + 1,
-     TEXTINPUT_PROPERTY_END_INDEX = TEXTINPUT_PROPERTY_START_INDEX + 512 ///< Reserving property indices
-   };
    /**
     * Create a new TextInput
     * @return instrusive ptr to a TextInput
@@@ -576,7 -571,7 +569,7 @@@ private: // From Contro
    /**
     * @copydoc Control::OnRelayout()
     */
-   virtual void OnRelayout( const Vector2& size, ActorSizeContainer& container );
+   virtual void OnRelayout( const Vector2& size, RelayoutContainer& container );
  
    /**
     * Retrieves the text-input's natural size by calling TextView::GetNaturalSize().
@@@ -1467,6 -1462,10 +1460,6 @@@ private
    Actor mHandleOneGrabArea;                     ///< invisible actor that receives pans events for the selection handle.
    Actor mHandleTwoGrabArea;                     ///< invisible actor that receives pans events for the selection handle.
  
 -  Mesh              mHighlightMesh;             ///< Mesh Data for highlight
 -  MeshActor         mHighlightMeshActor;        ///< Mesh Actor to display highlight
 -  MeshData          mMeshData;                  ///< Container to hold meshData for highlight
 -  Material          mCustomMaterial;            ///< Custom material used for highlight
    HighlightInfo     mNewHighlightInfo;          ///< Geometry info to create highlight.
  
    Text mPreEditString;                          ///< Holds current input string prior to it being committed.
@@@ -242,10 -242,10 +242,10 @@@ void SetVisualParameters( CurrentTextAc
    relayoutData.mTextLayoutInfo.mMaxItalicsOffset = std::max( relayoutData.mTextLayoutInfo.mMaxItalicsOffset, italicsOffset );
  
    // Sets the sort modifier value.
 -  currentTextActorInfo.textActor.SetSortModifier( visualParameters.mSortModifier );
 + // currentTextActorInfo.textActor.SetSortModifier( visualParameters.mSortModifier );
  
    // Enables or disables the blending.
 -  currentTextActorInfo.textActor.SetBlendMode( !visualParameters.mSnapshotModeEnabled ? BlendingMode::ON : BlendingMode::OFF );
 + // currentTextActorInfo.textActor.SetBlendMode( !visualParameters.mSnapshotModeEnabled ? BlendingMode::ON : BlendingMode::OFF );
  }
  
  void CalculateLineLayout( float parentWidth,
@@@ -1895,7 -1895,7 +1895,7 @@@ void CreateEmoticon( const TextView::Vi
    imageActor.SetSize( characterLayout.mSize );
  
    // Sets the sort modifier value.
 -  imageActor.SetSortModifier( visualParameters.mSortModifier );
 + // imageActor.SetSortModifier( visualParameters.mSortModifier );
  
    characterLayout.mGlyphActor = imageActor;
  }
@@@ -1995,6 -1995,7 +1995,7 @@@ void CreateTextActor( const TextView::V
        {
          TextActorParameters parameters( style, TextActorParameters::FONT_DETECTION_OFF );
          textActor = TextActor::New( Text(), parameters );
+         textActor.SetRelayoutEnabled( false );
        }
        else
        {
@@@ -2248,10 -2249,10 +2249,10 @@@ void UpdateTextActorInfo( const TextVie
      glyphActor.SetAnchorPoint( AnchorPoint::BOTTOM_LEFT );
  
      // Sets the sort modifier value.
 -    glyphActor.SetSortModifier( visualParameters.mSortModifier );
 +   // glyphActor.SetSortModifier( visualParameters.mSortModifier );
  
      // Enables or disables the blending.
 -    glyphActor.SetBlendMode( !visualParameters.mSnapshotModeEnabled ? BlendingMode::ON : BlendingMode::OFF );
 +   // glyphActor.SetBlendMode( !visualParameters.mSnapshotModeEnabled ? BlendingMode::ON : BlendingMode::OFF );
    }
  }
  
@@@ -2549,6 -2550,9 +2550,9 @@@ RenderableActor CreateGlyphActor( cons
      textActor = TextActor::New( text, parameters );
    }
  
+   // Exclude from size negotiation
+   textActor.SetRelayoutEnabled( false );
    return textActor;
  }
  
@@@ -21,6 -21,7 +21,7 @@@
  // EXTERNAL INCLUDES
  #include <dali/public-api/common/stage.h>
  #include <dali/public-api/object/type-registry.h>
+ #include <dali/public-api/object/type-registry-helper.h>
  #include <dali/public-api/render-tasks/render-task-list.h>
  
  // INTERNAL INCLUDES
@@@ -38,27 -39,12 +39,12 @@@ namespace Dal
  namespace Toolkit
  {
  
- const Property::Index TextView::PROPERTY_MARKUP_ENABLED( Internal::TextView::TEXTVIEW_PROPERTY_START_INDEX );
- const Property::Index TextView::PROPERTY_TEXT( Internal::TextView::TEXTVIEW_PROPERTY_START_INDEX + 1 );
- const Property::Index TextView::PROPERTY_MULTILINE_POLICY( Internal::TextView::TEXTVIEW_PROPERTY_START_INDEX + 2 );
- const Property::Index TextView::PROPERTY_WIDTH_EXCEED_POLICY( Internal::TextView::TEXTVIEW_PROPERTY_START_INDEX + 3 );
- const Property::Index TextView::PROPERTY_HEIGHT_EXCEED_POLICY( Internal::TextView::TEXTVIEW_PROPERTY_START_INDEX + 4 );
- const Property::Index TextView::PROPERTY_LINE_JUSTIFICATION( Internal::TextView::TEXTVIEW_PROPERTY_START_INDEX + 5 );
- const Property::Index TextView::PROPERTY_FADE_BOUNDARY( Internal::TextView::TEXTVIEW_PROPERTY_START_INDEX + 6 );
- const Property::Index TextView::PROPERTY_LINE_HEIGHT_OFFSET( Internal::TextView::TEXTVIEW_PROPERTY_START_INDEX + 7 );
- const Property::Index TextView::PROPERTY_HORIZONTAL_ALIGNMENT( Internal::TextView::TEXTVIEW_PROPERTY_START_INDEX + 8 );
- const Property::Index TextView::PROPERTY_VERTICAL_ALIGNMENT( Internal::TextView::TEXTVIEW_PROPERTY_START_INDEX + 9 );
  namespace Internal
  {
  
  namespace
  {
  
- // Signals
- const char* const SIGNAL_TEXT_SCROLLED = "scrolled";
  const char* MULTILINE_POLICY_NAME[] = {"SplitByNewLineChar", "SplitByWord", "SplitByChar"};
  const char* EXCEED_POLICY_NAME[] = {"Original", "Truncate", "Fade", "Split","ShrinkToFit","EllipsizeEnd"};
  const char* LINE_JUSTIFICATION_NAME[] = {"Left","Center","Right","Justified"};
  // Currently on desktop machines 2k x 2k is the maximum frame buffer size, on target is 4k x 4k.
  const float MAX_OFFSCREEN_RENDERING_SIZE = 2048.f;
  
- //Type Registration
+ // Type Registration
  BaseHandle Create()
  {
    return Toolkit::TextView::New();
  }
  
- TypeRegistration typeRegistration( typeid( Toolkit::TextView ), typeid( Toolkit::Control ), Create );
+ // Setup properties, signals and actions using the type-registry.
+ DALI_TYPE_REGISTRATION_BEGIN( Toolkit::TextView, Toolkit::Control, Create );
+ DALI_PROPERTY_REGISTRATION( TextView, "markup-enabled",       BOOLEAN, MARKUP_ENABLED       )
+ DALI_PROPERTY_REGISTRATION( TextView, "text",                 STRING,  TEXT                 )
+ DALI_PROPERTY_REGISTRATION( TextView, "multiline-policy",     STRING,  MULTILINE_POLICY     )
+ DALI_PROPERTY_REGISTRATION( TextView, "width-exceed-policy",  STRING,  WIDTH_EXCEED_POLICY  )
+ DALI_PROPERTY_REGISTRATION( TextView, "height-exceed-policy", STRING,  HEIGHT_EXCEED_POLICY )
+ DALI_PROPERTY_REGISTRATION( TextView, "line-justification",   STRING,  LINE_JUSTIFICATION   )
+ DALI_PROPERTY_REGISTRATION( TextView, "fade-boundary",        VECTOR4, FADE_BOUNDARY        )
+ DALI_PROPERTY_REGISTRATION( TextView, "line-height-offset",   FLOAT,   LINE_HEIGHT_OFFSET   )
+ DALI_PROPERTY_REGISTRATION( TextView, "horizontal-alignment", STRING,  HORIZONTAL_ALIGNMENT )
+ DALI_PROPERTY_REGISTRATION( TextView, "vertical-alignment",   STRING,  VERTICAL_ALIGNMENT   )
  
- SignalConnectorType signalConnector1( typeRegistration, SIGNAL_TEXT_SCROLLED , &TextView::DoConnectSignal );
+ DALI_SIGNAL_REGISTRATION(   TextView, "scrolled",                      SIGNAL_TEXT_SCROLLED )
  
- PropertyRegistration property1( typeRegistration,  "markup-enabled",       Toolkit::TextView::PROPERTY_MARKUP_ENABLED,       Property::BOOLEAN, &TextView::SetProperty, &TextView::GetProperty );
- PropertyRegistration property2( typeRegistration,  "text",                 Toolkit::TextView::PROPERTY_TEXT,                 Property::STRING,  &TextView::SetProperty, &TextView::GetProperty );
- PropertyRegistration property3( typeRegistration,  "multiline-policy",     Toolkit::TextView::PROPERTY_MULTILINE_POLICY,     Property::STRING,  &TextView::SetProperty, &TextView::GetProperty );
- PropertyRegistration property4( typeRegistration,  "width-exceed-policy",  Toolkit::TextView::PROPERTY_WIDTH_EXCEED_POLICY,  Property::STRING,  &TextView::SetProperty, &TextView::GetProperty );
- PropertyRegistration property5( typeRegistration,  "height-exceed-policy", Toolkit::TextView::PROPERTY_HEIGHT_EXCEED_POLICY, Property::STRING,  &TextView::SetProperty, &TextView::GetProperty );
- PropertyRegistration property6( typeRegistration,  "line-justification",   Toolkit::TextView::PROPERTY_LINE_JUSTIFICATION,   Property::STRING,  &TextView::SetProperty, &TextView::GetProperty );
- PropertyRegistration property7( typeRegistration,  "fade-boundary",        Toolkit::TextView::PROPERTY_FADE_BOUNDARY,        Property::VECTOR4, &TextView::SetProperty, &TextView::GetProperty );
- PropertyRegistration property8( typeRegistration, "line-height-offset",    Toolkit::TextView::PROPERTY_LINE_HEIGHT_OFFSET,   Property::FLOAT,   &TextView::SetProperty, &TextView::GetProperty );
- PropertyRegistration property9( typeRegistration, "horizontal-alignment",  Toolkit::TextView::PROPERTY_HORIZONTAL_ALIGNMENT, Property::STRING,  &TextView::SetProperty, &TextView::GetProperty );
- PropertyRegistration property10( typeRegistration, "vertical-alignment",   Toolkit::TextView::PROPERTY_VERTICAL_ALIGNMENT,   Property::STRING,  &TextView::SetProperty, &TextView::GetProperty );
+ DALI_TYPE_REGISTRATION_END()
  
  /**
   * Whether the text-view-processor operation sets, inserts, replaces, removes text.
@@@ -736,12 -725,12 +725,12 @@@ void TextView::SetSortModifier( float d
         it != endIt;
         ++it )
    {
 -    ( *it ).SetSortModifier( depthOffset );
 +   // ( *it ).SetSortModifier( depthOffset );
    }
  
    if( mOffscreenImageActor )
    {
 -    mOffscreenImageActor.SetSortModifier( depthOffset );
 +   // mOffscreenImageActor.SetSortModifier( depthOffset );
    }
  }
  
@@@ -774,7 -763,7 +763,7 @@@ void TextView::SetSnapshotModeEnabled( 
  
        mOffscreenRootActor.SetColorMode( USE_OWN_COLOR );
        mOffscreenRootActor.SetPositionInheritanceMode( DONT_INHERIT_POSITION );
-       mOffscreenRootActor.SetInheritRotation( false );
+       mOffscreenRootActor.SetInheritOrientation( false );
        mOffscreenRootActor.SetInheritScale( false );
        mOffscreenRootActor.SetDepthTestDisabled( true );
  
@@@ -1210,6 -1199,8 +1199,8 @@@ float TextView::GetWidthForHeight( floa
  
  void TextView::OnInitialize()
  {
+   // The actor handle needs to be inialised for this to work
+   Self().SetResizePolicy( USE_NATURAL_SIZE, ALL_DIMENSIONS );
  }
  
  
@@@ -1233,7 -1224,7 +1224,7 @@@ void TextView::OnControlSizeSet( const 
    }
  }
  
- void TextView::OnRelayout( const Vector2& size, ActorSizeContainer& container )
+ void TextView::OnRelayout( const Vector2& size, RelayoutContainer& container )
  {
    if( ( size.width < Math::MACHINE_EPSILON_1000 ) || ( size.height < Math::MACHINE_EPSILON_1000 ) )
    {
@@@ -1505,7 -1496,7 +1496,7 @@@ void TextView::ProcessSnapshot( const S
            mOffscreenCameraActor = CameraActor::New();
            mOffscreenCameraActor.SetParentOrigin( ParentOrigin::CENTER );
            mOffscreenCameraActor.SetAnchorPoint( AnchorPoint::CENTER );
-           mOffscreenCameraActor.SetRotation(Degree(180.f), Vector3::YAXIS);
+           mOffscreenCameraActor.SetOrientation(Degree(180.f), Vector3::YAXIS);
  
            mOffscreenCameraActor.SetType( Dali::Camera::FREE_LOOK ); // Inherits position from the offscreen root actor.
  
@@@ -2102,7 -2093,7 +2093,7 @@@ void TextView::OnAlignmentPropertySet( 
  {
    std::string value( propertyValue.Get<std::string>() );
  
-   if( propertyIndex == Toolkit::TextView::PROPERTY_HORIZONTAL_ALIGNMENT )
+   if( propertyIndex == Toolkit::TextView::Property::HORIZONTAL_ALIGNMENT )
    {
      if(value == "HorizontalLeft")
      {
        DALI_ASSERT_ALWAYS( !"TextView::OnAlignmentPropertySet(). Invalid Property value." );
      }
    }
-   else if( propertyIndex == Toolkit::TextView::PROPERTY_VERTICAL_ALIGNMENT )
+   else if( propertyIndex == Toolkit::TextView::Property::VERTICAL_ALIGNMENT )
    {
      if( value == "VerticalTop" )
      {
@@@ -2202,49 -2193,49 +2193,49 @@@ void TextView::SetProperty( BaseObject
      TextView& textViewImpl( GetImpl( textView ) );
      switch( index )
      {
-       case Toolkit::TextView::PROPERTY_MARKUP_ENABLED:
+       case Toolkit::TextView::Property::MARKUP_ENABLED:
        {
          textViewImpl.OnMarkupEnabledPeopertySet( value );
          break;
        }
-       case Toolkit::TextView::PROPERTY_TEXT:
+       case Toolkit::TextView::Property::TEXT:
        {
          textViewImpl.SetText( value.Get<std::string>() );
          break;
        }
-       case Toolkit::TextView::PROPERTY_MULTILINE_POLICY:
+       case Toolkit::TextView::Property::MULTILINE_POLICY:
        {
          textViewImpl.OnMultilinePolicyPropertySet( value );
          break;
        }
-       case Toolkit::TextView::PROPERTY_WIDTH_EXCEED_POLICY:
+       case Toolkit::TextView::Property::WIDTH_EXCEED_POLICY:
        {
          textViewImpl.OnWidthExceedPolicyPropertySet( value );
          break;
        }
-       case Toolkit::TextView::PROPERTY_HEIGHT_EXCEED_POLICY:
+       case Toolkit::TextView::Property::HEIGHT_EXCEED_POLICY:
        {
          textViewImpl.OnHeightExceedPolicyPropertySet( value );
          break;
        }
-       case Toolkit::TextView::PROPERTY_LINE_JUSTIFICATION:
+       case Toolkit::TextView::Property::LINE_JUSTIFICATION:
        {
          textViewImpl.OnLineJustificationPropertySet( value );
          break;
        }
-       case Toolkit::TextView::PROPERTY_FADE_BOUNDARY:
+       case Toolkit::TextView::Property::FADE_BOUNDARY:
        {
          textViewImpl.OnFadeBoundaryPropertySet( value );
          break;
        }
-       case Toolkit::TextView::PROPERTY_LINE_HEIGHT_OFFSET:
+       case Toolkit::TextView::Property::LINE_HEIGHT_OFFSET:
        {
          Dali::PointSize pointSize( value.Get<float>() );
          textViewImpl.SetLineHeightOffset(pointSize);
          break;
        }
-       case Toolkit::TextView::PROPERTY_HORIZONTAL_ALIGNMENT:
-       case Toolkit::TextView::PROPERTY_VERTICAL_ALIGNMENT:
+       case Toolkit::TextView::Property::HORIZONTAL_ALIGNMENT:
+       case Toolkit::TextView::Property::VERTICAL_ALIGNMENT:
        {
          textViewImpl.OnAlignmentPropertySet( index, value );
          break;
@@@ -2264,37 -2255,37 +2255,37 @@@ Property::Value TextView::GetProperty( 
      TextView& textViewImpl( GetImpl( textView ) );
      switch( index )
      {
-       case Toolkit::TextView::PROPERTY_MARKUP_ENABLED:
+       case Toolkit::TextView::Property::MARKUP_ENABLED:
        {
          value = textViewImpl.IsMarkupProcessingEnabled();
          break;
        }
-       case Toolkit::TextView::PROPERTY_TEXT:
+       case Toolkit::TextView::Property::TEXT:
        {
          value = textViewImpl.GetText();
          break;
        }
-       case Toolkit::TextView::PROPERTY_MULTILINE_POLICY:
+       case Toolkit::TextView::Property::MULTILINE_POLICY:
        {
          value = MULTILINE_POLICY_NAME[ textViewImpl.GetMultilinePolicy() ];
          break;
        }
-       case Toolkit::TextView::PROPERTY_WIDTH_EXCEED_POLICY:
+       case Toolkit::TextView::Property::WIDTH_EXCEED_POLICY:
        {
          value = EXCEED_POLICY_NAME[ textViewImpl.GetWidthExceedPolicy() ];
          break;
        }
-       case Toolkit::TextView::PROPERTY_HEIGHT_EXCEED_POLICY:
+       case Toolkit::TextView::Property::HEIGHT_EXCEED_POLICY:
        {
          value = EXCEED_POLICY_NAME[ textViewImpl.GetHeightExceedPolicy() ];
          break;
        }
-       case Toolkit::TextView::PROPERTY_LINE_JUSTIFICATION:
+       case Toolkit::TextView::Property::LINE_JUSTIFICATION:
        {
          value = LINE_JUSTIFICATION_NAME[ textViewImpl.GetLineJustification() ];
          break;
        }
-       case Toolkit::TextView::PROPERTY_FADE_BOUNDARY:
+       case Toolkit::TextView::Property::FADE_BOUNDARY:
        {
          Toolkit::TextView::FadeBoundary boundary = textViewImpl.GetFadeBoundary();
          value = Vector4( static_cast<float>( boundary.mLeft.value ),
                           static_cast<float>( boundary.mBottom.value ) );
          break;
        }
-       case Toolkit::TextView::PROPERTY_LINE_HEIGHT_OFFSET:
+       case Toolkit::TextView::Property::LINE_HEIGHT_OFFSET:
        {
          value = textViewImpl.GetLineHeightOffset().value;
          break;
        }
-       case Toolkit::TextView::PROPERTY_HORIZONTAL_ALIGNMENT:
+       case Toolkit::TextView::Property::HORIZONTAL_ALIGNMENT:
        {
          value = textViewImpl.OnHorizontalAlignmentPropertyGet();
          break;
        }
-       case Toolkit::TextView::PROPERTY_VERTICAL_ALIGNMENT:
+       case Toolkit::TextView::Property::VERTICAL_ALIGNMENT:
        {
          value = textViewImpl.OnVerticalAlignmentPropertyGet();
          break;
  #include "tool-bar-impl.h"
  
  // EXTERNAL INCLUDES
 -#include <dali/public-api/actors/renderable-actor.h>
 +#include <dali/public-api/actors/image-actor.h>
  #include <dali/public-api/animation/constraints.h>
  #include <dali/public-api/object/type-registry.h>
+ #include <dali/public-api/object/type-registry-helper.h>
  
  // INTERNAL INCLUDES
  #include <dali-toolkit/public-api/controls/alignment/alignment.h>
  #include <dali-toolkit/public-api/controls/table-view/table-view.h>
  
- // EXTERNAL INCLUDES
  namespace Dali
  {
  
@@@ -40,12 -39,14 +39,14 @@@ namespace Interna
  
  namespace
  {
  BaseHandle Create()
  {
    return Toolkit::ToolBar::New();
  }
  
- TypeRegistration mType( typeid(Toolkit::ToolBar), typeid(Toolkit::Control), Create );
+ DALI_TYPE_REGISTRATION_BEGIN( Toolkit::ToolBar, Toolkit::Control, Create )
+ DALI_TYPE_REGISTRATION_END()
  
  const float DEFAULT_RELATIVE_SIZE( 0.1f );
  const Toolkit::Alignment::Type DEFAULT_ALIGNMENT( Toolkit::Alignment::HorizontalLeft );
@@@ -73,12 -74,12 +74,12 @@@ void ToolBar::SetBackground( Actor back
    // ToolBar image
    background.SetParentOrigin( Dali::ParentOrigin::TOP_CENTER );
    background.SetAnchorPoint( Dali::AnchorPoint::TOP_CENTER );
-   background.SetSize( mToolBarSize );
+   background.SetPreferredSize( Vector2( mToolBarSize.width, mToolBarSize.height ) );
  
 -  RenderableActor renderableActor = RenderableActor::DownCast( background );
 -  if ( renderableActor )
 +  ImageActor imageActor = ImageActor::DownCast( background );
 +  if ( imageActor )
    {
 -    renderableActor.SetSortModifier( 1.f );
 +    imageActor.SetSortModifier( 1.f );
    }
  
    Self().Add( background );
@@@ -124,8 -125,9 +125,9 @@@ void ToolBar::AddControl( Actor control
  
    // Create an alignment container where to place the control.
    Toolkit::Alignment alignmentContainer = Toolkit::Alignment::New( alignment );
-   alignmentContainer.SetScaling( Toolkit::Alignment::ScaleToFill );
+   alignmentContainer.SetSizeScalePolicy( FIT_WITH_ASPECT_RATIO );
    alignmentContainer.SetPadding( padding );
+   alignmentContainer.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
    alignmentContainer.Add( control );
  
    // Insert the control in the table view.
@@@ -319,6 -321,8 +321,8 @@@ void ToolBar::OnInitialize(
  
    // Layout
    mLayout = Toolkit::TableView::New( 1, 1 );
+   mLayout.SetName( "TOOLBAR_LAYOUT" );
+   mLayout.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
    mLayout.SetPositionInheritanceMode( Dali::USE_PARENT_POSITION );
  
    Self().Add( mLayout );
@@@ -355,7 -359,7 +359,7 @@@ void ToolBar::OnControlChildAdd(Actor& 
  void ToolBar::OnControlSizeSet( const Vector3& targetSize )
  {
    mToolBarSize = targetSize;
-   mBackground.SetSize( mToolBarSize );
+   mBackground.SetPreferredSize( Vector2( mToolBarSize.width, mToolBarSize.height ) );
  }
  
  } // namespace Internal
@@@ -12,6 -12,7 +12,6 @@@ toolkit_src_files = 
     $(toolkit_src_dir)/builder/replacement.cpp \
     $(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/buttons/button-impl.cpp \
     $(toolkit_src_dir)/controls/buttons/check-box-button-impl.cpp \
     $(toolkit_src_dir)/controls/buttons/push-button-impl.cpp \
     $(toolkit_src_dir)/controls/page-turn-view/page-turn-portrait-view-impl.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/relayout-controller-impl.cpp \
-    $(toolkit_src_dir)/controls/relayout-controller.cpp \
-    $(toolkit_src_dir)/controls/relayout-helper.cpp \
     $(toolkit_src_dir)/controls/scroll-bar/scroll-bar-impl.cpp \
     $(toolkit_src_dir)/controls/scroll-component/scroll-bar-internal-impl.cpp \
     $(toolkit_src_dir)/controls/scroll-component/scroll-bar-internal.cpp \
 -   $(toolkit_src_dir)/controls/scrollable/bouncing-effect-actor.cpp \
     $(toolkit_src_dir)/controls/scrollable/item-view/item-view-impl.cpp \
     $(toolkit_src_dir)/controls/scrollable/scrollable-impl.cpp \
     $(toolkit_src_dir)/controls/scrollable/scroll-connector-impl.cpp \
  // EXTERNAL INCLUDES
  #include <stack>
  #include <dali/public-api/actors/image-actor.h>
 -#include <dali/public-api/actors/mesh-actor.h>
  #include <dali/public-api/animation/active-constraint.h>
  #include <dali/public-api/animation/constraint.h>
  #include <dali/public-api/animation/constraints.h>
 -#include <dali/public-api/geometry/mesh.h>
  #include <dali/public-api/object/type-registry.h>
+ #include <dali/public-api/object/type-registry-helper.h>
  #include <dali/public-api/scripting/scripting.h>
+ #include <dali/public-api/size-negotiation/relayout-container.h>
  #include <dali/integration-api/debug.h>
  
  // INTERNAL INCLUDES
- #include <dali-toolkit/internal/controls/relayout-controller.h>
- #include <dali-toolkit/internal/controls/relayout-helper.h>
  #include <dali-toolkit/public-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>
@@@ -43,39 -45,9 +43,9 @@@ namespace Dal
  namespace Toolkit
  {
  
- const Property::Index Control::PROPERTY_BACKGROUND_COLOR      = Internal::Control::CONTROL_PROPERTY_START_INDEX;
- const Property::Index Control::PROPERTY_BACKGROUND            = Internal::Control::CONTROL_PROPERTY_START_INDEX + 1;
- const Property::Index Control::PROPERTY_WIDTH_POLICY          = Internal::Control::CONTROL_PROPERTY_START_INDEX + 2;
- const Property::Index Control::PROPERTY_HEIGHT_POLICY         = Internal::Control::CONTROL_PROPERTY_START_INDEX + 3;
- const Property::Index Control::PROPERTY_MINIMUM_SIZE          = Internal::Control::CONTROL_PROPERTY_START_INDEX + 4;
- const Property::Index Control::PROPERTY_MAXIMUM_SIZE          = Internal::Control::CONTROL_PROPERTY_START_INDEX + 5;
- const Property::Index Control::PROPERTY_KEY_INPUT_FOCUS       = Internal::Control::CONTROL_PROPERTY_START_INDEX + 6;
  namespace
  {
  
- // Signals
- const char* const SIGNAL_KEY_EVENT =    "key-event";
- const char* const SIGNAL_TAPPED =       "tapped";
- const char* const SIGNAL_PANNED =       "panned";
- const char* const SIGNAL_PINCHED =      "pinched";
- const char* const SIGNAL_LONG_PRESSED = "long-pressed";
- // Actions
- const char* const ACTION_CONTROL_ACTIVATED = "control-activated";
- const Scripting::StringEnum< Control::SizePolicy > SIZE_POLICY_STRING_TABLE[] =
- {
-   { "FIXED",      Control::Fixed      },
-   { "MINIMUM",    Control::Minimum    },
-   { "MAXIMUM",    Control::Maximum    },
-   { "RANGE",      Control::Range      },
-   { "FLEXIBLE",   Control::Flexible   },
- };
- const unsigned int SIZE_POLICY_STRING_TABLE_COUNT = sizeof( SIZE_POLICY_STRING_TABLE ) / sizeof( SIZE_POLICY_STRING_TABLE[0] );
  #if defined(DEBUG_ENABLED)
  Integration::Log::Filter* gLogFilter  = Integration::Log::Filter::New(Debug::NoLogging, false, "LOG_CONTROL");
  #endif
@@@ -89,17 -61,20 +59,20 @@@ BaseHandle Create(
    return Internal::Control::New();
  }
  
- TypeRegistration CONTROL_TYPE( typeid(Control), typeid(CustomActor), Create );
+ // Setup signals and actions using the type-registry.
+ DALI_TYPE_REGISTRATION_BEGIN( Control, CustomActor, Create );
  
- // Property Registration after Internal::Control::Impl definition below
+ // Note: Properties are registered separately below,
  
- TypeAction ACTION_TYPE_1( CONTROL_TYPE, ACTION_CONTROL_ACTIVATED, &Internal::Control::DoAction );
+ DALI_SIGNAL_REGISTRATION( Control, "key-event",                 SIGNAL_KEY_EVENT         )
+ DALI_SIGNAL_REGISTRATION( Control, "tapped",                    SIGNAL_TAPPED            )
+ DALI_SIGNAL_REGISTRATION( Control, "panned",                    SIGNAL_PANNED            )
+ DALI_SIGNAL_REGISTRATION( Control, "pinched",                   SIGNAL_PINCHED           )
+ DALI_SIGNAL_REGISTRATION( Control, "long-pressed",              SIGNAL_LONG_PRESSED      )
  
- SignalConnectorType SIGNAL_CONNECTOR_1( CONTROL_TYPE, SIGNAL_KEY_EVENT,     &Internal::Control::DoConnectSignal );
- SignalConnectorType SIGNAL_CONNECTOR_2( CONTROL_TYPE, SIGNAL_TAPPED,        &Internal::Control::DoConnectSignal );
- SignalConnectorType SIGNAL_CONNECTOR_3( CONTROL_TYPE, SIGNAL_PANNED,        &Internal::Control::DoConnectSignal );
- SignalConnectorType SIGNAL_CONNECTOR_4( CONTROL_TYPE, SIGNAL_PINCHED,       &Internal::Control::DoConnectSignal );
- SignalConnectorType SIGNAL_CONNECTOR_5( CONTROL_TYPE, SIGNAL_LONG_PRESSED,  &Internal::Control::DoConnectSignal );
+ DALI_ACTION_REGISTRATION( Control, "control-activated",         ACTION_CONTROL_ACTIVATED )
+ DALI_TYPE_REGISTRATION_END()
  
  /**
   * Structure which holds information about the background of a control
@@@ -119,70 -94,36 +92,6 @@@ struct Backgroun
    }
  };
  
--/**
-  * Helper function to calculate a dimension given the policy of that dimension; the minimum &
-  * maximum values that dimension can be; and the allocated value for that dimension.
-  *
-  * @param[in]  policy     The size policy for that dimension.
-  * @param[in]  minimum    The minimum value that dimension can be.
-  * @param[in]  maximum    The maximum value that dimension can be.
-  * @param[in]  allocated  The value allocated for that dimension.
-  *
-  * @return The value that the dimension should be.
-  *
-  * @note This does not handle Control::Fixed policy.
 - * Creates a white coloured Mesh.
-- */
- float Calculate( Control::SizePolicy policy, float minimum, float maximum, float allocated )
 -Mesh CreateMesh()
--{
-   float size( allocated );
-   switch( policy )
-   {
-     case Control::Fixed:
-     {
-       // Use allocated value
-       break;
-     }
-     case Control::Minimum:
-     {
-       // Size is always at least the minimum.
-       size = std::max( allocated, minimum );
-       break;
-     }
 -  Vector3 white( Color::WHITE );
--
-     case Control::Maximum:
-     {
-       // Size can grow but up to a maximum value.
-       size = std::min( allocated, maximum );
-       break;
-     }
 -  MeshData meshData;
--
-     case Control::Range:
-     {
-       // Size is at least the minimum and can grow up to the maximum
-       size = std::max( size, minimum );
-       size = std::min( size, maximum );
-      break;
-     }
 -  // 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 );
--
-     case Control::Flexible:
-     {
-       // Size grows or shrinks with no limits.
-       size = allocated;
-       break;
-     }
 -  // 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 );
--
-     default:
-     {
-       DALI_ASSERT_DEBUG( false && "This function was not intended to be used by any other policy." );
-       break;
-     }
-   }
 -  // Create the mesh data from the vertices and faces
 -  meshData.SetMaterial( Material::New( "ControlMaterial" ) );
 -  meshData.SetVertices( vertices );
 -  meshData.SetFaceIndices( faces );
 -  meshData.SetHasColor( true );
--
-   return size;
 -  return Mesh::New( meshData );
--}
  
  /**
   * Sets all the required properties for the background actor.
@@@ -197,11 -138,8 +106,8 @@@ void SetupBackgroundActor( Actor actor
    actor.SetPositionInheritanceMode( USE_PARENT_POSITION_PLUS_LOCAL_POSITION );
    actor.SetColorMode( USE_OWN_MULTIPLY_PARENT_COLOR );
    actor.SetZ( BACKGROUND_ACTOR_Z_POSITION );
-   Constraint constraint = Constraint::New<Vector3>( constrainingIndex,
-                                                     ParentSource( Actor::Property::Size ),
-                                                     EqualToConstraint() );
-   actor.ApplyConstraint( constraint );
+   actor.SetRelayoutEnabled( true );
+   actor.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
  }
  
  } // unnamed namespace
@@@ -235,10 -173,7 +141,7 @@@ public
      mLongPressGestureDetector(),
      mCurrentSize(),
      mNaturalSize(),
-     mWidthPolicy( Toolkit::Control::Fixed ),
-     mHeightPolicy( Toolkit::Control::Fixed ),
      mFlags( Control::CONTROL_BEHAVIOUR_NONE ),
-     mInsideRelayout( false ),
      mIsKeyboardNavigationSupported( false ),
      mIsKeyboardFocusGroup( false ),
      mInitialized( false )
  
        switch ( index )
        {
-         case Toolkit::Control::PROPERTY_BACKGROUND_COLOR:
+         case Toolkit::Control::Property::BACKGROUND_COLOR:
          {
            controlImpl.SetBackgroundColor( value.Get< Vector4 >() );
            break;
          }
  
-         case Toolkit::Control::PROPERTY_BACKGROUND:
+         case Toolkit::Control::Property::BACKGROUND_IMAGE:
          {
            if ( value.HasKey( "image" ) )
            {
  
              if ( image )
              {
-               controlImpl.SetBackground( image );
+               controlImpl.SetBackgroundImage( image );
              }
            }
            else if ( value.Get< Property::Map >().Empty() )
            break;
          }
  
-         case Toolkit::Control::PROPERTY_WIDTH_POLICY:
-         {
-           controlImpl.mImpl->mWidthPolicy = Scripting::GetEnumeration< Toolkit::Control::SizePolicy >( value.Get< std::string >().c_str(), SIZE_POLICY_STRING_TABLE, SIZE_POLICY_STRING_TABLE_COUNT );
-           break;
-         }
-         case Toolkit::Control::PROPERTY_HEIGHT_POLICY:
-         {
-           controlImpl.mImpl->mHeightPolicy = Scripting::GetEnumeration< Toolkit::Control::SizePolicy >( value.Get< std::string >().c_str(), SIZE_POLICY_STRING_TABLE, SIZE_POLICY_STRING_TABLE_COUNT );
-           break;
-         }
-         case Toolkit::Control::PROPERTY_MINIMUM_SIZE:
-         {
-           controlImpl.SetMinimumSize( value.Get< Vector3 >() );
-           break;
-         }
-         case Toolkit::Control::PROPERTY_MAXIMUM_SIZE:
-         {
-           controlImpl.SetMaximumSize( value.Get< Vector3 >() );
-           break;
-         }
-         case Toolkit::Control::PROPERTY_KEY_INPUT_FOCUS:
+         case Toolkit::Control::Property::KEY_INPUT_FOCUS:
          {
            if ( value.Get< bool >() )
            {
  
        switch ( index )
        {
-         case Toolkit::Control::PROPERTY_BACKGROUND_COLOR:
+         case Toolkit::Control::Property::BACKGROUND_COLOR:
          {
            value = controlImpl.GetBackgroundColor();
            break;
          }
  
-         case Toolkit::Control::PROPERTY_BACKGROUND:
+         case Toolkit::Control::Property::BACKGROUND_IMAGE:
          {
            Property::Map map;
  
            break;
          }
  
-         case Toolkit::Control::PROPERTY_WIDTH_POLICY:
-         {
-           value = std::string( Scripting::GetEnumerationName< Toolkit::Control::SizePolicy >( controlImpl.mImpl->mWidthPolicy, SIZE_POLICY_STRING_TABLE, SIZE_POLICY_STRING_TABLE_COUNT ) );
-           break;
-         }
-         case Toolkit::Control::PROPERTY_HEIGHT_POLICY:
-         {
-           value = std::string( Scripting::GetEnumerationName< Toolkit::Control::SizePolicy >( controlImpl.mImpl->mHeightPolicy, SIZE_POLICY_STRING_TABLE, SIZE_POLICY_STRING_TABLE_COUNT ) );
-           break;
-         }
-         case Toolkit::Control::PROPERTY_MINIMUM_SIZE:
-         {
-           value = controlImpl.mImpl->GetMinimumSize();
-           break;
-         }
-         case Toolkit::Control::PROPERTY_MAXIMUM_SIZE:
-         {
-           value = controlImpl.mImpl->GetMaximumSize();
-           break;
-         }
-         case Toolkit::Control::PROPERTY_KEY_INPUT_FOCUS:
+         case Toolkit::Control::Property::KEY_INPUT_FOCUS:
          {
            value = controlImpl.HasKeyInputFocus();
            break;
      return value;
    }
  
-   /**
-    * Helper to get minimum size
-    * @return minimum size
-    */
-   inline const Vector3& GetMinimumSize()
-   {
-     if( mMinMaxSize.Count() > MIN_SIZE_INDEX )
-     {
-       return mMinMaxSize[ MIN_SIZE_INDEX ];
-     }
-     else
-     {
-       // its not been allocated so its ZERO
-       return Vector3::ZERO;
-     }
-   }
-   /**
-    * Helper to Set minimum size
-    * @param size to set
-    */
-   inline void SetMinimumSize( const Vector3& size )
-   {
-     if( mMinMaxSize.Count() > MIN_SIZE_INDEX )
-     {
-       mMinMaxSize[ MIN_SIZE_INDEX ] = size;
-     }
-     else
-     {
-       // its not been allocated so push the new value there
-       mMinMaxSize.PushBack( size );
-     }
-   }
-   /**
-    * Helper to get maximum size
-    * @return maximum size
-    */
-   inline const Vector3& GetMaximumSize()
-   {
-     if( mMinMaxSize.Count() > MAX_SIZE_INDEX )
-     {
-       return mMinMaxSize[ MAX_SIZE_INDEX ];
-     }
-     else
-     {
-       // its not been allocated so its MAX_SIZE
-       return MAX_SIZE;
-     }
-   }
-   /**
-    * Helper to Set minimum size
-    * @param size to set
-    */
-   inline void SetMaximumSize( const Vector3& size )
-   {
-     if( mMinMaxSize.Count() > MAX_SIZE_INDEX )
-     {
-       mMinMaxSize[ MAX_SIZE_INDEX ] = size;
-     }
-     else if( mMinMaxSize.Count() > MIN_SIZE_INDEX )
-     {
-       // max has not been allocated, but min has
-       mMinMaxSize.PushBack( size );
-     }
-     else
-     {
-       // min and max both unallocated so allocate both
-       mMinMaxSize.Resize( 2u ); // this will reserve and default construct two Vector3s
-       mMinMaxSize[ MAX_SIZE_INDEX ] = size;
-     }
-   }
    // Data
  
    Control& mControlImpl;
    // @todo change all these to Vector2 when we have a chance to sanitize the public API as well
    Vector3 mCurrentSize; ///< Stores the current control's size, this is the negotiated size
    Vector3 mNaturalSize; ///< Stores the size set through the Actor's API. This is size the actor wants to be. Useful when reset to the initial size is needed.
-   Dali::Vector< Vector3 > mMinMaxSize; ///< Stores the minimum and maximum size if they are set
  
-   Toolkit::Control::SizePolicy mWidthPolicy :3;  ///< Stores the width policy. 3 bits covers 8 values
-   Toolkit::Control::SizePolicy mHeightPolicy :3; ///< Stores the height policy. 3 bits covers 8 values
-   ControlBehaviour mFlags :6;             ///< Flags passed in from constructor. Need to increase this size when new enums are added
-   bool mInsideRelayout:1;                 ///< Detect when were in Relayout
-   bool mIsKeyboardNavigationSupported:1;  ///< Stores whether keyboard navigation is supported by the control.
-   bool mIsKeyboardFocusGroup:1;           ///< Stores whether the control is a focus group.
-   bool mInitialized:1;
+   ControlBehaviour mFlags :6;              ///< Flags passed in from constructor. Need to increase this size when new enums are added
+   bool mIsKeyboardNavigationSupported :1;  ///< Stores whether keyboard navigation is supported by the control.
+   bool mIsKeyboardFocusGroup :1;           ///< Stores whether the control is a focus group.
+   bool mInitialized :1;
  
-   // Properties - these need to be members of Internal::Control::Impl as they need to functions within this class.
+   // Properties - these need to be members of Internal::Control::Impl as they need to function within this class.
    static PropertyRegistration PROPERTY_1;
    static PropertyRegistration PROPERTY_2;
    static PropertyRegistration PROPERTY_3;
-   static PropertyRegistration PROPERTY_4;
-   static PropertyRegistration PROPERTY_5;
-   static PropertyRegistration PROPERTY_6;
-   static PropertyRegistration PROPERTY_7;
  };
  
- PropertyRegistration Control::Impl::PROPERTY_1( CONTROL_TYPE, "background-color", Toolkit::Control::PROPERTY_BACKGROUND_COLOR, Property::VECTOR4, &Control::Impl::SetProperty, &Control::Impl::GetProperty );
- PropertyRegistration Control::Impl::PROPERTY_2( CONTROL_TYPE, "background",       Toolkit::Control::PROPERTY_BACKGROUND,       Property::MAP,     &Control::Impl::SetProperty, &Control::Impl::GetProperty );
- PropertyRegistration Control::Impl::PROPERTY_3( CONTROL_TYPE, "width-policy",     Toolkit::Control::PROPERTY_WIDTH_POLICY,     Property::STRING,  &Control::Impl::SetProperty, &Control::Impl::GetProperty );
- PropertyRegistration Control::Impl::PROPERTY_4( CONTROL_TYPE, "height-policy",    Toolkit::Control::PROPERTY_HEIGHT_POLICY,    Property::STRING,  &Control::Impl::SetProperty, &Control::Impl::GetProperty );
- PropertyRegistration Control::Impl::PROPERTY_5( CONTROL_TYPE, "minimum-size",     Toolkit::Control::PROPERTY_MINIMUM_SIZE,     Property::VECTOR3, &Control::Impl::SetProperty, &Control::Impl::GetProperty );
- PropertyRegistration Control::Impl::PROPERTY_6( CONTROL_TYPE, "maximum-size",     Toolkit::Control::PROPERTY_MAXIMUM_SIZE,     Property::VECTOR3, &Control::Impl::SetProperty, &Control::Impl::GetProperty );
- PropertyRegistration Control::Impl::PROPERTY_7( CONTROL_TYPE, "key-input-focus",  Toolkit::Control::PROPERTY_KEY_INPUT_FOCUS,  Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty );
+ // Properties registered without macro to use specific member variables.
+ PropertyRegistration Control::Impl::PROPERTY_1( typeRegistration, "background-color", Toolkit::Control::Property::BACKGROUND_COLOR, Property::VECTOR4, &Control::Impl::SetProperty, &Control::Impl::GetProperty );
+ PropertyRegistration Control::Impl::PROPERTY_2( typeRegistration, "background-image", Toolkit::Control::Property::BACKGROUND_IMAGE, Property::MAP,     &Control::Impl::SetProperty, &Control::Impl::GetProperty );
+ PropertyRegistration Control::Impl::PROPERTY_3( typeRegistration, "key-input-focus",  Toolkit::Control::Property::KEY_INPUT_FOCUS,  Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty );
  
  Toolkit::Control Control::New()
  {
@@@ -589,79 -392,21 +360,21 @@@ Control::~Control(
    delete mImpl;
  }
  
- void Control::SetSizePolicy( Toolkit::Control::SizePolicy widthPolicy, Toolkit::Control::SizePolicy heightPolicy )
- {
-   bool relayoutRequest( false );
-   if ( ( mImpl->mWidthPolicy != widthPolicy ) || ( mImpl->mHeightPolicy != heightPolicy ) )
-   {
-     relayoutRequest = true;
-   }
-   mImpl->mWidthPolicy = widthPolicy;
-   mImpl->mHeightPolicy = heightPolicy;
-   // Ensure RelayoutRequest is called AFTER new policies have been set.
-   if ( relayoutRequest )
-   {
-     RelayoutRequest();
-   }
- }
- void Control::GetSizePolicy( Toolkit::Control::SizePolicy& widthPolicy, Toolkit::Control::SizePolicy& heightPolicy ) const
- {
-   widthPolicy = mImpl->mWidthPolicy;
-   heightPolicy = mImpl->mHeightPolicy;
- }
- void Control::SetMinimumSize( const Vector3& size )
- {
-   const Vector3& minSize = mImpl->GetMinimumSize();
-   if ( fabsf( minSize.width - size.width ) > Math::MACHINE_EPSILON_1000 ||
-        fabsf( minSize.height - size.height ) > Math::MACHINE_EPSILON_1000 )
-   {
-     mImpl->SetMinimumSize( size );
-     // Only relayout if our control is using the minimum or range policy.
-     if ( ( mImpl->mHeightPolicy == Toolkit::Control::Minimum ) || ( mImpl->mWidthPolicy  == Toolkit::Control::Minimum ) ||
-          ( mImpl->mHeightPolicy == Toolkit::Control::Range   ) || ( mImpl->mWidthPolicy  == Toolkit::Control::Range   ) )
-     {
-       RelayoutRequest();
-     }
-   }
- }
- const Vector3& Control::GetMinimumSize() const
+ Vector3 Control::GetNaturalSize()
  {
-   return mImpl->GetMinimumSize();
+   // could be overridden in derived classes.
+   return mImpl->mNaturalSize;
  }
  
void Control::SetMaximumSize( const Vector3& size )
float Control::CalculateChildSize( const Dali::Actor& child, Dimension dimension )
  {
-   const Vector3& maxSize = mImpl->GetMaximumSize();
-   if ( fabsf( maxSize.width - size.width ) > Math::MACHINE_EPSILON_1000 ||
-        fabsf( maxSize.height - size.height ) > Math::MACHINE_EPSILON_1000 )
-   {
-     mImpl->SetMaximumSize( size );
-     // Only relayout if our control is using the maximum or range policy.
-     if ( ( mImpl->mHeightPolicy == Toolkit::Control::Maximum ) || ( mImpl->mWidthPolicy  == Toolkit::Control::Maximum ) ||
-          ( mImpl->mHeightPolicy == Toolkit::Control::Range   ) || ( mImpl->mWidthPolicy  == Toolkit::Control::Range   ) )
-     {
-       RelayoutRequest();
-     }
-   }
+   // Could be overridden in derived classes.
+   return CalculateChildSizeBase( child, dimension );
  }
  
- const Vector3& Control::GetMaximumSize() const
+ bool Control::RelayoutDependentOnChildren( Dimension dimension )
  {
-   return mImpl->GetMaximumSize();
- }
- Vector3 Control::GetNaturalSize()
- {
-   // could be overridden in derived classes.
-   return mImpl->mNaturalSize;
+   return RelayoutDependentOnChildrenBase( dimension );
  }
  
  float Control::GetHeightForWidth( float width )
@@@ -751,6 -496,17 +464,6 @@@ void Control::SetBackgroundColor( cons
      // Just set the actor color
      background.actor.SetColor( color );
    }
 -  else
 -  {
 -    // Create Mesh Actor
 -    MeshActor meshActor = MeshActor::New( CreateMesh() );
 -
 -    SetupBackgroundActor( meshActor, Actor::Property::SCALE, color );
 -
 -    // Set the background actor before adding so that we do not inform deriving classes
 -    background.actor = meshActor;
 -    Self().Add( meshActor );
 -  }
  
    background.color = color;
  }
@@@ -764,7 -520,7 +477,7 @@@ Vector4 Control::GetBackgroundColor() c
    return Color::TRANSPARENT;
  }
  
- void Control::SetBackground( Image image )
+ void Control::SetBackgroundImage( Image image )
  {
    Background& background( mImpl->GetBackground() );
  
    }
  
    ImageActor imageActor = ImageActor::New( image );
-   SetupBackgroundActor( imageActor, Actor::Property::Size, background.color );
+   SetupBackgroundActor( imageActor, Actor::Property::SIZE, background.color );
  
    // Set the background actor before adding so that we do not inform derived classes
    background.actor = imageActor;
@@@ -836,116 -592,6 +549,6 @@@ bool Control::OnAccessibilityValueChang
    return false; // Accessibility value change action is not handled by default
  }
  
- void Control::NegotiateSize( const Vector2& allocatedSize, ActorSizeContainer& container )
- {
-   Vector2 size;
-   if ( mImpl->mWidthPolicy == Toolkit::Control::Fixed )
-   {
-     if ( mImpl->mHeightPolicy == Toolkit::Control::Fixed )
-     {
-       // If a control says it has a fixed size, then use the size set by the application / control.
-       Vector2 setSize( mImpl->mNaturalSize );
-       if ( setSize != Vector2::ZERO )
-       {
-         size = setSize;
-         // Policy is set to Fixed, so if the application / control has not set one of the dimensions,
-         // then we should use the natural size of the control rather than the full allocation.
-         if ( EqualsZero( size.width ) )
-         {
-           size.width = GetWidthForHeight( size.height );
-         }
-         else if ( EqualsZero( size.height ) )
-         {
-           size.height = GetHeightForWidth( size.width );
-         }
-       }
-       else
-       {
-         // If that is not set then set the size to the control's natural size
-         size = Vector2( GetNaturalSize() );
-       }
-     }
-     else
-     {
-       // Width is fixed so if the application / control has set it, then use that.
-       if ( !EqualsZero( mImpl->mNaturalSize.width ) )
-       {
-         size.width = mImpl->mNaturalSize.width;
-       }
-       else
-       {
-         // Otherwise, set the width to what has been allocated.
-         size.width = allocatedSize.width;
-       }
-       // Height is flexible so ask control what the height should be for our width.
-       size.height = GetHeightForWidth( size.width );
-       // Ensure height is within our policy rules
-       size.height = Calculate( mImpl->mHeightPolicy, GetMinimumSize().height, GetMaximumSize().height, size.height );
-     }
-   }
-   else
-   {
-     if ( mImpl->mHeightPolicy == Toolkit::Control::Fixed )
-     {
-       // Height is fixed so if the application / control has set it, then use that.
-       if ( !EqualsZero( mImpl->mNaturalSize.height ) )
-       {
-         size.height = mImpl->mNaturalSize.height;
-       }
-       else
-       {
-         // Otherwise, set the height to what has been allocated.
-         size.height = allocatedSize.height;
-       }
-       // Width is flexible so ask control what the width should be for our height.
-       size.width = GetWidthForHeight( size.height );
-       // Ensure width is within our policy rules
-       size.width = Calculate( mImpl->mWidthPolicy, mImpl->GetMinimumSize().width, mImpl->GetMaximumSize().width, size.width );
-     }
-     else
-     {
-       // Width and height are BOTH flexible.
-       // Calculate the width and height using the policy rules.
-       size.width = Calculate( mImpl->mWidthPolicy, mImpl->GetMinimumSize().width, mImpl->GetMaximumSize().width, allocatedSize.width );
-       size.height = Calculate( mImpl->mHeightPolicy, mImpl->GetMinimumSize().height, mImpl->GetMaximumSize().height, allocatedSize.height );
-     }
-   }
-   // If the width has not been set, then set to the allocated width.
-   // Also if the width set is greater than the allocated, then set to allocated (no exceed support).
-   if ( EqualsZero( size.width ) || ( size.width > allocatedSize.width ) )
-   {
-     size.width = allocatedSize.width;
-   }
-   // If the height has not been set, then set to the allocated height.
-   // Also if the height set is greater than the allocated, then set to allocated (no exceed support).
-   if ( EqualsZero( size.height ) || ( size.height > allocatedSize.height ) )
-   {
-     size.height = allocatedSize.height;
-   }
-   DALI_LOG_INFO( gLogFilter, Debug::Verbose,
-                  "%p: Natural: [%.2f, %.2f] Allocated: [%.2f, %.2f] Set: [%.2f, %.2f]\n",
-                  Self().GetObjectPtr(),
-                  GetNaturalSize().x, GetNaturalSize().y,
-                  allocatedSize.x, allocatedSize.y,
-                  size.x, size.y );
-   // Avoids relayout again when OnSizeSet callback arrives as a function of us or deriving class calling SetSize()
-   mImpl->mInsideRelayout = true;
-   Self().SetSize( size );
-   // Only relayout controls which requested to be relaid out.
-   OnRelayout( size, container );
-   mImpl->mInsideRelayout = false;
- }
  void Control::SetAsKeyboardFocusGroup(bool isFocusGroup)
  {
    mImpl->mIsKeyboardFocusGroup = isFocusGroup;
@@@ -1065,10 -711,16 +668,16 @@@ Control::Control( ControlBehaviour beha
  
  void Control::Initialize()
  {
    // Calling deriving classes
    OnInitialize();
  
+   // Test if the no size negotiation flag is not set
+   if( ( mImpl->mFlags & NO_SIZE_NEGOTIATION ) == 0 )
+   {
+     // Size negotiate disabled by default, so turn it on for this actor
+     Self().SetRelayoutEnabled( true );
+   }
    if( mImpl->mFlags & REQUIRES_STYLE_CHANGE_SIGNALS )
    {
      Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get();
@@@ -1144,32 -796,6 +753,6 @@@ void Control::DisableGestureDetection(G
    }
  }
  
- void Control::RelayoutRequest()
- {
-   // unfortunate double negative but thats to guarantee new controls get size negotiation
-   // by default and have to "opt-out" if they dont want it
-   if( !(mImpl->mFlags & NO_SIZE_NEGOTIATION) )
-   {
-     Internal::RelayoutController::Request();
-   }
- }
- void Control::Relayout( Actor actor, const Vector2& size, ActorSizeContainer& container )
- {
-   if ( actor )
-   {
-     Toolkit::Control control( Toolkit::Control::DownCast( actor ) );
-     if( control )
-     {
-       control.GetImplementation().NegotiateSize( size, container );
-     }
-     else
-     {
-       container.push_back( ActorSizePair( actor, size ) );
-     }
-   }
- }
  void Control::OnInitialize()
  {
  }
@@@ -1235,16 -861,26 +818,26 @@@ void Control::OnControlSizeSet( const V
  {
  }
  
- void Control::OnRelayout( const Vector2& size, ActorSizeContainer& container )
+ void Control::OnCalculateRelayoutSize( Dimension dimension )
+ {
+ }
+ void Control::OnLayoutNegotiated( float size, Dimension dimension )
  {
-   unsigned int numChildren = Self().GetChildCount();
+ }
  
-   for( unsigned int i=0; i<numChildren; ++i )
+ void Control::OnRelayout( const Vector2& size, RelayoutContainer& container )
+ {
+   for( unsigned int i = 0, numChildren = Self().GetChildCount(); i < numChildren; ++i )
    {
-     container.push_back( ActorSizePair( Self().GetChildAt(i), size ) );
+     container.Add( Self().GetChildAt( i ), size );
    }
  }
  
+ void Control::OnSetResizePolicy( ResizePolicy policy, Dimension dimension )
+ {
+ }
  void Control::OnKeyInputFocusGained()
  {
    // Do Nothing
@@@ -1280,15 -916,8 +873,8 @@@ bool Control::OnMouseWheelEvent(const M
    return false; // Do not consume
  }
  
- Actor Control::GetChildByAlias(const std::string& actorAlias)
- {
-   return Actor();
- }
  void Control::OnStageConnection()
  {
-   RelayoutRequest();
    // Notify derived classes.
    OnControlStageConnection();
  }
@@@ -1307,9 -936,6 +893,6 @@@ void Control::OnChildAdd(Actor& child
      return;
    }
  
-   // Request for relayout as we may need to position the new child and old ones
-   RelayoutRequest();
    // Notify derived classes.
    OnControlChildAdd( child );
  }
@@@ -1322,16 -948,13 +905,13 @@@ void Control::OnChildRemove(Actor& chil
      return;
    }
  
-   // Request for relayout as we may need to re-position the old child
-   RelayoutRequest();
    // Notify derived classes.
    OnControlChildRemove( child );
  }
  
  void Control::OnSizeSet(const Vector3& targetSize)
  {
-   if( ( !mImpl->mInsideRelayout ) && ( targetSize != mImpl->mNaturalSize ) )
+   if( targetSize != mImpl->mNaturalSize )
    {
      // Only updates size if set through Actor's API
      mImpl->mNaturalSize = targetSize;
@@@ -7,6 -7,7 +7,6 @@@ public_api_src_files = 
    $(public_api_src_dir)/controls/control-impl.cpp \
    $(public_api_src_dir)/controls/control.cpp \
    $(public_api_src_dir)/controls/alignment/alignment.cpp \
 -  $(public_api_src_dir)/controls/bubble-effect/bubble-emitter.cpp \
    $(public_api_src_dir)/controls/buttons/button.cpp \
    $(public_api_src_dir)/controls/buttons/check-box-button.cpp \
    $(public_api_src_dir)/controls/buttons/push-button.cpp \
@@@ -28,8 -29,6 +28,6 @@@
    $(public_api_src_dir)/controls/scrollable/item-view/item-factory.cpp \
    $(public_api_src_dir)/controls/scrollable/item-view/item-layout.cpp \
    $(public_api_src_dir)/controls/scrollable/item-view/item-view.cpp \
-   $(public_api_src_dir)/controls/scrollable/item-view/navigation-layout.cpp \
-   $(public_api_src_dir)/controls/scrollable/item-view/roll-layout.cpp \
    $(public_api_src_dir)/controls/scrollable/item-view/spiral-layout.cpp \
    $(public_api_src_dir)/controls/scrollable/scroll-view/scroll-view-carousel-effect.cpp \
    $(public_api_src_dir)/controls/scrollable/scroll-view/scroll-view-constraints.cpp \
    $(public_api_src_dir)/focus-manager/keyboard-focus-manager.cpp \
    $(public_api_src_dir)/focus-manager/keyinput-focus-manager.cpp \
    $(public_api_src_dir)/markup-processor/markup-processor.cpp \
 -  $(public_api_src_dir)/shader-effects/bubble-effect/bubble-effect.cpp \
 -  $(public_api_src_dir)/shader-effects/bubble-effect/color-adjuster.cpp \
    $(public_api_src_dir)/shader-effects/alpha-discard-effect.cpp \
    $(public_api_src_dir)/shader-effects/bendy-effect.cpp \
    $(public_api_src_dir)/shader-effects/blind-effect.cpp \
 -  $(public_api_src_dir)/shader-effects/bouncing-effect.cpp \
    $(public_api_src_dir)/shader-effects/carousel-effect.cpp \
    $(public_api_src_dir)/shader-effects/displacement-effect.cpp \
    $(public_api_src_dir)/shader-effects/dissolve-effect.cpp \
@@@ -126,7 -128,8 +124,7 @@@ public_api_buttons_header_files = 
  public_api_bloom_view_header_files = \
    $(public_api_src_dir)/controls/bloom-view/bloom-view.h
  
 -public_api_bubble_emitter_header_files = \
 -  $(public_api_src_dir)/controls/bubble-effect/bubble-emitter.h
 +public_api_bubble_emitter_header_files =
  
  public_api_cluster_header_files = \
    $(public_api_src_dir)/controls/cluster/cluster-style.h \
@@@ -153,8 -156,6 +151,6 @@@ public_api_item_view_header_files = 
    $(public_api_src_dir)/controls/scrollable/item-view/item-layout.h \
    $(public_api_src_dir)/controls/scrollable/item-view/item-view-declarations.h \
    $(public_api_src_dir)/controls/scrollable/item-view/item-view.h \
-   $(public_api_src_dir)/controls/scrollable/item-view/navigation-layout.h \
-   $(public_api_src_dir)/controls/scrollable/item-view/roll-layout.h \
    $(public_api_src_dir)/controls/scrollable/item-view/spiral-layout.h
  
  public_api_magnifier_header_files = \
@@@ -231,6 -232,7 +227,6 @@@ public_api_shader_effects_header_files 
    $(public_api_src_dir)/shader-effects/alpha-discard-effect.h \
    $(public_api_src_dir)/shader-effects/bendy-effect.h \
    $(public_api_src_dir)/shader-effects/blind-effect.h \
 -  $(public_api_src_dir)/shader-effects/bouncing-effect.h \
    $(public_api_src_dir)/shader-effects/carousel-effect.h \
    $(public_api_src_dir)/shader-effects/displacement-effect.h \
    $(public_api_src_dir)/shader-effects/dissolve-effect.h \
    $(public_api_src_dir)/shader-effects/swirl-effect.h \
    $(public_api_src_dir)/shader-effects/water-effect.h
  
 -public_api_bubble_effect_header_files =  \
 -  $(public_api_src_dir)/shader-effects/bubble-effect/bubble-effect.h \
 -  $(public_api_src_dir)/shader-effects/bubble-effect/color-adjuster.h
 +public_api_bubble_effect_header_files =
  
  public_api_styling_header_files = \
    $(public_api_src_dir)/styling/style-manager.h
@@@ -22,7 -22,6 +22,7 @@@
  #include <dali/public-api/animation/active-constraint.h>
  #include <dali/public-api/animation/constraint.h>
  #include <dali/public-api/animation/constraints.h>
 +#include <dali/public-api/actors/image-actor.h>
  
  namespace Dali
  {
@@@ -85,16 -84,12 +85,16 @@@ MotionBlurEffect::~MotionBlurEffect(
  MotionBlurEffect MotionBlurEffect::Apply( RenderableActor renderable )
  {
    MotionBlurEffect newEffect = New( MOTION_BLUR_NUM_SAMPLES );
 -  renderable.SetShaderEffect( newEffect );
 +  ImageActor imageActor = ImageActor::DownCast(renderable);
 +  if( imageActor )
 +  {
 +    imageActor.SetShaderEffect( newEffect );
 +  }
  
    Dali::Property::Index uModelProperty = newEffect.GetPropertyIndex( MOTION_BLUR_MODEL_LASTFRAME );
  
    Constraint constraint = Constraint::New<Matrix>( uModelProperty,
-                                                    Source( renderable, Actor::Property::WorldMatrix ),
+                                                    Source( renderable, Actor::Property::WORLD_MATRIX ),
                                                     EqualToConstraint() );
  
    // and set up constraint.
@@@ -22,7 -22,6 +22,7 @@@
  #include <dali/public-api/animation/active-constraint.h>
  #include <dali/public-api/animation/constraint.h>
  #include <dali/public-api/animation/constraints.h>
 +#include <dali/public-api/actors/image-actor.h>
  
  namespace Dali
  {
@@@ -99,17 -98,12 +99,17 @@@ MotionStretchEffect::~MotionStretchEffe
  MotionStretchEffect MotionStretchEffect::Apply( RenderableActor renderable )
  {
    MotionStretchEffect newEffect = New();
 -  renderable.SetShaderEffect( newEffect );
 +
 +  ImageActor imageActor = ImageActor::DownCast(renderable);
 +  if( imageActor )
 +  {
 +    imageActor.SetShaderEffect( newEffect );
 +  }
  
    Dali::Property::Index uModelProperty = newEffect.GetPropertyIndex( MOTION_STRETCH_MODELVIEW_LASTFRAME );
  
    Constraint constraint = Constraint::New<Matrix>( uModelProperty,
-                                                    Source( renderable, Actor::Property::WorldMatrix ),
+                                                    Source( renderable, Actor::Property::WORLD_MATRIX ),
                                                     EqualToConstraint() );
  
    // and set up constraint.