X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Fintegration-api%2Fscene.h;h=7d97dd3f5a2407489d158601f03cfff303490aee;hb=0741b58e8e53e8ea7b897c2e21aac6b4da733192;hp=092b6c355f83562679e41c2b56c07a293870219c;hpb=1e406489333bc9fbf0d6beaca0c3919231b80fc9;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/integration-api/scene.h b/dali/integration-api/scene.h index 092b6c3..7d97dd3 100644 --- a/dali/integration-api/scene.h +++ b/dali/integration-api/scene.h @@ -2,7 +2,7 @@ #define DALI_SCENE_H /* - * Copyright (c) 2019 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,29 +18,31 @@ * */ +// EXTERNAL INCLUDES +#include + // INTERNAL INCLUDES -#include +#include #include +#include +#include namespace Dali { - class Actor; class KeyEvent; class Layer; class RenderTaskList; -class TouchData; +class TouchEvent; class WheelEvent; namespace Internal DALI_INTERNAL { - class Scene; +class Scene; } namespace Integration { - -class RenderSurface; struct Event; /** @@ -52,19 +54,22 @@ struct Event; class DALI_CORE_API Scene : public BaseHandle { public: - typedef Signal< void () > EventProcessingFinishedSignalType; ///< Event Processing finished signal type - typedef Signal< void (const Dali::KeyEvent&) > KeyEventSignalType; ///< Key event signal type - typedef Signal< void (const Dali::TouchData&) > TouchSignalType; ///< Touch signal type - typedef Signal< void (const Dali::WheelEvent&) > WheelEventSignalType; ///< Touched signal type + using EventProcessingFinishedSignalType = Signal; ///< Event Processing finished signal type + using KeyEventSignalType = Signal; ///< Key event signal type + using KeyEventGeneratedSignalType = Signal; ///< key event generated signal type + using TouchEventSignalType = Signal; ///< Touch signal type + using WheelEventSignalType = Signal; ///< WheelEvent signal type + + using FrameCallbackContainer = std::vector, int32_t> >; /** * @brief Create an initialized Scene handle. * - * @param[in] size The size of the scene in pixels as a Vector + * @param[in] size The size of the set surface for this scene * * @return a handle to a newly allocated Dali resource. */ - static Scene New( const Size& size ); + static Scene New(Size size); /** * @brief Downcast an Object handle to Scene handle. @@ -74,7 +79,7 @@ public: * @param[in] handle to An object * @return handle to a Scene object or an uninitialized handle */ - static Scene DownCast( BaseHandle handle ); + static Scene DownCast(BaseHandle handle); /** * @brief Create an uninitialized Scene handle. @@ -114,7 +119,7 @@ public: * @pre The actor has been initialized. * @pre The actor does not have a parent. */ - void Add(Actor& actor); + void Add(Actor actor); /** * @brief Removes a child Actor from the Scene. @@ -123,7 +128,7 @@ public: * @param[in] actor The child * @pre The actor has been added to the stage. */ - void Remove(Actor& actor); + void Remove(Actor actor); /** * @brief Returns the size of the Scene in pixels as a Vector. @@ -139,7 +144,7 @@ public: * Sets horizontal and vertical pixels per inch value that is used by the display * @param[in] dpi Horizontal and vertical dpi value */ - void SetDpi( Vector2 dpi ); + void SetDpi(Vector2 dpi); /** * @brief Retrieves the DPI of the display device to which the scene is connected. @@ -149,6 +154,20 @@ public: Vector2 GetDpi() const; /** + * @brief Sets the background color. + * + * @param[in] color The new background color + */ + void SetBackgroundColor(const Vector4& color); + + /** + * @brief Gets the background color of the render surface. + * + * @return The background color + */ + Vector4 GetBackgroundColor() const; + + /** * @brief Retrieves the list of render-tasks. * * @return A valid handle to a RenderTaskList @@ -177,27 +196,37 @@ public: * @return The layer found at the given depth * @pre Depth is less than layer count; see GetLayerCount(). */ - Layer GetLayer( uint32_t depth ) const; + Layer GetLayer(uint32_t depth) const; /** - * @brief Binds the rendering surface to the scene + * @brief Informs the scene that the set surface has been resized. * - * @return The root layer + * @param[in] width The new width of the set surface + * @param[in] height The new height of the set surface */ - void SetSurface( Integration::RenderSurface& surface ); + void SurfaceResized(float width, float height); /** - * @brief Gets the rendering surface bound to the scene - * - * @return The render surface + * @brief Informs the scene that the surface has been replaced. + */ + void SurfaceReplaced(); + + /** + * @brief Discards this Scene from the Core. + */ + void Discard(); + + /** + * @brief Retrieve the Scene that the given actor belongs to. + * @return The Scene. */ - Integration::RenderSurface* GetSurface() const; + static Integration::Scene Get(Actor actor); /** * This function is called when an event is queued. * @param[in] event A event to queue. */ - void QueueEvent( const Integration::Event& event ); + void QueueEvent(const Integration::Event& event); /** * This function is called by Core when events are processed. @@ -205,6 +234,56 @@ public: void ProcessEvents(); /** + * @brief Adds a callback that is called when the frame rendering is done by the graphics driver. + * + * @param[in] callback The function to call + * @param[in] frameId The Id to specify the frame. It will be passed when the callback is called. + * + * @note A callback of the following type may be used: + * @code + * void MyFunction( int frameId ); + * @endcode + * This callback will be deleted once it is called. + * + * @note Ownership of the callback is passed onto this class. + */ + void AddFrameRenderedCallback(std::unique_ptr callback, int32_t frameId); + + /** + * @brief Adds a callback that is called when the frame is displayed on the display. + * + * @param[in] callback The function to call + * @param[in] frameId The Id to specify the frame. It will be passed when the callback is called. + * + * @note A callback of the following type may be used: + * @code + * void MyFunction( int frameId ); + * @endcode + * This callback will be deleted once it is called. + * + * @note Ownership of the callback is passed onto this class. + */ + void AddFramePresentedCallback(std::unique_ptr callback, int32_t frameId); + + /** + * @brief Gets the callback list that is called when the frame rendering is done by the graphics driver. + * + * @param[out] callbacks The callback list + * + * @note This is called in the update thread. + */ + void GetFrameRenderedCallback(FrameCallbackContainer& callbacks); + + /** + * @brief Gets the callback list that is called when the frame is displayed on the display. + * + * @param[out] callbacks The callback list + * + * @note This is called in the update thread. + */ + void GetFramePresentedCallback(FrameCallbackContainer& callbacks); + + /** * @brief This signal is emitted just after the event processing is finished. * * @return The signal to connect to @@ -223,6 +302,22 @@ public: KeyEventSignalType& KeyEventSignal(); /** + * @brief The user would connect to this signal to get a KeyEvent when KeyEvent is generated. + * + * If the control already consumed key event, KeyEventProcessor do not need to Emit keyEvent. + * Therefore, KeyinputManager first checks whether KeyEvent is generated as KeyEventGeneratedSignal. + * After that keyEventProcessor must invoke KeyEvent only if KeyEventGeneratedSignal () is not consumed. + * + * A callback of the following type may be connected: + * @code + * bool YourCallbackName(const KeyEvent& event); + * @endcode + * + * @return The return is true if KeyEvent is consumed, otherwise false. + */ + KeyEventGeneratedSignalType& KeyEventGeneratedSignal(); + + /** * @brief This signal is emitted when the screen is touched and when the touch ends * (i.e. the down & up touch events only). * @@ -231,13 +326,13 @@ public: * An interrupted event will also be emitted (if it occurs). * A callback of the following type may be connected: * @code - * void YourCallbackName( TouchData event ); + * void YourCallbackName( TouchEvent event ); * @endcode * * @return The touch signal to connect to * @note Motion events are not emitted. */ - TouchSignalType& TouchSignal(); + TouchEventSignalType& TouchedSignal(); /** * @brief This signal is emitted when wheel event is received. @@ -251,7 +346,6 @@ public: WheelEventSignalType& WheelEventSignal(); public: // Not intended for application developers - /** * @brief This constructor is used by Dali::New() methods. *