Revert "[Tizen]Add KeyEventGeneratedSignal for Get KeyEvent normally"
[platform/core/uifw/dali-core.git] / dali / internal / event / common / scene-impl.cpp
index f68060e..3e09540 100644 (file)
@@ -48,7 +48,7 @@ const Vector4 DEFAULT_BACKGROUND_COLOR(0.0f, 0.0f, 0.0f, 1.0f); // Default backg
 
 } //Unnamed namespace
 
-ScenePtr Scene::New( Size size )
+ScenePtr Scene::New( const Size& size )
 {
   ScenePtr scene = new Scene( size );
 
@@ -58,12 +58,14 @@ ScenePtr Scene::New( Size size )
   return scene;
 }
 
-Scene::Scene( Size size )
+Scene::Scene( const Size& size )
 : mSurface( nullptr ),
   mSize( size ),
   mSurfaceSize( Vector2::ZERO ),
   mDpi( Vector2::ZERO ),
-  mDepthTreeDirty( false )
+  mBackgroundColor( DEFAULT_BACKGROUND_COLOR ),
+  mDepthTreeDirty( false ),
+  mEventProcessor( *this, ThreadLocalStorage::GetInternal()->GetGestureEventProcessor() )
 {
 }
 
@@ -108,7 +110,7 @@ void Scene::Initialize()
   // Create the ordered list of layers
   mLayerList = LayerList::New( updateManager );
 
-  // The stage owns the default layer
+  // The scene owns the default layer
   mRootLayer = Layer::NewRoot( *mLayerList, updateManager );
   mRootLayer->SetName("RootLayer");
   mRootLayer->SetScene( *this );
@@ -197,34 +199,54 @@ void Scene::SetSurface( Integration::RenderSurface& surface )
   mSurface = &surface;
   if ( mSurface )
   {
-    mSurfaceSize.width = static_cast<float>( mSurface->GetPositionSize().width );
-    mSurfaceSize.height = static_cast<float>( mSurface->GetPositionSize().height );
+    RenderTaskPtr defaultRenderTask = mRenderTaskList->GetTask( 0u );
+
+    mFrameBuffer = Dali::Internal::FrameBuffer::New( surface, Dali::FrameBuffer::Attachment::NONE );
+    defaultRenderTask->SetFrameBuffer( mFrameBuffer );
+
+    SurfaceResized();
+  }
+}
 
-    mSize.width = mSurfaceSize.width;
-    mSize.height = mSurfaceSize.height;
+void Scene::SurfaceResized()
+{
+  if( mSurface )
+  {
+    const float fWidth = static_cast<float>( mSurface->GetPositionSize().width );
+    const float fHeight = static_cast<float>( mSurface->GetPositionSize().height );
 
-    // Calculates the aspect ratio, near and far clipping planes, field of view and camera Z position.
-    mDefaultCamera->SetPerspectiveProjection( mSurfaceSize );
+    if( ( fabsf( mSurfaceSize.width - fWidth ) > Math::MACHINE_EPSILON_1 ) || ( fabsf( mSurfaceSize.height - fHeight ) > Math::MACHINE_EPSILON_1 ) )
+    {
+      Rect<int32_t> newSize( 0, 0, static_cast<int32_t>( mSurface->GetPositionSize().width ), static_cast<int32_t>( mSurface->GetPositionSize().height ) );
 
-    mRootLayer->SetSize( mSize.width, mSize.height );
+      mSurfaceSize.width = fWidth;
+      mSurfaceSize.height = fHeight;
 
-    ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal();
-    SceneGraph::UpdateManager& updateManager = tls->GetUpdateManager();
-    SetDefaultSurfaceRectMessage( updateManager, Rect<int32_t>( 0, 0, static_cast<int32_t>( mSurfaceSize.width ), static_cast<int32_t>( mSurfaceSize.height ) ) ); // truncated
+      mSize.width = mSurfaceSize.width;
+      mSize.height = mSurfaceSize.height;
 
-    RenderTaskPtr defaultRenderTask = mRenderTaskList->GetTask( 0u );
+      // Calculates the aspect ratio, near and far clipping planes, field of view and camera Z position.
+      mDefaultCamera->SetPerspectiveProjection( mSurfaceSize );
 
-    // if single render task to screen then set its viewport parameters
-    if( 1 == mRenderTaskList->GetTaskCount() )
-    {
-      if( !defaultRenderTask->GetTargetFrameBuffer() )
+      mRootLayer->SetSize( mSize.width, mSize.height );
+
+      ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal();
+      SceneGraph::UpdateManager& updateManager = tls->GetUpdateManager();
+      SetDefaultSurfaceRectMessage( updateManager, newSize ); // truncated
+
+      RenderTaskPtr defaultRenderTask = mRenderTaskList->GetTask( 0u );
+
+      // if single render task to screen then set its viewport parameters
+      if( 1 == mRenderTaskList->GetTaskCount() )
       {
-        defaultRenderTask->SetViewport( Viewport( 0, 0, static_cast<int32_t>( mSurfaceSize.width ), static_cast<int32_t>( mSurfaceSize.height ) ) ); // truncated
+        if( !defaultRenderTask->GetTargetFrameBuffer() )
+        {
+          defaultRenderTask->SetViewport( newSize ); // truncated
+        }
       }
-    }
 
-    mFrameBuffer = Dali::Internal::FrameBuffer::New( surface, Dali::FrameBuffer::Attachment::NONE );
-    defaultRenderTask->SetFrameBuffer( mFrameBuffer );
+      defaultRenderTask->GetFrameBuffer()->SetSize( static_cast<uint32_t>( newSize.width ), static_cast<uint32_t>( newSize.height ) );
+    }
   }
 }
 
