X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Fintegration-api%2Fscene.h;h=51a857236ab20dccf3fe63d618f6ce11c9689107;hb=eacc080fe975c523d722dd17c044652317ddd6e8;hp=7d97dd3f5a2407489d158601f03cfff303490aee;hpb=0741b58e8e53e8ea7b897c2e21aac6b4da733192;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/integration-api/scene.h b/dali/integration-api/scene.h index 7d97dd3..51a8572 100644 --- a/dali/integration-api/scene.h +++ b/dali/integration-api/scene.h @@ -2,7 +2,7 @@ #define DALI_SCENE_H /* - * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -22,6 +22,8 @@ #include // INTERNAL INCLUDES +#include +#include #include #include #include @@ -41,6 +43,11 @@ namespace Internal DALI_INTERNAL class Scene; } +namespace Graphics +{ +class RenderTarget; +} + namespace Integration { struct Event; @@ -59,6 +66,7 @@ public: using KeyEventGeneratedSignalType = Signal; ///< key event generated signal type using TouchEventSignalType = Signal; ///< Touch signal type using WheelEventSignalType = Signal; ///< WheelEvent signal type + using WheelEventGeneratedSignalType = Signal; ///< WheelEvent generated signal type using FrameCallbackContainer = std::vector, int32_t> >; @@ -66,10 +74,12 @@ public: * @brief Create an initialized Scene handle. * * @param[in] size The size of the set surface for this scene + * @param[in] windowOrientation The rotated angle of the set surface for this scene + * @param[in] screenOrientation The rotated angle of the screen * * @return a handle to a newly allocated Dali resource. */ - static Scene New(Size size); + static Scene New(Size size, int32_t windowOrientation = 0, int32_t screenOrientation = 0); /** * @brief Downcast an Object handle to Scene handle. @@ -112,6 +122,21 @@ public: Scene& operator=(const Scene& rhs); /** + * @brief This move constructor is required for (smart) pointer semantics. + * + * @param [in] handle A reference to the moved handle + */ + Scene(Scene&& handle); + + /** + * @brief This move assignment operator is required for (smart) pointer semantics. + * + * @param [in] rhs A reference to the moved handle + * @return A reference to this + */ + Scene& operator=(Scene&& rhs); + + /** * @brief Adds a child Actor to the Scene. * * The child will be referenced. @@ -182,6 +207,14 @@ public: Layer GetRootLayer() const; /** + * @brief Returns the Scene's Overlay Layer. + * If there is no overlay layer yet, this creates the layer and an associated render task. + * + * @return The overlay layer + */ + Layer GetOverlayLayer(); + + /** * @brief Queries the number of on-stage layers. * * Note that a default layer is always provided (count >= 1). @@ -217,6 +250,13 @@ public: void Discard(); /** + * @brief Sets the render target for the surface. + * + * @param[in] renderTarget The render target create info for the surface + */ + void SetSurfaceRenderTarget(const Graphics::RenderTargetCreateInfo& createInfo); + + /** * @brief Retrieve the Scene that the given actor belongs to. * @return The Scene. */ @@ -241,7 +281,7 @@ public: * * @note A callback of the following type may be used: * @code - * void MyFunction( int frameId ); + * void MyFunction( int32_t frameId ); * @endcode * This callback will be deleted once it is called. * @@ -257,7 +297,7 @@ public: * * @note A callback of the following type may be used: * @code - * void MyFunction( int frameId ); + * void MyFunction( int32_t frameId ); * @endcode * This callback will be deleted once it is called. * @@ -284,6 +324,67 @@ public: void GetFramePresentedCallback(FrameCallbackContainer& callbacks); /** + * @brief Informs the scene that the set surface has been rotated. + * + * @param[in] width The width of rotated surface + * @param[in] height The height of rotated surface + * @param[in] windowOrientation the current window orientation + * @param[in] screenOrientation the current screen orientation + */ + void SurfaceRotated(float width, float height, int32_t windowOrientation, int32_t screenOrientation); + + /** + * @brief Gets the current surface orientation. It gets the value from the scene object. + * + * @return The current surface orientation. + */ + int32_t GetCurrentSurfaceOrientation() const; + + /** + * @brief Gets the current screen orientation. It gets the value from the scene object. + * + * @return The current screen orientation. + */ + int32_t GetCurrentScreenOrientation() const; + + /** + * @brief Gets the current surface rectangle. It gets the value from the scene object. + * + * @return The current surface rectangle + */ + const Rect& GetCurrentSurfaceRect() const; + + /** + * Query wheter the surface rect is changed or not. + * @return true if the surface rect is changed. + */ + bool IsSurfaceRectChanged() const; + + /** + * @brief Send message to acknowledge for completing window rotation with current window orientation. + * + * If this function is called, the message is sent to render thread, then mSurfaceRectChanged in scene-graph-scene is set with true. + * After that, render thread checks whether window rotation event is received, mSurfaceRectChanged and the neccessary flag are set. + * If they are all true, rotation done function is called to complete window rotation. + */ + void SetRotationCompletedAcknowledgement(); + + /** + * @brief Query wheter is set to acknowledge for completing surface rotation. + * @return true it should be acknowledged. + * + * If SetRotationCompletedAcknowledgement() is called and the related message is received to scene-graph-scene, + * then mSurfaceRectChanged in scene-graph-scene is set with true. + * + * When this function is called, the mSurfaceRectChanged in scene-graph-scene is return. + * Then, the flag will be reset. + * + * @note This function should be not called the application's main thread. + * Because this function should be called in windwow surface's postrender() function to complete window rotation manually. + */ + bool IsRotationCompletedAcknowledgementSet() const; + + /** * @brief This signal is emitted just after the event processing is finished. * * @return The signal to connect to @@ -318,6 +419,21 @@ public: KeyEventGeneratedSignalType& KeyEventGeneratedSignal(); /** + * @brief The user would connect to this signal to intercept a KeyEvent at window. + * + * Intercepts KeyEvents in the window before dispatching KeyEvents to the control. + * If a KeyEvent is consumed, no KeyEvent is delivered to the control. + * + * 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& InterceptKeyEventSignal(); + + /** * @brief This signal is emitted when the screen is touched and when the touch ends * (i.e. the down & up touch events only). * @@ -345,6 +461,23 @@ public: */ WheelEventSignalType& WheelEventSignal(); + /** + * @brief When a custom wheel event occurs, it need to process the focused actor first. + * + * Therefore, KeyboardFocusManager first checks whether WheelEvent is generated as WheelEventGeneratedSignal. + * After that wheelEventProcessor must invoke WheelEvent only if wheelEventGeneratedSignal () is not consumed. + * + * This is only valid for custom wheel events. + * + * A callback of the following type may be connected: + * @code + * bool YourCallbackName(const WheelEvent& event); + * @endcode + * + * @return The return is true if WheelEvent is consumed, otherwise false. + */ + WheelEventGeneratedSignalType& WheelEventGeneratedSignal(); + public: // Not intended for application developers /** * @brief This constructor is used by Dali::New() methods.