Merge "Merge branch 'tizen' into devel/new_mesh" into devel/new_mesh
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / public-api / controls / control-impl.cpp
index 7393a3a..c720ee1 100644 (file)
 #include <limits>
 #include <stack>
 #include <dali/public-api/actors/image-actor.h>
-#include <dali/devel-api/actors/mesh-actor.h>
 #include <dali/public-api/animation/constraint.h>
 #include <dali/public-api/animation/constraints.h>
-#include <dali/devel-api/geometry/mesh.h>
 #include <dali/public-api/object/type-registry.h>
 #include <dali/devel-api/object/type-registry-helper.h>
 #include <dali/devel-api/scripting/scripting.h>
@@ -34,7 +32,7 @@
 #include <dali/integration-api/debug.h>
 
 // INTERNAL INCLUDES
-#include <dali-toolkit/public-api/focus-manager/keyinput-focus-manager.h>
+#include <dali-toolkit/devel-api/focus-manager/keyinput-focus-manager.h>
 #include <dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h>
 #include <dali-toolkit/public-api/controls/control.h>
 #include <dali-toolkit/devel-api/styling/style-manager.h>
@@ -49,8 +47,6 @@ namespace Toolkit
 namespace
 {
 
-const float BACKGROUND_ACTOR_Z_POSITION( -0.1f );
-
 /**
  * Creates control through type registry
  */
@@ -67,7 +63,7 @@ BaseHandle Create()
  * @return true if action has been accepted by this control
  */
 const char* ACTION_CONTROL_ACTIVATED = "control-activated";
-static bool DoAction( BaseObject* object, const std::string& actionName, const PropertyValueContainer& attributes )
+static bool DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes )
 {
   bool ret = false;
 
@@ -185,10 +181,10 @@ struct Background
 /**
  * Creates a white coloured Mesh.
  */
-Mesh CreateMesh()
+Vector3 CreateMesh()
 {
   Vector3 white( Color::WHITE );
-
+  /*
   MeshData meshData;
 
   // Create vertices with a white color (actual color is set by actor color)
@@ -209,8 +205,9 @@ Mesh CreateMesh()
   meshData.SetVertices( vertices );
   meshData.SetFaceIndices( faces );
   meshData.SetHasColor( true );
-
-  return Mesh::New( meshData );
+  */
+  return white;
+  //return Mesh::New( meshData );
 }
 
 /**
@@ -224,7 +221,6 @@ void SetupBackgroundActor( Actor actor, const Vector4& color )
   actor.SetColor( color );
   actor.SetPositionInheritanceMode( USE_PARENT_POSITION_PLUS_LOCAL_POSITION );
   actor.SetColorMode( USE_OWN_MULTIPLY_PARENT_COLOR );
-  actor.SetZ( BACKGROUND_ACTOR_Z_POSITION );
   actor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
 }
 
@@ -240,7 +236,6 @@ void SetupBackgroundActorConstrained( Actor actor, Property::Index constrainingI
   actor.SetColor( color );
   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>( actor,
                                                     constrainingIndex,
@@ -271,7 +266,8 @@ public:
     mLongPressGestureDetector(),
     mFlags( Control::ControlBehaviour( ACTOR_BEHAVIOUR_NONE ) ),
     mIsKeyboardNavigationSupported( false ),
-    mIsKeyboardFocusGroup( false )
+    mIsKeyboardFocusGroup( false ),
+    mAddRemoveBackgroundChild( false )
   {
   }
 
@@ -466,6 +462,7 @@ public:
   ControlBehaviour mFlags :CONTROL_BEHAVIOUR_FLAG_COUNT;    ///< Flags passed in from constructor.
   bool mIsKeyboardNavigationSupported :1;  ///< Stores whether keyboard navigation is supported by the control.
   bool mIsKeyboardFocusGroup :1;           ///< Stores whether the control is a focus group.
+  bool mAddRemoveBackgroundChild:1;        ///< Flag to know when we are adding or removing our own actor to avoid call to OnControlChildAdd
 
   // Properties - these need to be members of Internal::Control::Impl as they need to function within this class.
   static PropertyRegistration PROPERTY_1;
@@ -526,6 +523,7 @@ void Control::SetBackgroundColor( const Vector4& color )
     // Just set the actor color
     background.actor.SetColor( color );
   }
+  /*
   else
   {
     // Create Mesh Actor
@@ -533,10 +531,14 @@ void Control::SetBackgroundColor( const Vector4& color )
 
     SetupBackgroundActorConstrained( 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 );
+    // Set the flag to avoid notifying children
+    mImpl->mAddRemoveBackgroundChild = true;
+    // use insert to guarantee its the first child (so that OVERLAY mode works)
+    Self().Insert( 0, meshActor );
+    mImpl->mAddRemoveBackgroundChild = false;
   }
+  */
 
   background.color = color;
 }