@@ -238,6 +260,16 @@ void Scene::RequestRebuildDepthTree()
   mDepthTreeDirty = true;
 }
 
+void Scene::QueueEvent( const Integration::Event& event )
+{
+  mEventProcessor.QueueEvent( event );
+}
+
+void Scene::ProcessEvents()
+{
+  mEventProcessor.ProcessEvents();
+}
+
 void Scene::RebuildDepthTree()
 {
   // If the depth tree needs rebuilding, do it in this frame only.
@@ -249,19 +281,66 @@ void Scene::RebuildDepthTree()
   }
 }
 
-void Scene::SetBackgroundColor(Vector4 color)
+void Scene::SetBackgroundColor( const Vector4& color )
 {
+  mBackgroundColor = color;
+
   if( mSurface )
   {
-    mSurface->SetBackgroundColor( color );
+    mRenderTaskList->GetTask( 0u )->GetFrameBuffer()->SetBackgroundColor( color );
   }
 }
 
 Vector4 Scene::GetBackgroundColor() const
 {
-  return mSurface ? mSurface->GetBackgroundColor() : DEFAULT_BACKGROUND_COLOR;
+  return mBackgroundColor;
+}
+
+void Scene::EmitKeyEventSignal(const KeyEvent& event)
+{
+  mKeyEventSignal.Emit( event );
+}
+
+void Scene::EmitEventProcessingFinishedSignal()
+{
+  mEventProcessingFinishedSignal.Emit();
 }
 
+void Scene::EmitTouchedSignal( const TouchEvent& touchEvent, const Dali::TouchData& touch )
+{
+  mTouchedSignal.Emit( touchEvent );
+  mTouchSignal.Emit( touch );
+}
+
+void Scene::EmitWheelEventSignal(const WheelEvent& event)
+{
+  mWheelEventSignal.Emit( event );
+}
+
+Integration::Scene::KeyEventSignalType& Scene::KeyEventSignal()
+{
+  return mKeyEventSignal;
+}
+
+Integration::Scene::EventProcessingFinishedSignalType& Scene::EventProcessingFinishedSignal()
+{
+  return mEventProcessingFinishedSignal;
+}
+
+Scene::TouchedSignalType& Scene::TouchedSignal()
+{
+  return mTouchedSignal;
+}
+
+Integration::Scene::TouchSignalType& Scene::TouchSignal()
+{
+  return mTouchSignal;
+}
+
+Integration::Scene::WheelEventSignalType& Scene::WheelEventSignal()
+{
+  return mWheelEventSignal;
+}
 
 } // Internal