X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fcommon%2Fstage-impl.h;h=a6aa52e6c673863fb32e5b287f4b2ee9fb706347;hb=9697546f6395000a500259997c415d9ff3c2e337;hp=03d4d9306aa62c7d00eca7ebb50b26365f1b06d5;hpb=3487163563301e8b570b465579b3c5a20df0a054;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/common/stage-impl.h b/dali/internal/event/common/stage-impl.h index 03d4d93..a6aa52e 100644 --- a/dali/internal/event/common/stage-impl.h +++ b/dali/internal/event/common/stage-impl.h @@ -1,8 +1,8 @@ -#ifndef __DALI_INTERNAL_STAGE_H__ -#define __DALI_INTERNAL_STAGE_H__ +#ifndef DALI_INTERNAL_STAGE_H +#define DALI_INTERNAL_STAGE_H /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2018 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. @@ -21,10 +21,12 @@ // INTERNAL INCLUDES #include #include +#include #include #include #include #include +#include #include #include #include @@ -35,11 +37,6 @@ #include #include -#ifdef DYNAMICS_SUPPORT -#include -#include -#endif - namespace Dali { @@ -48,7 +45,7 @@ struct Vector2; namespace Integration { class SystemOverlay; -class DynamicsFactory; +class RenderController; } namespace Internal @@ -70,7 +67,7 @@ class RenderTaskList; /** * Implementation of Stage */ -class Stage : public BaseObject, public RenderTaskDefaults, public Integration::ContextNotifierInterface +class Stage : public BaseObject, public RenderTaskDefaults, public Integration::ContextNotifierInterface, public EventThreadServices { public: @@ -80,16 +77,19 @@ public: * @param[in] propertyNotificationManager * @param[in] updateManager * @param[in] notificationManager + * @param[in] renderController */ static StagePtr New( AnimationPlaylist& playlist, PropertyNotificationManager& propertyNotificationManager, SceneGraph::UpdateManager& updateManager, - NotificationManager& notificationManager ); + NotificationManager& notificationManager, + Integration::RenderController& renderController ); /** * Initialize the stage. + * @param[in] renderToFbo Whether to render into a Frame Buffer Object. */ - void Initialize(); + void Initialize( bool renderToFbo ); /** * Uninitialize the stage. @@ -113,44 +113,12 @@ public: ObjectRegistry& GetObjectRegistry(); /** - * @copydoc Dali::Internal::ObjectRegistry::RegisterObject - */ - void RegisterObject( Dali::BaseObject* object ); - - /** - * @copydoc Dali::Internal::ObjectRegistry::UnregisterObject - */ - void UnregisterObject( Dali::BaseObject* object ); - - /** * Retrieve the root actor (not publically accessible). * @return The root actor. */ Layer& GetRootActor(); /** - * Retrieve the UpdateManager associated with this Stage - * @return The UpdateManager. - */ - SceneGraph::UpdateManager& GetUpdateManager(); - - /** - * Helper for actors, to retrieve the current Event buffer index. - * @return The buffer index. - */ - BufferIndex GetEventBufferIndex() const - { - // inlined as its called often from event thread - return mUpdateManager.GetEventBufferIndex(); - } - - /** - * Retrieve the interface for accessing update-thread data. - * @return The EventToUpdate interface. - */ - EventToUpdate& GetUpdateInterface(); - - /** * Returns the animation playlist. * @return reference to the animation playlist. */ @@ -175,11 +143,20 @@ public: void Remove( Actor& actor ); /** - * Sets the size of the stage and indirectly, the root actor. - * @param [in] width The new width. - * @param [in] height The new height. + * Used to calculate the size of the stage and indirectly, the root actor. + * @param [in] width The new surface width. + * @param [in] height The new surface height. + */ + void SurfaceResized( float width, float height ); + + /** + * Sets the top margin size. + * Available stage size is reduced by this size. + * The stage is located below the size at the top of the display + * initial size is zero before it is assigned + * @param[in] margin margin size */ - void SetSize( float width, float height ); + void SetTopMargin( uint32_t margin ); /** * Returns the size of the Stage in pixels as a Vector. @@ -200,6 +177,11 @@ public: void CreateDefaultCameraActor(); /** + * Set position of default camera for current stage size + */ + void SetDefaultCameraPosition(); + + /** * From RenderTaskDefaults; retrieve the default root actor. * @return The default root actor. */ @@ -216,12 +198,12 @@ public: /** * @copydoc Dali::Stage::GetLayerCount() */ - unsigned int GetLayerCount() const; + uint32_t GetLayerCount() const; /** * @copydoc Dali::Stage::GetLayer() */ - Dali::Layer GetLayer( unsigned int depth ) const; + Dali::Layer GetLayer( uint32_t depth ) const; /** * @copydoc Dali::Stage::GetRootLayer() @@ -313,47 +295,38 @@ public: */ void SetDpi( Vector2 dpi ); -#ifdef DYNAMICS_SUPPORT - - /** - * Return the Dynamics Simulation Notifier object - * @return The Dynamics Simulation Notifier object - */ - DynamicsNotifier& GetDynamicsNotifier(); + NotificationManager& GetNotificationManager() + { + return mNotificationManager; + } /** - * @copydoc Dali::Stage::InitializeDynamics + * @copydoc Dali::Stage::KeepRendering() */ - DynamicsWorldPtr InitializeDynamics(DynamicsWorldConfigPtr config); + void KeepRendering( float durationSeconds ); /** - * @copydoc Dali::Stage::GetDynamicsWorld + * @copydoc Dali::DevelStage::SetRenderingBehavior() */ - DynamicsWorldPtr GetDynamicsWorld(); + void SetRenderingBehavior( DevelStage::Rendering renderingBehavior ); /** - * @copydoc Dali::Stage::TerminateDynamics + * @copydoc Dali::DevelStage::GetRenderingBehavior() */ - void TerminateDynamics(); - -#endif // DYNAMICS_SUPPORT - - NotificationManager& GetNotificationManager() - { - return mNotificationManager; - } - + DevelStage::Rendering GetRenderingBehavior() const; /** - * @copydoc Dali::Stage::KeepRendering() + * Used by the EventProcessor to emit key event signals. + * @param[in] event The key event. */ - void KeepRendering( float durationSeconds ); + void EmitKeyEventSignal(const KeyEvent& event); /** - * Used by the EventProcessor to emit key event signals. + * Used by the KeyEventProcessor to emit KeyEventGenerated signals. * @param[in] event The key event. + * @return The return is true if KeyEvent is consumed, otherwise false. */ - void EmitKeyEventSignal(const KeyEvent& event); + bool EmitKeyEventGeneratedSignal(const KeyEvent& event); /** * Emits the event processing finished signal. @@ -364,9 +337,16 @@ public: /** * Emits the touched signal. + * @param[in] touchEvent The touch event details (Old API). * @param[in] touch The touch event details. */ - void EmitTouchedSignal( const TouchEvent& touch ); + void EmitTouchedSignal( const TouchEvent& touchEvent, const Dali::TouchData& touch ); + + /** + * Used by the EventProcessor to emit wheel event signals. + * @param[in] event The wheel event. + */ + void EmitWheelEventSignal( const WheelEvent& event ); /** * Emits the scene created. @@ -389,6 +369,16 @@ public: Dali::Stage::TouchedSignalType& TouchedSignal(); /** + * @copydoc Dali::Stage::TouchSignal() + */ + Dali::Stage::TouchSignalType& TouchSignal(); + + /** + * @copydoc Dali::Stage::WheelEventSignal() + */ + Dali::Stage::WheelEventSignalType& WheelEventSignal(); + + /** * @copydoc Dali::Stage::ContextLostSignal() */ Dali::Stage::ContextStatusSignal& ContextLostSignal(); @@ -403,6 +393,32 @@ public: */ Dali::Stage::SceneCreatedSignalType& SceneCreatedSignal(); + /** + * @copydoc Dali::DevelStage::KeyEventGeneratedSignal() + */ + Dali::DevelStage::KeyEventGeneratedSignalType& KeyEventGeneratedSignal(); + + /** + * @copydoc Dali::DevelStage::AddFrameCallback() + */ + void AddFrameCallback( FrameCallbackInterface& frameCallback, Actor& rootActor ); + + /** + * @copydoc Dali::DevelStage::RemoveFrameCallback() + */ + void RemoveFrameCallback( FrameCallbackInterface& frameCallback ); + + /** + * Connects a callback function with the object's signals. + * @param[in] object The object providing the signal. + * @param[in] tracker Used to disconnect the signal. + * @param[in] signalName The signal to connect to. + * @param[in] functor A newly allocated FunctorDelegate. + * @return True if the signal was connected. + * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the caller is responsible for deleting the unused functor. + */ + static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ); + private: // Implementation of ContextNotificationInterface: /** @@ -415,6 +431,59 @@ private: // Implementation of ContextNotificationInterface: */ virtual void NotifyContextRegained(); +public: // Implementation of EventThreadServices + + /** + * @copydoc EventThreadServices::RegisterObject + */ + virtual void RegisterObject( BaseObject* object); + + /** + * @copydoc EventThreadServices::UnregisterObject + */ + virtual void UnregisterObject( BaseObject* object); + + /** + * @copydoc EventThreadServices::GetUpdateManager + */ + virtual SceneGraph::UpdateManager& GetUpdateManager(); + + /** + * @copydoc EventThreadServices::GetRenderController + */ + virtual Integration::RenderController& GetRenderController(); + + /** + * @copydoc EventThreadServices::ReserveMessageSlot + */ + virtual uint32_t* ReserveMessageSlot( uint32_t size, bool updateScene ); + + /** + * @copydoc EventThreadServices::GetEventBufferIndex + */ + virtual BufferIndex GetEventBufferIndex() const; + + /** + * @copydoc EventThreadServices::ForceNextUpdate + */ + virtual void ForceNextUpdate(); + + /** + * @copydoc EventThreadServices::IsNextUpdateForced + */ + virtual bool IsNextUpdateForced(); + + /** + * Request that the depth tree is rebuilt + */ + void RequestRebuildDepthTree(); + + /** + * Rebuilds the depth tree at the end of the event frame if + * it was requested this frame. + */ + void RebuildDepthTree(); + private: /** @@ -423,7 +492,8 @@ private: Stage( AnimationPlaylist& playlist, PropertyNotificationManager& propertyNotificationManager, SceneGraph::UpdateManager& updateManager, - NotificationManager& notificationManager ); + NotificationManager& notificationManager, + Integration::RenderController& renderController ); /** * A reference counted object may only be deleted by calling Unreference() @@ -441,8 +511,11 @@ private: NotificationManager& mNotificationManager; - // The Actual size of the stage. + Integration::RenderController& mRenderController; + + // The stage-size may be less than surface-size (reduced by top-margin) Vector2 mSize; + Vector2 mSurfaceSize; // Cached for public GetBackgroundColor() Vector4 mBackgroundColor; @@ -457,21 +530,12 @@ private: ViewMode mViewMode; float mStereoBase; + uint32_t mTopMargin; Vector2 mDpi; // The object registry ObjectRegistryPtr mObjectRegistry; -#ifdef DYNAMICS_SUPPORT - - DynamicsNotifier mDynamicsNotifier; - - // The Dynamics simulation world object - Integration::DynamicsFactory* mDynamicsFactory; // Not owned pointer to DynamicsFactory (PlatformAbstraction will clean up) - DynamicsWorldPtr mDynamicsWorld; - -#endif // DYNAMICS_SUPPORT - // The list of render-tasks IntrusivePtr mRenderTaskList; @@ -484,17 +548,28 @@ private: // The key event signal Dali::Stage::KeyEventSignalType mKeyEventSignal; + Dali::DevelStage::KeyEventGeneratedSignalType mKeyEventGeneratedSignal; // The event processing finished signal Dali::Stage::EventProcessingFinishedSignalType mEventProcessingFinishedSignal; - // The touched signal + // The touched signals Dali::Stage::TouchedSignalType mTouchedSignal; + Dali::Stage::TouchSignalType mTouchSignal; + + // The wheel event signal + Dali::Stage::WheelEventSignalType mWheelEventSignal; Dali::Stage::ContextStatusSignal mContextLostSignal; Dali::Stage::ContextStatusSignal mContextRegainedSignal; Dali::Stage::SceneCreatedSignalType mSceneCreatedSignal; + + DevelStage::Rendering mRenderingBehavior; ///< The rendering behavior + + bool mDepthTreeDirty:1; ///< True if the depth tree needs recalculating + bool mForceNextUpdate:1; ///< True if the next rendering is really required. + bool mRenderToFbo:1; ///< Whether to render to a Frame Buffer Object. }; } // namespace Internal @@ -521,4 +596,4 @@ inline const Internal::Stage& GetImplementation(const Dali::Stage& stage) } // namespace Dali -#endif // __DALI_INTERNAL_STAGE_H__ +#endif // DALI_INTERNAL_STAGE_H