#include <dali/public-api/object/base-object.h>
#include <dali/public-api/common/intrusive-ptr.h>
#include <dali/integration-api/scene.h>
+#include <dali/integration-api/events/key-event-integ.h>
+#include <dali/integration-api/events/point.h>
+#include <dali/integration-api/events/touch-event-combiner.h>
// INTERNAL INCLUDES
-
#ifdef DALI_ADAPTOR_COMPILATION
#include <dali/integration-api/render-surface-interface.h>
#include <dali/integration-api/scene-holder.h>
{
class Scene;
+struct Point;
+struct KeyEvent;
+struct WheelEvent;
}
/**
* @brief SceneHolder creates a Scene for rendering.
*/
-class SceneHolder : public BaseObject
+class DALI_ADAPTOR_API SceneHolder : public BaseObject
{
public:
void SetSurface( Dali::RenderSurfaceInterface* surface );
/**
+ * @brief Called when the surface set is resized.
+ */
+ void SurfaceResized();
+
+ /**
* @brief Get the render surface
* @return The render surface
*/
*/
void Resume();
-public: // The following methods can be overridden if required
+ /**
+ * @copydoc Dali::Integration::SceneHolder::FeedTouchPoint
+ */
+ void FeedTouchPoint( Dali::Integration::Point& point, int timeStamp );
/**
- * @brief Returns whether the Scene is visible or not.
- * @return True if the Scene is visible, false otherwise.
+ * @copydoc Dali::Integration::SceneHolder::FeedWheelEvent
*/
- virtual bool IsVisible() const;
+ void FeedWheelEvent( Dali::Integration::WheelEvent& wheelEvent );
-public: // The following methods must be overridden
+ /**
+ * @copydoc Dali::Integration::SceneHolder::FeedKeyEvent
+ */
+ void FeedKeyEvent( Dali::Integration::KeyEvent& keyEvent );
/**
- * @copydoc Dali::Integration::SceneHolder::GetNativeHandle
+ * @copydoc Dali::Integration::SceneHolder::Get()
*/
- virtual Dali::Any GetNativeHandle() const = 0;
+ static Dali::Integration::SceneHolder Get( Dali::Actor actor );
/**
- * @copydoc Dali::Integration::SceneHolder::FeedTouchPoint
+ * @copydoc Dali::Integration::SceneHolder::KeyEventSignal()
*/
- virtual void FeedTouchPoint( Dali::TouchPoint& point, int timeStamp ) = 0;
+ Dali::Integration::SceneHolder::KeyEventSignalType& KeyEventSignal() { return mScene.KeyEventSignal(); }
/**
- * @copydoc Dali::Integration::SceneHolder::FeedWheelEvent
+ * @copydoc Dali::Integration::SceneHolder::KeyEventGeneratedSignal()
*/
- virtual void FeedWheelEvent( Dali::WheelEvent& wheelEvent ) = 0;
+ Dali::Integration::SceneHolder::KeyEventGeneratedSignalType& KeyEventGeneratedSignal() { return mScene.KeyEventGeneratedSignal(); }
/**
- * @copydoc Dali::Integration::SceneHolder::FeedKeyEvent
+ * @copydoc Dali::Integration::SceneHolder::TouchSignal()
+ */
+ Dali::Integration::SceneHolder::TouchSignalType& TouchSignal() { return mScene.TouchSignal(); }
+
+ /**
+ * @copydoc Dali::Integration::SceneHolder::WheelEventSignal()
*/
- virtual void FeedKeyEvent( Dali::KeyEvent& keyEvent ) = 0;
+ Dali::Integration::SceneHolder::WheelEventSignalType& WheelEventSignal() { return mScene.WheelEventSignal(); }
+
+public: // The following methods can be overridden if required
+
+ /**
+ * @brief Returns whether the Scene is visible or not.
+ * @return True if the Scene is visible, false otherwise.
+ */
+ virtual bool IsVisible() const;
+
+public: // The following methods must be overridden
+
+ /**
+ * @copydoc Dali::Integration::SceneHolder::GetNativeHandle
+ */
+ virtual Dali::Any GetNativeHandle() const = 0;
protected:
*/
virtual void OnResume() {};
+ /**
+ * Recalculate the touch position if required
+ * @param[in,out] point The touch point
+ */
+ virtual void RecalculateTouchPosition( Integration::Point& point ) {};
+
+private:
+
+ /**
+ * Resets the event handling.
+ */
+ void Reset();
+
private:
static uint32_t mSceneHolderCounter; ///< A counter to track the SceneHolder creation
std::unique_ptr< Dali::RenderSurfaceInterface > mSurface; ///< The window rendering surface
Adaptor* mAdaptor; ///< The adaptor
+ Dali::Integration::TouchEventCombiner mCombiner; ///< Combines multi-touch events.
+
bool mAdaptorStarted:1; ///< Whether the adaptor has started or not
bool mVisible:1; ///< Whether the scene is visible or not
};