#include <dali/integration-api/render-surface.h>
#include <dali/internal/common/owner-pointer.h>
#include <dali/internal/event/actors/layer-impl.h>
+#include <dali/internal/event/events/event-processor.h>
#include <dali/internal/event/render-tasks/render-task-defaults.h>
namespace Dali
{
+namespace Integration
+{
+
+class Event;
+
+}
+
namespace Internal
{
+class EventProcessor;
class Layer;
class LayerList;
class CameraActor;
{
public:
-
/**
* @copydoc Dali::Integration::Scene::New
*/
- static ScenePtr New( Size size );
+ static ScenePtr New( Integration::RenderSurface& surface );
/**
* virtual destructor
void SetSurface( Integration::RenderSurface& surface );
/**
+ * Notify the surface has been resized.
+ */
+ void SurfaceResized( bool forceUpdate );
+
+ /**
+ * Notify the surface has been deleted.
+ */
+ void SurfaceDeleted();
+
+ /**
+ * @copydoc Dali::Integration::Scene::Discard
+ */
+ void Discard();
+
+ /**
* Retrieve the render surface the scene is binded to.
* @return The render surface.
*/
Integration::RenderSurface* GetSurface() const;
/**
- * Retrieve the ordered list of on-stage layers.
+ * Retrieve the ordered list of on-scene layers.
* @return The layer-list.
*/
LayerList& GetLayerList() const;
void RequestRebuildDepthTree();
/**
+ * This function is called when an event is queued.
+ * @param[in] event A event to queue.
+ */
+ void QueueEvent( const Integration::Event& event );
+
+ /**
+ * This function is called by Core when events are processed.
+ */
+ void ProcessEvents();
+
+ /**
* Rebuilds the depth tree at the end of the event frame if
* it was requested this frame.
*/
void RebuildDepthTree();
/**
- * @brief Sets the background color of the render surface.
+ * @brief Sets the background color of the render surface.
* @param[in] color The new background color
*/
- void SetBackgroundColor(Vector4 color);
+ void SetBackgroundColor( const Vector4& color );
/**
* @brief Gets the background color of the render surface.
*/
Vector4 GetBackgroundColor() const;
+ /**
+ * Used by the EventProcessor to emit key event signals.
+ * @param[in] event The key event.
+ */
+ void EmitKeyEventSignal(const KeyEvent& event);
+
+ /**
+ * 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.
+ */
+ bool EmitKeyEventGeneratedSignal(const KeyEvent& event);
+
+ /**
+ * Emits the event processing finished signal.
+ *
+ * @see Dali::Scene::SignalEventProcessingFinished()
+ */
+ void EmitEventProcessingFinishedSignal();
+
+ /**
+ * Emits the touched signal.
+ * @param[in] touchEvent The touch event details (Old API).
+ * @param[in] touch The touch event details.
+ */
+ 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 );
+
+ /**
+ * @copydoc Integration::Scene::KeyEventSignal()
+ */
+ Integration::Scene::KeyEventSignalType& KeyEventSignal();
+
+ /**
+ * @copydoc Integration::Scene::KeyEventGeneratedSignal()
+ */
+ Integration::Scene::KeyEventGeneratedSignalType& KeyEventGeneratedSignal();
+
+ /**
+ * @copydoc Integration::Scene::SignalEventProcessingFinished()
+ */
+ Integration::Scene::EventProcessingFinishedSignalType& EventProcessingFinishedSignal();
+
+ // The touched signal, to support Stage touched signal, will be removed when deprecated in public Stage API
+ using TouchedSignalType = Signal< void (const TouchEvent&) >;
+
+ /**
+ * Touched signal to support deprecated stage touched signal.
+ */
+ TouchedSignalType& TouchedSignal();
+
+ /**
+ * @copydoc Integration::Scene::TouchSignal()
+ */
+ Integration::Scene::TouchSignalType& TouchSignal();
+
+ /**
+ * @copydoc Integration::Scene::sWheelEventSignal()
+ */
+ Integration::Scene::WheelEventSignalType& WheelEventSignal();
+
public:
/**
private:
// Constructor
- Scene( Size size );
+ Scene();
/**
* Second-phase constructor.
*/
- void Initialize();
+ void Initialize( Integration::RenderSurface& surface );
// Undefined
Scene(const Scene&) = delete;
Scene& operator=(const Scene& rhs) = delete;
private:
-
Integration::RenderSurface* mSurface;
- // The scene-size may be different with the surface-size
Size mSize;
- Size mSurfaceSize;
Vector2 mDpi;
+ Vector4 mBackgroundColor;
+
+ // The SurfaceOrientation
+ int mSurfaceOrientation;
+
LayerPtr mRootLayer;
// Ordered list of currently on-stage layers
FrameBufferPtr mFrameBuffer;
bool mDepthTreeDirty:1; ///< True if the depth tree needs recalculating
+
+ EventProcessor mEventProcessor;
+
+ // The key event signal
+ Integration::Scene::KeyEventSignalType mKeyEventSignal;
+ Integration::Scene::KeyEventGeneratedSignalType mKeyEventGeneratedSignal;
+
+ // The event processing finished signal
+ Integration::Scene::EventProcessingFinishedSignalType mEventProcessingFinishedSignal;
+
+ // The touch signal
+ Integration::Scene::TouchSignalType mTouchSignal;
+
+ // The touched signal
+ TouchedSignalType mTouchedSignal;
+
+ // The wheel event signal
+ Integration::Scene::WheelEventSignalType mWheelEventSignal;
};
} // Internal