#include <dali/public-api/events/pan-gesture.h>
#include <dali/public-api/events/pinch-gesture.h>
#include <dali/public-api/events/tap-gesture.h>
-#include <dali/public-api/object/property-index.h>
+#include <dali/public-api/object/property-index-ranges.h>
#include <dali/public-api/object/type-info.h>
// INTERNAL INCLUDES
namespace Internal DALI_INTERNAL
{
-class RelayoutControllerImpl;
class KeyInputFocusManager;
}
-typedef std::pair< Actor, Vector2 > ActorSizePair; ///< Pair of actor and size
-typedef std::vector< ActorSizePair > ActorSizeContainer; ///< Container of actors and their sizes
-
namespace Internal
{
{
public:
- // Properties
- enum
- {
- CONTROL_PROPERTY_START_INDEX = PROPERTY_REGISTRATION_START_INDEX,
- CONTROL_PROPERTY_END_INDEX = CONTROL_PROPERTY_START_INDEX + 1000 ///< Reserving 1000 property indices
- };
-
// Creation & Destruction
/**
// Size negotiation
/**
- * @copydoc Toolkit::Control::SetSizePolicy()
+ * @copydoc Dali::CustomActorImpl::GetHeightForWidth()
*/
- void SetSizePolicy( Toolkit::Control::SizePolicy widthPolicy, Toolkit::Control::SizePolicy heightPolicy );
-
- /**
- * @copydoc Toolkit::Control::GetSizePolicy()
- */
- void GetSizePolicy( Toolkit::Control::SizePolicy& widthPolicy, Toolkit::Control::SizePolicy& heightPolicy ) const;
-
- /**
- * @copydoc Toolkit::Control::SetMinimumSize()
- */
- void SetMinimumSize( const Vector3& size );
-
- /**
- * @copydoc Toolkit::Control::GetMinimumSize()
- */
- const Vector3& GetMinimumSize() const;
-
- /**
- * @copydoc Toolkit::Control::SetMaximumSize()
- */
- void SetMaximumSize( const Vector3& size );
+ virtual float GetHeightForWidth( float width );
/**
- * @copydoc Toolkit::Control::GetMaximumSize()
+ * @copydoc Dali::CustomActorImpl::GetWidthForHeight()
*/
- const Vector3& GetMaximumSize() const;
+ virtual float GetWidthForHeight( float height );
/**
* @copydoc Toolkit::Control::GetNaturalSize()
virtual Vector3 GetNaturalSize();
/**
- * @brief This method is called during size negotiation when a height is required for a given width.
- *
- * Derived classes should override this if they wish to customize the height returned.
- *
- * @param width to use.
- * @return the height based on the width.
- */
- virtual float GetHeightForWidth( float width );
-
- /**
- * @brief This method is called during size negotiation when a width is required for a given height.
- *
- * Derived classes should override this if they wish to customize the width returned.
- *
- * @param height to use.
- * @return the width based on the width.
- */
- virtual float GetWidthForHeight( float height );
-
- /**
* @brief Retrieves the current Control's size.
*
* @return The control's size.
// Background
/**
+ * @copydoc Dali::Toolkit::Control::SetStyleName
+ */
+ void SetStyleName( const std::string& styleName );
+
+ /**
+ * @copydoc Dali::Toolkit::Control::GetStyleName
+ */
+ const std::string& GetStyleName() const;
+
+ /**
* @copydoc Dali::Toolkit::Control::SetBackgroundColor
*/
void SetBackgroundColor( const Vector4& color );
Vector4 GetBackgroundColor() const;
/**
- * @copydoc Dali::Toolkit::Control::SetBackground
+ * @copydoc Dali::Toolkit::Control::SetBackgroundImage
*/
- void SetBackground( Image image );
+ void SetBackgroundImage( Image image );
/**
* @copydoc Dali::Toolkit::Control::ClearBackground
*/
virtual bool OnAccessibilityValueChange(bool isIncrease);
- // Called by the RelayoutController
-
- /**
- * @brief Called by the RelayoutController to negotiate the size of a control.
- *
- * The size allocated by the the algorithm is passed in which the
- * control must adhere to. A container is passed in as well which
- * the control should populate with actors it has not / or does not
- * need to handle in its size negotiation.
- *
- * @param[in] size The allocated size.
- * @param[in,out] container The container that holds actors that are fed back into the
- * RelayoutController algorithm.
- */
- DALI_INTERNAL void NegotiateSize( const Vector2& size, ActorSizeContainer& container );
-
// Keyboard Focus
/**
// Flags for the constructor
enum ControlBehaviour
{
- CONTROL_BEHAVIOUR_NONE = 0,
- REQUIRES_TOUCH_EVENTS = 1<<1, ///< True if the OnTouchEvent() callback is required.
- REQUIRES_STYLE_CHANGE_SIGNALS = 1<<2, ///< True if needs to monitor style change signals such as theme/font change
- NO_SIZE_NEGOTIATION = 1<<3, ///< True if control does not need size negotiation, i.e. it can be skipped in the algorithm
- REQUIRES_HOVER_EVENTS = 1<<4, ///< True if the OnHoverEvent() callback is required.
- REQUIRES_MOUSE_WHEEL_EVENTS = 1<<5 ///< True if the OnMouseWheelEvent() callback is required.
+ REQUIRES_STYLE_CHANGE_SIGNALS = 1 << ( CustomActorImpl::ACTOR_FLAG_COUNT + 0 ), ///< True if needs to monitor style change signals such as theme/font change
+ REQUIRES_KEYBOARD_NAVIGATION_SUPPORT = 1 << ( CustomActorImpl::ACTOR_FLAG_COUNT + 1 ), ///< True if needs to support keyboard navigation
+
+ LAST_CONTROL_BEHAVIOUR_FLAG
};
+ static const int CONTROL_BEHAVIOUR_FLAG_COUNT = Log< LAST_CONTROL_BEHAVIOUR_FLAG - 1 >::value + 1; ///< Total count of flags
+
/**
* @brief Create a Control.
*
*/
void DisableGestureDetection(Gesture::Type type);
- // Size Negotiation
-
/**
- * @brief Request a relayout, which means performing a size negotiation on this control, its parent and children (and potentially whole scene)
- *
- * This method is automatically called from OnStageConnection(), OnChildAdd(),
- * OnChildRemove(), SetSizePolicy(), SetMinimumSize() and SetMaximumSize().
- *
- * This method can also be called from a derived class every time it needs a different size.
- * At the end of event processing, the relayout process starts and
- * all controls which requested Relayout will have their sizes (re)negotiated.
- *
- * @note RelayoutRequest() can be called multiple times; the size negotiation is still
- * only performed once, i.e. there is no need to keep track of this in the calling side.
- */
- void RelayoutRequest();
-
- /**
- * @brief Helper method for controls to Relayout their children if
- * they do not know whether that child is a control or not.
- *
- * @param[in] actor The actor to relayout.
- * @param[in] size The size to allocate to the actor.
- * @param[in,out] container The container that holds actors that have not been allocated a size yet.
+ * @copydoc Dali::CustomActorImpl::RelayoutDependentOnChildren()
*/
- static void Relayout( Actor actor, const Vector2& size, ActorSizeContainer& container );
+ virtual bool RelayoutDependentOnChildren( Dimension::Type dimension = Dimension::ALL_DIMENSIONS );
private:
virtual void OnActivated();
/**
- * @brief This method should be overridden by deriving classes when
- * they wish to be notified when the style manager changes the theme.
+ * @brief This method should be overridden by deriving classes requiring notifications when the style changes.
*
* @param[in] styleManager The StyleManager object.
+ * @param[in] change Information denoting what has changed.
*/
- virtual void OnThemeChange( Toolkit::StyleManager styleManager );
-
- /**
- * @brief This method should be overridden by deriving classes when
- * they wish to be notified when the style changes the default font.
- *
- * @param[in] defaultFontChange Information denoting whether the default font has changed.
- * @param[in] defaultFontSizeChange Information denoting whether the default font size has changed.
- */
- virtual void OnFontChange( bool defaultFontChange, bool defaultFontSizeChange );
+ virtual void OnStyleChange( Toolkit::StyleManager styleManager, StyleChange change );
/**
* @brief Called whenever a pinch gesture is detected on this control.
virtual void OnControlSizeSet( const Vector3& size );
/**
- * @brief Called after the size negotiation has been finished for this control.
- *
- * The control is expected to assign this given size to itself/its children.
- *
- * Should be overridden by derived classes if they need to layout
- * actors differently after certain operations like add or remove
- * actors, resize or after changing specific properties.
- *
- * Note! As this function is called from inside the size negotiation algorithm, you cannot
- * call RequestRelayout (the call would just be ignored)
- *
- * @param[in] size The allocated size.
- * @param[in,out] container The control should add actors to this container that it is not able
- * to allocate a size for.
- */
- virtual void OnRelayout( const Vector2& size, ActorSizeContainer& container );
-
- /**
* @brief Called when the control gains key input focus.
*
* Should be overridden by derived classes if they need to customize what happens when focus is gained.
virtual bool OnMouseWheelEvent(const MouseWheelEvent& event);
/**
- * @copydoc Dali::CustomActorImpl::GetChildByAlias(const std::string& actorAlias)
+ * @copydoc Dali::CustomActorImpl::OnCalculateRelayoutSize()
+ */
+ virtual void OnCalculateRelayoutSize( Dimension::Type dimension );
+
+ /**
+ * @copydoc Dali::CustomActorImpl::OnLayoutNegotiated()
+ */
+ virtual void OnLayoutNegotiated( float size, Dimension::Type dimension );
+
+ /**
+ * @copydoc Dali::CustomActorImpl::OnRelayout()
+ */
+ virtual void OnRelayout( const Vector2& size, RelayoutContainer& container );
+
+ /**
+ * @copydoc Dali::CustomActorImpl::OnSetResizePolicy()
*/
- virtual Actor GetChildByAlias(const std::string& actorAlias);
+ virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension );
+
+ /**
+ * @copydoc Dali::CustomActorImpl::CalculateChildSize()
+ */
+ virtual float CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension );
// From CustomActorImpl, derived classes should NOT override these.
*/
virtual void SignalDisconnected( SlotObserver* slotObserver, CallbackBase* callback );
- // Style
-
- /**
- * @brief This method is the callback for the StyleChangeSignal from StyleManager
- *
- * @param[in] styleManager The StyleManager Object
- * @param[in] change Information denoting what has changed.
- */
- DALI_INTERNAL void DoStyleChange( Toolkit::StyleManager styleManager, StyleChange change );
-
private:
// Undefined