return GetImplementation( window ).GetCurrentOrientation();
}
+void SetAvailableOrientations( Window window, const Dali::Vector<Dali::Window::WindowOrientation>& orientations )
+{
+ GetImplementation( window ).SetAvailableOrientations( orientations );
+}
+
} // namespace DevelWindow
} // namespace Dali
*/
DALI_ADAPTOR_API Dali::Window::WindowOrientation GetCurrentOrientation( Window window );
+/**
+ * @brief Sets available orientations of the window.
+ *
+ * This API is for setting several orientations one time.
+ *
+ * @param[in] window The window instance
+ * @param[in] orientations The available orientation list to add
+ */
+DALI_ADAPTOR_API void SetAvailableOrientations( Window window, const Dali::Vector<Dali::Window::WindowOrientation>& orientations );
+
} // namespace DevelWindow
} // namespace Dali
{
Integration::SetPinchGestureMinimumDistance( mEnvironmentOptions->GetMinimumPinchDistance() );
}
+ if( mEnvironmentOptions->GetMinimumPinchTouchEvents() >= 0 )
+ {
+ Integration::SetPinchGestureMinimumTouchEvents( mEnvironmentOptions->GetMinimumPinchTouchEvents() );
+ }
+ if( mEnvironmentOptions->GetMinimumPinchTouchEventsAfterStart() >= 0 )
+ {
+ Integration::SetPinchGestureMinimumTouchEventsAfterStart( mEnvironmentOptions->GetMinimumPinchTouchEventsAfterStart() );
+ }
+ if( mEnvironmentOptions->GetMinimumRotationTouchEvents() >= 0 )
+ {
+ Integration::SetRotationGestureMinimumTouchEvents( mEnvironmentOptions->GetMinimumRotationTouchEvents() );
+ }
+ if( mEnvironmentOptions->GetMinimumRotationTouchEventsAfterStart() >= 0 )
+ {
+ Integration::SetRotationGestureMinimumTouchEventsAfterStart( mEnvironmentOptions->GetMinimumRotationTouchEventsAfterStart() );
+ }
if( mEnvironmentOptions->GetLongPressMinimumHoldingTime() >= 0 )
{
Integration::SetLongPressMinimumHoldingTime( mEnvironmentOptions->GetLongPressMinimumHoldingTime() );
// Add the new Window to the container - the order is not important
mWindows.push_back( &windowImpl );
+ Dali::RenderSurfaceInterface* surface = windowImpl.GetSurface();
+
+ mThreadController->AddSurface( surface );
+
mWindowCreatedSignal.Emit( childWindow );
return true;
mPreRenderCallback = callback;
}
+void CombinedUpdateRenderController::AddSurface( Dali::RenderSurfaceInterface* surface )
+{
+ LOG_EVENT_TRACE;
+ LOG_EVENT( "Surface is added" );
+ if( mUpdateRenderThread )
+ {
+ // Set the ThreadSyncronizationInterface on the added surface
+ surface->SetThreadSynchronization( *this );
+ }
+}
+
///////////////////////////////////////////////////////////////////////////////////////////////////
// EVENT THREAD
///////////////////////////////////////////////////////////////////////////////////////////////////
while( mPostRendering &&
! mNewSurface && // We should NOT wait if we're replacing the surface
! mDeletedSurface && // We should NOT wait if we're deleting the surface
- ! mSurfaceResized && // We should NOT wait if we're resizing the surface
! mDestroyUpdateRenderThread )
{
mUpdateRenderThreadWaitCondition.Wait( lock );
*/
void SetPreRenderCallback( CallbackBase* callback ) override;
+ /**
+ * @copydoc ThreadControllerInterface::AddSurface()
+ */
+ virtual void AddSurface( Dali::RenderSurfaceInterface* surface );
+
private:
// Undefined copy constructor.
*/
virtual void SetPreRenderCallback( CallbackBase* callback ) = 0;
+ /**
+ * @brief Adds the new surface.
+ * @param surface new surface
+ */
+ virtual void AddSurface( Dali::RenderSurfaceInterface* surface ) = 0;
+
protected:
/**
mPanMinimumDistance( -1 ),
mPanMinimumEvents( -1 ),
mPinchMinimumDistance( -1.0f ),
+ mPinchMinimumTouchEvents( -1 ),
+ mPinchMinimumTouchEventsAfterStart( -1 ),
+ mRotationMinimumTouchEvents( -1 ),
+ mRotationMinimumTouchEventsAfterStart( -1 ),
mLongPressMinimumHoldingTime( -1 ),
mGlesCallTime( 0 ),
mMultiSamplingLevel( DEFAULT_MULTI_SAMPLING_LEVEL ),
return mPinchMinimumDistance;
}
+int EnvironmentOptions::GetMinimumPinchTouchEvents() const
+{
+ return mPinchMinimumTouchEvents;
+}
+
+int EnvironmentOptions::GetMinimumPinchTouchEventsAfterStart() const
+{
+ return mPinchMinimumTouchEventsAfterStart;
+}
+
+int EnvironmentOptions::GetMinimumRotationTouchEvents() const
+{
+ return mRotationMinimumTouchEvents;
+}
+
+int EnvironmentOptions::GetMinimumRotationTouchEventsAfterStart() const
+{
+ return mRotationMinimumTouchEventsAfterStart;
+}
+
int EnvironmentOptions::GetLongPressMinimumHoldingTime() const
{
return mLongPressMinimumHoldingTime;
mPinchMinimumDistance = pinchMinimumDistance;
}
+ int pinchMinimumTouchEvents = -1;
+ if( GetIntegerEnvironmentVariable( DALI_ENV_PINCH_MINIMUM_TOUCH_EVENTS, pinchMinimumTouchEvents ) )
+ {
+ mPinchMinimumTouchEvents = pinchMinimumTouchEvents;
+ }
+
+ int pinchMinimumTouchEventsAfterStart = -1;
+ if( GetIntegerEnvironmentVariable( DALI_ENV_PINCH_MINIMUM_TOUCH_EVENTS_AFTER_START, pinchMinimumTouchEventsAfterStart ) )
+ {
+ mPinchMinimumTouchEventsAfterStart = pinchMinimumTouchEventsAfterStart;
+ }
+
+ int rotationMinimumTouchEvents = -1;
+ if( GetIntegerEnvironmentVariable( DALI_ENV_ROTATION_MINIMUM_TOUCH_EVENTS, rotationMinimumTouchEvents ) )
+ {
+ mRotationMinimumTouchEvents = rotationMinimumTouchEvents;
+ }
+
+ int rotationMinimumTouchEventsAfterStart = -1;
+ if( GetIntegerEnvironmentVariable( DALI_ENV_ROTATION_MINIMUM_TOUCH_EVENTS_AFTER_START, rotationMinimumTouchEventsAfterStart ) )
+ {
+ mRotationMinimumTouchEventsAfterStart = rotationMinimumTouchEventsAfterStart;
+ }
+
int longPressMinimumHoldingTime = -1;
if( GetIntegerEnvironmentVariable( DALI_ENV_LONG_PRESS_MINIMUM_HOLDING_TIME, longPressMinimumHoldingTime ) )
{
float GetMinimumPinchDistance() const;
/**
+ * @return The minimum touch events required before a pinch can be started (-1 means it's not set)
+ */
+ int GetMinimumPinchTouchEvents() const;
+
+ /**
+ * @return The minimum touch events required after a pinch started (-1 means it's not set)
+ */
+ int GetMinimumPinchTouchEventsAfterStart() const;
+
+ /**
+ * @return The minimum touch events required before a rotation can be started (-1 means it's not set)
+ */
+ int GetMinimumRotationTouchEvents() const;
+
+ /**
+ * @return The minimum touch events required after a rotation started (-1 means it's not set)
+ */
+ int GetMinimumRotationTouchEventsAfterStart() const;
+
+ /**
* @return The minimum holding time required to be recognized as a long press gesture (milliseconds)
*/
int GetLongPressMinimumHoldingTime() const;
int mPanMinimumDistance; ///< minimum distance required before pan starts
int mPanMinimumEvents; ///< minimum events required before pan starts
float mPinchMinimumDistance; ///< minimum number of pixels moved before a pinch starts
+ int mPinchMinimumTouchEvents; ///< minimum events required before a pinch starts
+ int mPinchMinimumTouchEventsAfterStart; ///< minimum events required after a pinch started
+ int mRotationMinimumTouchEvents; ///< minimum events required before a rotation starts
+ int mRotationMinimumTouchEventsAfterStart; ///< minimum events required after a rotation started
int mLongPressMinimumHoldingTime; ///< minimum holding time required to be recognized as a long press gesture (millisecond)
int mGlesCallTime; ///< time in seconds between status updates
int mMultiSamplingLevel; ///< The number of samples required in multisample buffers
#define DALI_ENV_PAN_MINIMUM_DISTANCE "DALI_PAN_MINIMUM_DISTANCE"
#define DALI_ENV_PAN_MINIMUM_EVENTS "DALI_PAN_MINIMUM_EVENTS"
-#define DALI_ENV_PINCH_MINIMUM_DISTANCE "DALI_PINCH_MINIMUM_DISTANCE"
+// Pinch-Gesture
+#define DALI_ENV_PINCH_MINIMUM_DISTANCE "DALI_PINCH_MINIMUM_DISTANCE"
+#define DALI_ENV_PINCH_MINIMUM_TOUCH_EVENTS "DALI_PINCH_MINIMUM_TOUCH_EVENTS"
+#define DALI_ENV_PINCH_MINIMUM_TOUCH_EVENTS_AFTER_START "DALI_PINCH_MINIMUM_TOUCH_EVENTS_AFTER_START"
+
+// Rotation-Gesture
+#define DALI_ENV_ROTATION_MINIMUM_TOUCH_EVENTS "DALI_ROTATION_MINIMUM_TOUCH_EVENTS"
+#define DALI_ENV_ROTATION_MINIMUM_TOUCH_EVENTS_AFTER_START "DALI_ROTATION_MINIMUM_TOUCH_EVENTS_AFTER_START"
/**
* The minimum holding time required to be recognized as a long press gesture (milliseconds)
mThreadControllerInterface->SetPreRenderCallback( callback );
}
+void ThreadController::AddSurface( Dali::RenderSurfaceInterface* newSurface )
+{
+ mThreadControllerInterface->AddSurface( newSurface );
+}
+
} // namespace Adaptor
} // namespace Internal
*/
void SetPreRenderCallback( CallbackBase* callback );
+ /**
+ * @brief Adds the new surface.
+ *
+ * @param surface new surface
+ */
+ void AddSurface( Dali::RenderSurfaceInterface* surface );
+
private:
// Undefined copy constructor.
mCameraActor.Unparent();
mCameraActor.Reset();
- DALI_ASSERT_ALWAYS(mRenderTask && "RenderTask is NULL.");
+ DALI_ASSERT_ALWAYS( mRenderTask && "RenderTask is NULL." );
Dali::RenderTaskList taskList = Dali::Stage::GetCurrent().GetRenderTaskList();
- Dali::RenderTask firstTask = taskList.GetTask( 0u );
-
- // Stop rendering via frame-buffers as empty handle is used to clear target
- firstTask.SetFrameBuffer( Dali::FrameBuffer() );
-
taskList.RemoveTask( mRenderTask );
mRenderTask.Reset();
}
return ConvertToOrientation( mRotationAngle );
}
+void Window::SetAvailableOrientations( const Dali::Vector<Dali::Window::WindowOrientation>& orientations )
+{
+ Dali::Vector<float>::SizeType count = orientations.Count();
+ for( Dali::Vector<float>::SizeType index = 0; index < count; ++index )
+ {
+ if( IsOrientationAvailable( orientations[index] ) == false )
+ {
+ DALI_LOG_ERROR("Window::SetAvailableOrientations, invalid orientation: %d\n", orientations[index]);
+ continue;
+ }
+
+ bool found = false;
+ int convertedAngle = ConvertToAngle( orientations[index] );
+
+ for( std::size_t i = 0; i < mAvailableAngles.size(); i++ )
+ {
+ if( mAvailableAngles[i] == convertedAngle )
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if( !found )
+ {
+ DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), SetAvailableOrientations: %d\n", this, mNativeWindowId, convertedAngle );
+ mAvailableAngles.push_back( convertedAngle );
+ }
+ }
+ SetAvailableAnlges( mAvailableAngles );
+}
+
} // Adaptor
} // Internal
#include <dali/public-api/object/base-object.h>
#include <dali/public-api/actors/layer.h>
#include <dali/public-api/render-tasks/render-task-list.h>
+#include <dali/public-api/object/property-array.h>
// INTERNAL INCLUDES
#include <dali/public-api/adaptor-framework/window.h>
*/
Dali::Window::WindowOrientation GetCurrentOrientation() const;
+ /**
+ * @copydoc Dali::DevelWindow::SetAvailableOrientations()
+ */
+ void SetAvailableOrientations( const Dali::Vector<Dali::Window::WindowOrientation>& orientations );
+
public: // Dali::Internal::Adaptor::SceneHolder
/**
{
if( !mRotationFinished )
{
- DALI_LOG_INFO( gWindowRenderSurfaceLogFilter, Debug::Verbose, "WindowRenderSurface::PostRender: Trigger rotation event\n" );
+ if( mThreadSynchronization )
+ {
+ // Enable PostRender flag
+ mThreadSynchronization->PostRenderStarted();
+ }
+
+ DALI_LOG_RELEASE_INFO("WindowRenderSurface::PostRender: Trigger rotation event\n" );
mRotationTrigger->Trigger();
const unsigned int ADAPTOR_MAJOR_VERSION = 1;
const unsigned int ADAPTOR_MINOR_VERSION = 4;
-const unsigned int ADAPTOR_MICRO_VERSION = 56;
+const unsigned int ADAPTOR_MICRO_VERSION = 57;
const char * const ADAPTOR_BUILD_DATE = __DATE__ " " __TIME__;
#ifdef DEBUG_ENABLED
Name: dali-adaptor
Summary: The DALi Tizen Adaptor
-Version: 1.4.56
+Version: 1.4.57
Release: 1
Group: System/Libraries
License: Apache-2.0 and BSD-3-Clause and MIT