- Ubuntu 16.04 or later
- Environment created using dali_env script in dali-core repository
- GCC version 9
+ - Cmake version 3.8.2 or later
DALi requires a compiler supporting C++17 features.
void DALI_TEST_EQUALS( const char* str1, const std::string &str2, const char* location);
/**
+ * Test if a property value type is equal to a trivial type.
+ */
+template<typename Type>
+inline void DALI_TEST_VALUE_EQUALS( Property::Value&& value1, Type value2, float epsilon, const char* location)
+{
+ Property::Value value2b(value2);
+ DALI_TEST_EQUALS(value1, value2b, epsilon, location);
+}
+
+
+/**
* Test whether one unsigned integer value is greater than another.
* Test succeeds if value1 > value2
* @param[in] value1 The first value
-CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.8.2)
CMAKE_POLICY(SET CMP0012 NEW) # Prevent dereferencing of OFF/ON as variables
SET(CMAKE_C_STANDARD 99)
+SET(CMAKE_CXX_STANDARD 17)
PROJECT(${name} CXX)
SET(PKG_NAME ${name})
# Set up compiler flags and warnings
IF( UNIX )
- ADD_COMPILE_OPTIONS( -std=c++17 ) # c++17 support
ADD_COMPILE_OPTIONS( -Wall ${DALI_CFLAGS} )# -Wextra -Wno-unused-parameter )# -Wfloat-equal )
ELSEIF( WIN32 ) # WIN32 includes x64 as well according to the cmake doc.
ADD_COMPILE_OPTIONS( /FIdali-windows-dependencies.h ) #
ADD_COMPILE_OPTIONS( /FIextern-definitions.h ) # Adds missing definitions.
ADD_COMPILE_OPTIONS( /FIpreprocessor-definitions.h ) #
ADD_COMPILE_OPTIONS( /vmg ) # Avoids a 'reinterpret_cast' compile error while compiling signals and callbacks.
- ADD_COMPILE_OPTIONS( /std:c++17 ) # c++17 support
ADD_COMPILE_OPTIONS( /wd4251 ) # Ignores warning C4251: "'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'"
ENDIF()
*/
virtual bool AccessibilityActionStartStop() = 0;
- /**
- * Perform the accessibility action to mouse move (by one finger tap & hold and move).
- * @param touch touch data
- * @return whether the accessibility action is performed or not.
- */
- virtual bool AccessibilityActionTouch(const Dali::TouchEvent& touch) = 0;
-
}; // class AccessibilityActionHandler
} // namespace Dali
return Internal::Adaptor::AccessibilityAdaptor::GetImplementation(*this).HandleActionScrollEvent(point, timeStamp);
}
-bool AccessibilityAdaptor::HandleActionTouchEvent(const TouchPoint& point, unsigned long timeStamp)
-{
- return Internal::Adaptor::AccessibilityAdaptor::GetImplementation(*this).HandleActionTouchEvent(point, timeStamp);
-}
-
bool AccessibilityAdaptor::HandleActionBackEvent()
{
return Internal::Adaptor::AccessibilityAdaptor::GetImplementation(*this).HandleActionBackEvent();
bool HandleActionScrollEvent(const TouchPoint& point, unsigned long timeStamp);
/**
- * @brief Handle the accessibility action to move for the current focused actor
- * (by 1 finger tap & hold and move).
- *
- * @param[in] point The touch point information.
- * @param[in] timeStamp The time the touch occurred.
- * @return Whether the action is performed successfully or not.
- */
- bool HandleActionTouchEvent(const TouchPoint& point, unsigned long timeStamp);
-
- /**
* @brief Handle the accessibility action to navigate back (by two fingers circle draw).
* @return Whether the action is performed successfully or not.
*/
#define DALI_EVENT_FEEDER_H
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
namespace Dali
{
+class WheelEvent;
struct KeyEvent;
-struct WheelEvent;
struct TouchPoint;
namespace EventFeeder
if (isAdaptorAvailable)
{
Dali::Adaptor& adaptor = Internal::Adaptor::Adaptor::Get();
- Internal::Adaptor::Adaptor::GetImplementation(adaptor).AddWindow(sceneHolder, name, className, isTransparent);
+ Internal::Adaptor::Adaptor::GetImplementation(adaptor).AddWindow(sceneHolder);
}
newWindow = Window(window);
}
{
struct KeyEvent;
class TouchEvent;
-struct WheelEvent;
+class WheelEvent;
class RenderTaskList;
namespace DevelWindow
* @brief Adds a new Window instance to the Adaptor
*
* @param[in] childWindow The child window instance
- * @param[in] childWindowName The child window title/name
- * @param[in] childWindowClassName The class name that the child window belongs to
- * @param[in] childWindowMode The mode of the child window
- */
- bool AddWindow( Dali::Integration::SceneHolder childWindow,
- const std::string& childWindowName,
- const std::string& childWindowClassName,
- bool childWindowMode );
+ */
+ bool AddWindow( Dali::Integration::SceneHolder childWindow );
/**
* @brief Removes a previously added @p callback.
class Adaptor;
class Actor;
class Layer;
+class WheelEvent;
struct TouchPoint;
-struct WheelEvent;
struct KeyEvent;
namespace Integration
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
void SceneHolder::FeedWheelEvent( Dali::WheelEvent& wheelEvent )
{
- Integration::WheelEvent event( static_cast< Integration::WheelEvent::Type >(wheelEvent.type), wheelEvent.direction, wheelEvent.modifiers, wheelEvent.point, wheelEvent.z, wheelEvent.timeStamp );
+ Integration::WheelEvent event( static_cast< Integration::WheelEvent::Type >( wheelEvent.GetType() ), wheelEvent.GetDirection(), wheelEvent.GetModifiers(), wheelEvent.GetPoint(), wheelEvent.GetDelta(), wheelEvent.GetTime() );
GetImplementation(*this).FeedWheelEvent( event );
}
class Layer;
class Any;
class TouchEvent;
+class WheelEvent;
struct TouchPoint;
-struct WheelEvent;
struct KeyEvent;
namespace Internal DALI_INTERNAL
return ret;
}
-bool AccessibilityAdaptor::HandleActionTouchEvent(const TouchPoint& point, uint32_t timeStamp)
-{
- bool ret = false;
-
- Dali::TouchEvent touch = Integration::NewTouchEvent( timeStamp, point );
-
- if( mActionHandler )
- {
- ret = mActionHandler->AccessibilityActionTouch( touch );
- }
- return ret;
-}
-
bool AccessibilityAdaptor::HandleActionBackEvent()
{
bool ret = false;
bool HandleActionScrollEvent(const TouchPoint& point, uint32_t timeStamp);
/**
- * @copydoc Dali::AccessibilityAdaptor::HandleActionTouchEvent()
- */
- bool HandleActionTouchEvent(const TouchPoint& point, uint32_t timeStamp);
-
- /**
* @copydoc Dali::AccessibilityAdaptor::HandleActionBackEvent()
*/
bool HandleActionBackEvent();
#include <dali/public-api/actors/layer.h>
#include <dali/public-api/object/any.h>
#include <dali/public-api/object/object-registry.h>
+#include <dali/public-api/events/wheel-event.h>
#include <dali/devel-api/actors/actor-devel.h>
#include <dali/integration-api/debug.h>
#include <dali/integration-api/core.h>
mWindows.front()->FeedTouchPoint( convertedPoint, timeStamp );
}
-void Adaptor::FeedWheelEvent( WheelEvent& wheelEvent )
+void Adaptor::FeedWheelEvent( Dali::WheelEvent& wheelEvent )
{
- Integration::WheelEvent event( static_cast< Integration::WheelEvent::Type >(wheelEvent.type), wheelEvent.direction, wheelEvent.modifiers, wheelEvent.point, wheelEvent.z, wheelEvent.timeStamp );
+ Integration::WheelEvent event( static_cast< Integration::WheelEvent::Type >( wheelEvent.GetType() ), wheelEvent.GetDirection(), wheelEvent.GetModifiers(), wheelEvent.GetPoint(), wheelEvent.GetDelta(), wheelEvent.GetTime() );
mWindows.front()->FeedWheelEvent( event );
}
mThreadController->SetPreRenderCallback( callback );
}
-bool Adaptor::AddWindow( Dali::Integration::SceneHolder childWindow, const std::string& childWindowName, const std::string& childWindowClassName, bool childWindowMode )
+bool Adaptor::AddWindow( Dali::Integration::SceneHolder childWindow )
{
Internal::Adaptor::SceneHolder& windowImpl = Dali::GetImplementation( childWindow );
windowImpl.SetAdaptor( Get() );
/**
* @copydoc Dali::EventFeeder::FeedWheelEvent()
*/
- virtual void FeedWheelEvent( WheelEvent& wheelEvent );
+ virtual void FeedWheelEvent( Dali::WheelEvent& wheelEvent );
/**
* @copydoc Dali::EventFeeder::FeedKeyEvent()
/**
* Adds a new Window instance to the Adaptor
* @param[in] childWindow The child window instance
- * @param[in] childWindowName The child window title/name
- * @param[in] childWindowClassName The class name that the child window belongs to
- * @param[in] childWindowMode The mode of the child window
- */
- virtual bool AddWindow( Dali::Integration::SceneHolder childWindow,
- const std::string& childWindowName,
- const std::string& childWindowClassName,
- bool childWindowMode );
+ */
+ virtual bool AddWindow( Dali::Integration::SceneHolder childWindow );
/**
* Removes an existing Window instance from the Adaptor
return mImpl->AddIdle( callback, hasReturnValue, false );
}
-bool Adaptor::AddWindow( Dali::Integration::SceneHolder childWindow, const std::string& childWindowName, const std::string& childWindowClassName, bool childWindowMode )
+bool Adaptor::AddWindow( Dali::Integration::SceneHolder childWindow )
{
DALI_ASSERT_ALWAYS( IsAvailable() && "Adaptor not instantiated" );
- return mImpl->AddWindow( childWindow, childWindowName, childWindowClassName, childWindowMode );
+ return mImpl->AddWindow( childWindow );
}
void Adaptor::RemoveIdle( CallbackBase* callback )
/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
return Dali::VirtualKeyboard::LeftToRight;
}
-Dali::InputMethod::ActionButton gActionButtonFunction = Dali::InputMethod::ACTION_DEFAULT;
-
-
void RotateTo(int angle)
{
}
// EXTERNAL INCLUDES
#include <fstream>
#include <string.h>
-#include <dali/devel-api/common/stage.h>
#include <dali/public-api/common/vector-wrapper.h>
#include <dali/public-api/render-tasks/render-task-list.h>
#include <dali/integration-api/debug.h>
// INTERNAL INCLUDES
#include <dali/integration-api/adaptor-framework/adaptor.h>
#include <dali/devel-api/adaptor-framework/native-image-source-devel.h>
+#include <dali/devel-api/adaptor-framework/window-devel.h>
namespace
{
return pWorker;
}
-void Capture::Start( Dali::Actor source, const Dali::Vector2& size, const std::string &path, const Dali::Vector4& clearColor, const uint32_t quality )
+void Capture::Start( Dali::Actor source, const Dali::Vector2& position, const Dali::Vector2& size, const std::string &path, const Dali::Vector4& clearColor, const uint32_t quality )
{
mQuality = quality;
- Start( source, size, path, clearColor );
+ Start( source, position, size, path, clearColor );
}
-void Capture::Start( Dali::Actor source, const Dali::Vector2& size, const std::string &path, const Dali::Vector4& clearColor )
+void Capture::Start( Dali::Actor source, const Dali::Vector2& position, const Dali::Vector2& size, const std::string &path, const Dali::Vector4& clearColor )
{
DALI_ASSERT_ALWAYS(path.size() > 4 && "Path is invalid.");
DALI_ASSERT_ALWAYS(source && "Source is NULL.");
UnsetResources();
- SetupResources( size, clearColor, source );
+ SetupResources( position, size, clearColor, source );
+}
+
+void Capture::SetImageQuality( uint32_t quality )
+{
+ mQuality = quality;
}
Dali::NativeImageSourcePtr Capture::GetNativeImageSource() const
return mFrameBuffer;
}
-void Capture::SetupRenderTask( Dali::Actor source, const Dali::Vector4& clearColor )
+void Capture::SetupRenderTask( const Dali::Vector2& position, const Dali::Vector2& size, Dali::Actor source, const Dali::Vector4& clearColor )
{
DALI_ASSERT_ALWAYS(source && "Source is empty.");
- mSource = source;
-
- // Check the original parent about source.
- mParent = mSource.GetParent();
-
- Dali::Stage stage = Dali::Stage::GetCurrent();
- Dali::Size stageSize = stage.GetSize();
+ Dali::Window window = DevelWindow::Get( source );
+ if( !window )
+ {
+ DALI_LOG_ERROR("The source is not added on the window\n");
+ return;
+ }
- // Add to stage for rendering the source. If source isn't on the stage then it never be rendered.
- stage.Add( mSource );
+ mSource = source;
if( !mCameraActor )
{
- mCameraActor = Dali::CameraActor::New( stageSize );
- mCameraActor.SetProperty( Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
+ mCameraActor = Dali::CameraActor::New( size );
+ // Because input position and size are for 2 dimentional area,
+ // default z-directional position of the camera is required to be used for the new camera position.
+ float cameraDefaultZPosition = mCameraActor.GetProperty<float>( Dali::Actor::Property::POSITION_Z );
+ Vector2 positionTransition = position + size / 2;
+ mCameraActor.SetProperty( Dali::Actor::Property::POSITION, Vector3( positionTransition.x, positionTransition.y, cameraDefaultZPosition ) );
+ mCameraActor.SetProperty( Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
mCameraActor.SetProperty( Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
}
- stage.Add( mCameraActor );
+ window.Add( mCameraActor );
DALI_ASSERT_ALWAYS(mFrameBuffer && "Framebuffer is NULL.");
DALI_ASSERT_ALWAYS(!mRenderTask && "RenderTask is already created.");
- Dali::RenderTaskList taskList = stage.GetRenderTaskList();
+ Dali::RenderTaskList taskList = window.GetRenderTaskList();
mRenderTask = taskList.CreateTask();
mRenderTask.SetRefreshRate( Dali::RenderTask::REFRESH_ONCE );
mRenderTask.SetSourceActor( source );
{
DALI_ASSERT_ALWAYS(mCameraActor && "CameraActor is NULL.");
- if( mParent )
- {
- // Restore the parent of source.
- mParent.Add( mSource );
- mParent.Reset();
- }
- else
- {
- mSource.Unparent();
- }
-
- mSource.Reset();
-
mTimer.Reset();
mCameraActor.Unparent();
DALI_ASSERT_ALWAYS( mRenderTask && "RenderTask is NULL." );
- Dali::RenderTaskList taskList = Dali::Stage::GetCurrent().GetRenderTaskList();
+ Dali::Window window = DevelWindow::Get( mSource );
+ Dali::RenderTaskList taskList = window.GetRenderTaskList();
taskList.RemoveTask( mRenderTask );
mRenderTask.Reset();
+ mSource.Reset();
}
bool Capture::IsRenderTaskSetup()
return mCameraActor && mRenderTask;
}
-void Capture::SetupResources( const Dali::Vector2& size, const Dali::Vector4& clearColor, Dali::Actor source )
+void Capture::SetupResources( const Dali::Vector2& position, const Dali::Vector2& size, const Dali::Vector4& clearColor, Dali::Actor source )
{
CreateNativeImageSource( size );
CreateFrameBuffer();
- SetupRenderTask( source, clearColor );
+ SetupRenderTask( position, size, source, clearColor );
}
void Capture::UnsetResources()
/**
* @copydoc Dali::Capture::Start
*/
- void Start( Dali::Actor source, const Dali::Vector2& size, const std::string &path, const Dali::Vector4& clearColor, const uint32_t quality );
+ void Start( Dali::Actor source, const Dali::Vector2& position, const Dali::Vector2& size, const std::string &path, const Dali::Vector4& clearColor, const uint32_t quality );
/**
* @copydoc Dali::Capture::Start
*/
- void Start( Dali::Actor source, const Dali::Vector2& size, const std::string &path, const Dali::Vector4& clearColor );
+ void Start( Dali::Actor source, const Dali::Vector2& position, const Dali::Vector2& size, const std::string &path, const Dali::Vector4& clearColor );
+
+ /**
+ * @copydoc Dali::Capture::SetImageQuality
+ */
+ void SetImageQuality( uint32_t quality );
/**
* @copydoc Dali::Capture::GetNativeImageSource
/**
* @brief Setup render task.
*
- * @param[in] source is captured.
+ * @param[in] position top-left position of area to be captured
+ * this position is defined in the window.
+ * @param[in] size two dimensional size of area to be captured
+ * @param[in] source sub-scene tree to be captured.
* @param[in] clearColor background color
*/
- void SetupRenderTask( Dali::Actor source, const Dali::Vector4& clearColor );
+ void SetupRenderTask( const Dali::Vector2& position, const Dali::Vector2& size, Dali::Actor source, const Dali::Vector4& clearColor );
/**
* @brief Unset render task.
/**
* @brief Setup resources for capture.
*
- * @param[in] size is surface size.
- * @param[in] clearColor is clear color of surface.
- * @param[in] source is captured.
+ * @param[in] position top-left position of area to be captured
+ * this position is defined in the window.
+ * @param[in] size two dimensional size of area to be captured
+ * @param[in] clearColor color to clear background surface.
+ * @param[in] source sub-scene tree to be captured.
*/
- void SetupResources( const Dali::Vector2& size, const Dali::Vector4& clearColor, Dali::Actor source );
+ void SetupResources( const Dali::Vector2& position, const Dali::Vector2& size, const Dali::Vector4& clearColor, Dali::Actor source );
/**
* @brief Unset resources for capture.
Dali::Texture mNativeTexture;
Dali::FrameBuffer mFrameBuffer;
Dali::RenderTask mRenderTask;
- Dali::Actor mParent;
Dali::Actor mSource;
Dali::CameraActor mCameraActor;
Dali::Timer mTimer; ///< For timeout.
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
}
-void EventHandler::OnWheelEvent( WheelEvent& wheelEvent )
+void EventHandler::OnWheelEvent( Integration::WheelEvent& wheelEvent )
{
- Integration::WheelEvent event( static_cast< Integration::WheelEvent::Type >(wheelEvent.type), wheelEvent.direction, wheelEvent.modifiers, wheelEvent.point, wheelEvent.z, wheelEvent.timeStamp );
-
for ( ObserverContainer::iterator iter = mObservers.begin(), endIter = mObservers.end(); iter != endIter; ++iter )
{
- (*iter)->OnWheelEvent( event );
+ (*iter)->OnWheelEvent( wheelEvent );
}
}
#define DALI_INTERNAL_EVENT_HANDLER_H
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/**
* Called when a mouse wheel is received.
*/
- void OnWheelEvent( WheelEvent& wheelEvent );
+ void OnWheelEvent( Integration::WheelEvent& wheelEvent );
/**
* Called when a key event is received.
#define DALI_INTERNAL_WINDOWSYSTEM_COMMON_WINDOW_BASE_H
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
// EXTERNAL INCLUDES
#include <dali/integration-api/events/key-event-integ.h>
#include <dali/integration-api/events/point.h>
-#include <dali/public-api/events/wheel-event.h>
+#include <dali/integration-api/events/wheel-event-integ.h>
#include <string>
#include <vector>
#include <cstdint>
// Input events
typedef Signal< void ( Integration::Point&, uint32_t ) > TouchEventSignalType;
- typedef Signal< void ( WheelEvent& ) > WheelEventSignalType;
+ typedef Signal< void ( Integration::WheelEvent& ) > WheelEventSignalType;
typedef Signal< void( Integration::KeyEvent& ) > KeyEventSignalType;
// Clipboard
mColorDepth( isTransparent ? COLOR_DEPTH_32 : COLOR_DEPTH_24 ),
mOutputTransformedSignal(),
mFrameCallbackInfoContainer(),
+ mMutex(),
mRotationAngle( 0 ),
mScreenRotationAngle( 0 ),
mOwnSurface( false ),
Dali::Integration::Scene scene = mScene.GetHandle();
if( scene )
{
+ bool needFrameRenderedTrigger = false;
+
scene.GetFrameRenderedCallback( callbacks );
if( !callbacks.empty() )
{
int frameRenderedSync = mWindowBase->CreateFrameRenderedSyncFence();
if( frameRenderedSync != -1 )
{
+ Dali::Mutex::ScopedLock lock( mMutex );
+
DALI_LOG_INFO( gWindowRenderSurfaceLogFilter, Debug::Verbose, "WindowRenderSurface::PreRender: CreateFrameRenderedSyncFence [%d]\n", frameRenderedSync );
mFrameCallbackInfoContainer.push_back( std::unique_ptr< FrameCallbackInfo >( new FrameCallbackInfo( callbacks, frameRenderedSync ) ) );
- if( !mFrameRenderedTrigger )
- {
- mFrameRenderedTrigger = std::unique_ptr< TriggerEventInterface >( TriggerEventFactory::CreateTriggerEvent( MakeCallback( this, &WindowRenderSurface::ProcessFrameCallback ),
- TriggerEventInterface::KEEP_ALIVE_AFTER_TRIGGER ) );
- }
- mFrameRenderedTrigger->Trigger();
+ needFrameRenderedTrigger = true;
}
else
{
int framePresentedSync = mWindowBase->CreateFramePresentedSyncFence();
if( framePresentedSync != -1 )
{
+ Dali::Mutex::ScopedLock lock( mMutex );
+
DALI_LOG_INFO( gWindowRenderSurfaceLogFilter, Debug::Verbose, "WindowRenderSurface::PreRender: CreateFramePresentedSyncFence [%d]\n", framePresentedSync );
mFrameCallbackInfoContainer.push_back( std::unique_ptr< FrameCallbackInfo >( new FrameCallbackInfo( callbacks, framePresentedSync ) ) );
- if( !mFrameRenderedTrigger )
- {
- mFrameRenderedTrigger = std::unique_ptr< TriggerEventInterface >( TriggerEventFactory::CreateTriggerEvent( MakeCallback( this, &WindowRenderSurface::ProcessFrameCallback ),
- TriggerEventInterface::KEEP_ALIVE_AFTER_TRIGGER ) );
- }
- mFrameRenderedTrigger->Trigger();
+ needFrameRenderedTrigger = true;
}
else
{
// Clear callbacks
callbacks.clear();
}
+
+ if( needFrameRenderedTrigger )
+ {
+ if( !mFrameRenderedTrigger )
+ {
+ mFrameRenderedTrigger = std::unique_ptr< TriggerEventInterface >( TriggerEventFactory::CreateTriggerEvent( MakeCallback( this, &WindowRenderSurface::ProcessFrameCallback ),
+ TriggerEventInterface::KEEP_ALIVE_AFTER_TRIGGER ) );
+ }
+ mFrameRenderedTrigger->Trigger();
+ }
}
MakeContextCurrent();
void WindowRenderSurface::ProcessFrameCallback()
{
+ Dali::Mutex::ScopedLock lock( mMutex );
+
for( auto&& iter : mFrameCallbackInfoContainer )
{
if( !iter->fileDescriptorMonitor )
DALI_LOG_INFO( gWindowRenderSurfaceLogFilter, Debug::Verbose, "WindowRenderSurface::OnFileDescriptorEventDispatched: Frame rendered [%d]\n", fileDescriptor );
- auto frameCallbackInfo = std::find_if( mFrameCallbackInfoContainer.begin(), mFrameCallbackInfoContainer.end(),
- [fileDescriptor]( std::unique_ptr< FrameCallbackInfo >& callbackInfo )
- {
- return callbackInfo->fileDescriptor == fileDescriptor;
- } );
- if( frameCallbackInfo != mFrameCallbackInfoContainer.end() )
+ std::unique_ptr< FrameCallbackInfo > callbackInfo;
+ {
+ Dali::Mutex::ScopedLock lock( mMutex );
+ auto frameCallbackInfo = std::find_if( mFrameCallbackInfoContainer.begin(), mFrameCallbackInfoContainer.end(),
+ [fileDescriptor]( std::unique_ptr< FrameCallbackInfo >& callbackInfo )
+ {
+ return callbackInfo->fileDescriptor == fileDescriptor;
+ } );
+ if( frameCallbackInfo != mFrameCallbackInfoContainer.end() )
+ {
+ callbackInfo = std::move( *frameCallbackInfo );
+
+ mFrameCallbackInfoContainer.erase( frameCallbackInfo );
+ }
+ }
+
+ // Call the connected callback
+ if( callbackInfo )
{
- // Call the connected callback
- for( auto&& iter : ( *frameCallbackInfo )->callbacks )
+ for( auto&& iter : ( callbackInfo )->callbacks )
{
CallbackBase::Execute( *( iter.first ), iter.second );
}
- mFrameCallbackInfoContainer.erase( frameCallbackInfo );
}
}
// EXTERNAL INCLUDES
#include <dali/public-api/signals/connection-tracker.h>
#include <dali/public-api/signals/dali-signal.h>
+#include <dali/devel-api/threading/mutex.h>
#include <dali/integration-api/scene.h>
#include <unistd.h>
ColorDepth mColorDepth; ///< Color depth of surface (32 bit or 24 bit)
OutputSignalType mOutputTransformedSignal;
FrameCallbackInfoContainer mFrameCallbackInfoContainer;
+ Dali::Mutex mMutex;
int mRotationAngle;
int mScreenRotationAngle;
bool mOwnSurface; ///< Whether we own the surface (responsible for deleting it)
{
DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreWl::OnMouseWheel: direction: %d, modifiers: %d, x: %d, y: %d, z: %d\n", mouseWheelEvent->direction, mouseWheelEvent->modifiers, mouseWheelEvent->x, mouseWheelEvent->y, mouseWheelEvent->z );
- WheelEvent wheelEvent( WheelEvent::MOUSE_WHEEL, mouseWheelEvent->direction, mouseWheelEvent->modifiers, Vector2( mouseWheelEvent->x, mouseWheelEvent->y ), mouseWheelEvent->z, mouseWheelEvent->timestamp );
+ Integration::WheelEvent wheelEvent( Integration::WheelEvent::MOUSE_WHEEL, mouseWheelEvent->direction, mouseWheelEvent->modifiers, Vector2( mouseWheelEvent->x, mouseWheelEvent->y ), mouseWheelEvent->z, mouseWheelEvent->timestamp );
mWheelEventSignal.Emit( wheelEvent );
}
int direction = ( detentEvent->direction == ECORE_DETENT_DIRECTION_CLOCKWISE ) ? 1 : -1;
int timeStamp = detentEvent->timestamp;
- WheelEvent wheelEvent( WheelEvent::CUSTOM_WHEEL, 0, 0, Vector2( 0.0f, 0.0f ), direction, timeStamp );
+ Integration::WheelEvent wheelEvent( Integration::WheelEvent::CUSTOM_WHEEL, 0, 0, Vector2( 0.0f, 0.0f ), direction, timeStamp );
mWheelEventSignal.Emit( wheelEvent );
}
{
DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreWl::OnMouseWheel: direction: %d, modifiers: %d, x: %d, y: %d, z: %d\n", mouseWheelEvent->direction, mouseWheelEvent->modifiers, mouseWheelEvent->x, mouseWheelEvent->y, mouseWheelEvent->z );
- WheelEvent wheelEvent( WheelEvent::MOUSE_WHEEL, mouseWheelEvent->direction, mouseWheelEvent->modifiers, Vector2( mouseWheelEvent->x, mouseWheelEvent->y ), mouseWheelEvent->z, mouseWheelEvent->timestamp );
+ Integration::WheelEvent wheelEvent( Integration::WheelEvent::MOUSE_WHEEL, mouseWheelEvent->direction, mouseWheelEvent->modifiers, Vector2( mouseWheelEvent->x, mouseWheelEvent->y ), mouseWheelEvent->z, mouseWheelEvent->timestamp );
mWheelEventSignal.Emit( wheelEvent );
}
int direction = ( detentEvent->direction == ECORE_DETENT_DIRECTION_CLOCKWISE ) ? 1 : -1;
int timeStamp = detentEvent->timestamp;
- WheelEvent wheelEvent( WheelEvent::CUSTOM_WHEEL, direction, 0, Vector2( 0.0f, 0.0f ), 0, timeStamp );
+ Integration::WheelEvent wheelEvent( Integration::WheelEvent::CUSTOM_WHEEL, direction, 0, Vector2( 0.0f, 0.0f ), 0, timeStamp );
mWheelEventSignal.Emit( wheelEvent );
}
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
{
DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreX::OnMouseWheel: direction: %d, modifiers: %d, x: %d, y: %d, z: %d\n", mouseWheelEvent->direction, mouseWheelEvent->modifiers, mouseWheelEvent->x, mouseWheelEvent->y, mouseWheelEvent->z );
- WheelEvent wheelEvent( WheelEvent::MOUSE_WHEEL, mouseWheelEvent->direction, mouseWheelEvent->modifiers, Vector2( static_cast<float>( mouseWheelEvent->x ), static_cast<float>( mouseWheelEvent->y ) ), mouseWheelEvent->z, mouseWheelEvent->timestamp );
+ Integration::WheelEvent wheelEvent( Integration::WheelEvent::MOUSE_WHEEL, mouseWheelEvent->direction, mouseWheelEvent->modifiers, Vector2( static_cast<float>( mouseWheelEvent->x ), static_cast<float>( mouseWheelEvent->y ) ), mouseWheelEvent->z, mouseWheelEvent->timestamp );
mWheelEventSignal.Emit( wheelEvent );
}
/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
{
DALI_LOG_INFO( gWindowBaseLogFilter, Debug::General, "WindowBaseWin::OnMouseWheel: direction: %d, modifiers: %d, x: %d, y: %d, z: %d\n", mouseWheelEvent.direction, mouseWheelEvent.modifiers, mouseWheelEvent.x, mouseWheelEvent.y, mouseWheelEvent.z );
- WheelEvent wheelEvent( WheelEvent::MOUSE_WHEEL, mouseWheelEvent.direction, mouseWheelEvent.modifiers, Vector2( mouseWheelEvent.x, mouseWheelEvent.y ), mouseWheelEvent.z, mouseWheelEvent.timestamp );
+ Integration::WheelEvent wheelEvent( Integration::WheelEvent::MOUSE_WHEEL, mouseWheelEvent.direction, mouseWheelEvent.modifiers, Vector2( mouseWheelEvent.x, mouseWheelEvent.y ), mouseWheelEvent.z, mouseWheelEvent.timestamp );
mWheelEventSignal.Emit( wheelEvent );
}
} // namespace PasswordLayout
-
-/**
- * @DEPRECATED_1_3.20 Use ButtonAction instead.
- * @brief Enumeration for specifying what the Input Method "action" button functionality is set to.
- *
- * The 'Action' button is traditionally the [RETURN] or [DONE] button.
- *
- * Not all these actions are supported by all systems.
- *
- * Setting a custom label will still require one of these actions to be set.
- * @SINCE_1_0.0
- */
-enum ActionButton
-{
- ACTION_DEFAULT, ///< Default action @SINCE_1_0.0
- ACTION_DONE, ///< Done @SINCE_1_0.0
- ACTION_GO, ///< Go action @SINCE_1_0.0
- ACTION_JOIN, ///< Join action @SINCE_1_0.0
- ACTION_LOGIN, ///< Login action @SINCE_1_0.0
- ACTION_NEXT, ///< Next action @SINCE_1_0.0
- ACTION_PREVIOUS, ///< Previous action @SINCE_1_0.0
- ACTION_SEARCH, ///< Search action @SINCE_1_0.0
- ACTION_SEND, ///< Send action @SINCE_1_0.0
- ACTION_SIGNIN, ///< Sign in action @SINCE_1_0.0
- ACTION_UNSPECIFIED, ///< Unspecified action @SINCE_1_0.0
- ACTION_NONE ///< Nothing to do @SINCE_1_0.0
-};
-
} // namespace InputMethod
/**
if (isAdaptorAvailable)
{
Dali::Adaptor& adaptor = Internal::Adaptor::Adaptor::Get();
- Internal::Adaptor::Adaptor::GetImplementation(adaptor).AddWindow(sceneHolder, name, className, isTransparent);
+ Internal::Adaptor::Adaptor::GetImplementation(adaptor).AddWindow(sceneHolder);
}
newWindow = Window(window);
}
Capture& Capture::operator=( Capture&& rhs ) = default;
+void Capture::Start( Actor source, const Vector2& position, const Vector2& size, const std::string &path, const Vector4& clearColor )
+{
+ GetImpl( *this ).Start( source, position, size, path, clearColor );
+}
+
void Capture::Start( Actor source, const Vector2& size, const std::string &path, const Vector4& clearColor, const uint32_t quality )
{
- GetImpl( *this ).Start( source, size, path, clearColor, quality );
+ GetImpl( *this ).Start( source, Vector2::ZERO, size, path, clearColor, quality );
}
void Capture::Start( Actor source, const Vector2& size, const std::string &path, const Vector4& clearColor )
{
- GetImpl( *this ).Start( source, size, path, clearColor );
+ GetImpl( *this ).Start( source, Vector2::ZERO, size, path, clearColor );
}
void Capture::Start( Actor source, const Vector2& size, const std::string &path )
{
- GetImpl( *this ).Start( source, size, path, Dali::Color::TRANSPARENT );
+ GetImpl( *this ).Start( source, Vector2::ZERO, size, path, Dali::Color::TRANSPARENT );
+}
+
+void Capture::SetImageQuality( uint32_t quality )
+{
+ return GetImpl( *this ).SetImageQuality( quality );
}
Dali::NativeImageSourcePtr Capture::GetNativeImageSource() const
/**
* @brief Start capture and save the image as a file.
*
+ * @SINCE_1_9.27
+ * @param[in] source source actor to be used for capture.
+ * This source must be added on the window in advance.
+ * @param[in] position top-left position of area to be captured
+ * this position is defined in the window.
+ * @param[in] size captured size.
+ * @param[in] path image file path to be saved as a file.
+ * If path is empty string, the captured result is not be saved as a file.
+ * @param[in] clearColor background color of captured scene
+ * @note suppose that we want to capture actor 'A'. And, the actor 'A' is overlapped by another actor 'B' that is not a child of 'A'.
+ * in this case, if source is root of scene, the captured image includes a part of actor 'B' on the 'A'.
+ * however, if source is just actor 'A', the result includes only 'A'.
+ */
+ void Start( Actor source, const Vector2& position, const Vector2& size, const std::string &path, const Vector4& clearColor );
+
+ /**
+ * @brief Start capture and save the image as a file.
+ *
* @SINCE_1_9.12
*
* @param[in] source source actor to be used for capture.
+ * This source must be added on the window in advance.
* @param[in] size captured size.
* @param[in] path image file path to be saved as a file.
* If path is empty string, the captured result is not be saved as a file.
* @SINCE_1_3_4
*
* @param[in] source source actor to be used for capture.
+ * This source must be added on the window in advance.
* @param[in] size captured size.
* @param[in] path image file path to be saved as a file.
* If path is empty string, the captured result is not be saved as a file.
* @SINCE_1_3_4
*
* @param[in] source source actor to be used for capture.
+ * This source must be added on the window in advance.
* @param[in] size captured size.
* @param[in] path image file path to be saved as a file.
* If path is empty string, the captured result is not be saved as a file.
void Start( Actor source, const Vector2& size, const std::string &path );
/**
+ * @brief Set result image quality in case of jpeg
+ *
+ * @param[in] quality The value to control image quality for jpeg file format in the range [1, 100]
+ */
+ void SetImageQuality( uint32_t quality );
+
+ /**
* @brief Get NativeImageSourcePtr that is saved captured image.
*
* @SINCE_1_9.10
const unsigned int ADAPTOR_MAJOR_VERSION = 1;
const unsigned int ADAPTOR_MINOR_VERSION = 9;
-const unsigned int ADAPTOR_MICRO_VERSION = 25;
+const unsigned int ADAPTOR_MICRO_VERSION = 26;
const char * const ADAPTOR_BUILD_DATE = __DATE__ " " __TIME__;
#ifdef DEBUG_ENABLED
Name: dali2-adaptor
Summary: The DALi Tizen Adaptor
-Version: 1.9.25
+Version: 1.9.26
Release: 1
Group: System/Libraries
License: Apache-2.0 and BSD-3-Clause and MIT