@@ -556,17 +558,24 @@ void Control::SetBackgroundImage( Image image )
 
   if ( background.actor )
   {
-    // Remove Current actor, unset AFTER removal so that we do not inform deriving classes
+    // Remove Current actor, unset AFTER removal
+    mImpl->mAddRemoveBackgroundChild = true;
     Self().Remove( background.actor );
+    mImpl->mAddRemoveBackgroundChild = false;
     background.actor.Reset();
   }
 
+  /*
   ImageActor imageActor = ImageActor::New( image );
   SetupBackgroundActor( imageActor, background.color );
 
   // Set the background actor before adding so that we do not inform derived classes
   background.actor = imageActor;
-  Self().Add( imageActor );
+  mImpl->mAddRemoveBackgroundChild = true;
+  // use insert to guarantee its the first child (so that OVERLAY mode works)
+  Self().Insert( 0, imageActor );
+  mImpl->mAddRemoveBackgroundChild = false;
+  */
 }
 
 void Control::ClearBackground()
@@ -574,7 +583,9 @@ void Control::ClearBackground()
   if ( mImpl->mBackground )
   {
     Background& background( mImpl->GetBackground() );
+    mImpl->mAddRemoveBackgroundChild = true;
     Self().Remove( background.actor );
+    mImpl->mAddRemoveBackgroundChild = false;
 
     delete mImpl->mBackground;
     mImpl->mBackground = NULL;
@@ -734,7 +745,7 @@ bool Control::OnAccessibilityValueChange(bool isIncrease)
   return false; // Accessibility value change action is not handled by default
 }
 
-Actor Control::GetNextKeyboardFocusableActor(Actor currentFocusedActor, Toolkit::Control::KeyboardFocusNavigationDirection direction, bool loopEnabled)
+Actor Control::GetNextKeyboardFocusableActor(Actor currentFocusedActor, Toolkit::Control::KeyboardFocus::Direction direction, bool loopEnabled)
 {
   return Actor();
 }
@@ -900,8 +911,8 @@ void Control::OnKeyInputFocusLost()
 
 void Control::OnChildAdd(Actor& child)
 {
-  // If this is the background actor, then we do not want to relayout or inform deriving classes
-  if ( mImpl->mBackground && ( child == mImpl->mBackground->actor ) )
+  // If this is the background actor, then we do not want to inform deriving classes
+  if ( mImpl->mAddRemoveBackgroundChild )
   {
     return;
   }
@@ -912,8 +923,8 @@ void Control::OnChildAdd(Actor& child)
 
 void Control::OnChildRemove(Actor& child)
 {
-  // If this is the background actor, then we do not want to relayout or inform deriving classes
-  if ( mImpl->mBackground && ( child == mImpl->mBackground->actor ) )
+  // If this is the background actor, then we do not want to inform deriving classes
+  if ( mImpl->mAddRemoveBackgroundChild )
   {
     return;
   }
@@ -947,7 +958,7 @@ bool Control::OnKeyEvent(const KeyEvent& event)
   return false; // Do not consume
 }
 
-bool Control::OnMouseWheelEvent(const MouseWheelEvent& event)
+bool Control::OnWheelEvent(const WheelEvent& event)
 {
   return false; // Do not consume
 }