X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fcommon%2Fscene-impl.cpp;h=3e09540d34aedd33d58cabde10f9135574cd8307;hb=ad9fbaaafce5fb10ea2b5aa6fc03809b1f2c58a8;hp=f68060ea533392e43bf01d713f020b966d0c25a0;hpb=da298bea0d5f6dd40092511fcd255b423ceb79e3;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/common/scene-impl.cpp b/dali/internal/event/common/scene-impl.cpp index f68060e..3e09540 100644 --- a/dali/internal/event/common/scene-impl.cpp +++ b/dali/internal/event/common/scene-impl.cpp @@ -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( mSurface->GetPositionSize().width ); - mSurfaceSize.height = static_cast( 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( mSurface->GetPositionSize().width ); + const float fHeight = static_cast( 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 newSize( 0, 0, static_cast( mSurface->GetPositionSize().width ), static_cast( 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( 0, 0, static_cast( mSurfaceSize.width ), static_cast( 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( mSurfaceSize.width ), static_cast( 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( newSize.width ), static_cast( 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