// EXTERNAL INCLUDES
#include <sys/time.h>
+#include <dali/public-api/common/dali-common.h>
#include <dali/public-api/actors/actor.h>
#include <dali/public-api/actors/layer.h>
#include <dali/integration-api/debug.h>
// INTERNAL INCLUDES
#include <dali/internal/adaptor/common/adaptor-impl.h>
#include <dali/internal/adaptor/common/lifecycle-observer.h>
+#include <dali/internal/graphics/gles/egl-graphics.h>
#include <dali/internal/input/common/key-impl.h>
#include <dali/internal/input/common/physical-keyboard-impl.h>
{
#if defined(DEBUG_ENABLED)
-Integration::Log::Filter* gTouchEventLogFilter = Integration::Log::Filter::New(Debug::NoLogging, false, "LOG_ADAPTOR_EVENTS_TOUCH");
+Debug::Filter* gSceneHolderLogFilter = Debug::Filter::New( Debug::NoLogging, false, "LOG_SCENE_HOLDER" );
#endif
// Copied from x server
mId( mSceneHolderCounter++ ),
mSurface( nullptr ),
mAdaptor( nullptr ),
+ mDpi(),
mIsBeingDeleted( false ),
mAdaptorStarted( false ),
mVisible( true )
mAdaptor->RemoveObserver( *mLifeCycleObserver.get() );
mAdaptor->RemoveWindow( this );
+ mAdaptor->DeleteSurface( *mSurface.get() );
+
mAdaptor = nullptr;
}
return mScene;
}
+Uint16Pair SceneHolder::GetDpi() const
+{
+ return mDpi;
+}
+
void SceneHolder::SetSurface(Dali::RenderSurfaceInterface* surface)
{
mSurface.reset( surface );
mScene.SurfaceReplaced();
- SurfaceResized();
+ SurfaceResized( false );
- unsigned int dpiHorizontal, dpiVertical;
- dpiHorizontal = dpiVertical = 0;
-
- mSurface->GetDpi( dpiHorizontal, dpiVertical );
- mScene.SetDpi( Vector2( static_cast<float>( dpiHorizontal ), static_cast<float>( dpiVertical ) ) );
+ InitializeDpi();
mSurface->SetAdaptor( *mAdaptor );
+ mSurface->SetScene( mScene );
OnSurfaceSet( surface );
}
-void SceneHolder::SurfaceResized()
+void SceneHolder::SurfaceResized( bool forceUpdate )
{
PositionSize surfacePositionSize = mSurface->GetPositionSize();
- mScene.SurfaceResized( static_cast<float>( surfacePositionSize.width ), static_cast<float>( surfacePositionSize.height ) );
+ int orientation = mSurface->GetOrientation();
+ mScene.SurfaceResized( static_cast<float>( surfacePositionSize.width ), static_cast<float>( surfacePositionSize.height ), orientation, forceUpdate );
+
+ GraphicsInterface& graphics = mAdaptor->GetGraphicsInterface();
+ EglGraphics* eglGraphics = static_cast<EglGraphics*>(&graphics);
+ if (eglGraphics)
+ {
+ eglGraphics->SetFullSwapNextFrame();
+ }
}
Dali::RenderSurfaceInterface* SceneHolder::GetSurface() const
if( mScene )
{
mScene.SetBackgroundColor( color );
+
+ GraphicsInterface& graphics = mAdaptor->GetGraphicsInterface();
+ EglGraphics* eglGraphics = static_cast<EglGraphics*>(&graphics);
+ if (eglGraphics)
+ {
+ eglGraphics->SetFullSwapNextFrame();
+ }
}
}
return;
}
+ DALI_ASSERT_DEBUG(mSurface && "Surface needs to be set before calling this method\n");
+
mAdaptorStarted = true;
// Create the scene
// Create an observer for the adaptor lifecycle
mAdaptor->AddObserver( *mLifeCycleObserver );
- if ( mSurface )
- {
- unsigned int dpiHorizontal, dpiVertical;
- dpiHorizontal = dpiVertical = 0;
-
- mSurface->GetDpi( dpiHorizontal, dpiVertical );
- mScene.SetDpi( Vector2( static_cast<float>( dpiHorizontal ), static_cast<float>( dpiVertical ) ) );
+ InitializeDpi();
- mSurface->SetAdaptor( *mAdaptor );
- }
+ mSurface->SetAdaptor( *mAdaptor );
+ mSurface->SetScene( mScene );
OnAdaptorSet( adaptor );
}
Integration::TouchEventCombiner::EventDispatchType type = mCombiner.GetNextTouchEvent(point, timeStamp, touchEvent, hoverEvent);
if( type != Integration::TouchEventCombiner::DispatchNone )
{
- DALI_LOG_INFO( gTouchEventLogFilter, Debug::General, "%d: Device %d: Button state %d (%.2f, %.2f)\n", timeStamp, point.GetDeviceId(), point.GetState(), point.GetScreenPosition().x, point.GetScreenPosition().y );
+ DALI_LOG_INFO( gSceneHolderLogFilter, Debug::Verbose, "%d: Device %d: Button state %d (%.2f, %.2f)\n", timeStamp, point.GetDeviceId(), point.GetState(), point.GetScreenPosition().x, point.GetScreenPosition().y );
// Signals can be emitted while processing core events, and the scene holder could be deleted in the signal callback.
// Keep the handle alive until the core events are processed.
mAdaptor->ProcessCoreEvents();
}
+void SceneHolder::AddFrameRenderedCallback( std::unique_ptr< CallbackBase > callback, int32_t frameId )
+{
+ mScene.AddFrameRenderedCallback( std::move( callback ), frameId );
+
+ DALI_LOG_INFO( gSceneHolderLogFilter, Debug::General, "SceneHolder::AddFrameRenderedCallback:: Added [%d]\n", frameId );
+}
+
+void SceneHolder::AddFramePresentedCallback( std::unique_ptr< CallbackBase > callback, int32_t frameId )
+{
+ mScene.AddFramePresentedCallback( std::move( callback ), frameId );
+
+ DALI_LOG_INFO( gSceneHolderLogFilter, Debug::General, "SceneHolder::AddFramePresentedCallback:: Added [%d]\n", frameId );
+}
+
Dali::Integration::SceneHolder SceneHolder::Get( Dali::Actor actor )
{
SceneHolder* sceneHolderImpl = nullptr;
mAdaptor->ProcessCoreEvents();
}
+void SceneHolder::InitializeDpi()
+{
+ unsigned int dpiHorizontal, dpiVertical;
+ dpiHorizontal = dpiVertical = 0;
+
+ mSurface->GetDpi( dpiHorizontal, dpiVertical );
+ mScene.SetDpi( Vector2( static_cast<float>( dpiHorizontal ), static_cast<float>( dpiVertical ) ) );
+
+ mDpi.SetX( dpiHorizontal );
+ mDpi.SetY( dpiVertical );
+}
}// Adaptor