+ * @brief Enumeration for the constructor flags.
+ * @SINCE_1_0.0
+ */
+ enum ActorFlags
+ {
+ ACTOR_BEHAVIOUR_NONE = 0, ///< Use if no change to default behaviour is needed. @DEPRECATED_1_2_10
+ ACTOR_BEHAVIOUR_DEFAULT = 0, ///< Use to provide default behaviour (size negotiation is on, event callbacks are not called). @SINCE_1_2_10
+ DISABLE_SIZE_NEGOTIATION = 1 << 0, ///< True if control does not need size negotiation, i.e. it can be skipped in the algorithm @SINCE_1_0.0
+ REQUIRES_TOUCH_EVENTS = 1 << 1, ///< True if the OnTouchEvent() callback is required. @SINCE_1_0.0
+ REQUIRES_HOVER_EVENTS = 1 << 2, ///< True if the OnHoverEvent() callback is required. @SINCE_1_0.0
+ REQUIRES_WHEEL_EVENTS = 1 << 3, ///< True if the OnWheelEvent() callback is required. @SINCE_1_0.0
+
+ LAST_ACTOR_FLAG ///< Special marker for last actor flag @SINCE_1_0.0
+ };
+
+ static const int32_t ACTOR_FLAG_COUNT = Log< LAST_ACTOR_FLAG - 1 >::value + 1; ///< Value for deriving classes to continue on the flag enum
+
+ /**
+ * @brief Creates a CustomActorImpl.
+ * @SINCE_1_0.0
+ * @param[in] flags Bitfield of ActorFlags to define behaviour
+ */
+ CustomActorImpl( ActorFlags flags );
+
+ // Size negotiation helpers
+
+ /**
+ * @brief Requests a relayout, which means performing a size negotiation on this actor, its parent and children (and potentially whole scene).
+ *
+ * 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.
+ *
+ * @SINCE_1_0.0
+ * @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 Provides the Actor implementation of GetHeightForWidth.
+ * @SINCE_1_0.0
+ * @param[in] width Width to use
+ * @return The height based on the width
+ */
+ float GetHeightForWidthBase( float width );
+
+ /**
+ * @brief Provides the Actor implementation of GetWidthForHeight.
+ * @SINCE_1_0.0
+ * @param[in] height Height to use
+ * @return The width based on the height
+ */
+ float GetWidthForHeightBase( float height );
+
+ /**
+ * @brief Calculates the size for a child using the base actor object.
+ *
+ * @SINCE_1_0.0
+ * @param[in] child The child actor to calculate the size for
+ * @param[in] dimension The dimension to calculate the size for. E.g. width or height
+ * @return Return the calculated size for the given dimension. If more than one dimension is requested, just return the first one found