X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fwindow-system%2Fcommon%2Fwindow-impl.cpp;h=5fa120ce134ecefdf0349df460a9c08d24c90248;hb=1d0d7873858fd2010b71e5db8f03654fb307370f;hp=3001f7a7a68e2e1ffcf48f852c5500089f1e5ac1;hpb=bef51846718537ac103deed95375efc500a65d0d;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/internal/window-system/common/window-impl.cpp b/dali/internal/window-system/common/window-impl.cpp old mode 100644 new mode 100755 index 3001f7a..5fa120c --- a/dali/internal/window-system/common/window-impl.cpp +++ b/dali/internal/window-system/common/window-impl.cpp @@ -1,5 +1,5 @@ /* - * 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. @@ -19,6 +19,7 @@ #include // EXTERNAL HEADERS +#include #include #include #include @@ -31,6 +32,7 @@ // INTERNAL HEADERS #include +#include #include #include #include @@ -56,11 +58,17 @@ Debug::Filter* gWindowLogFilter = Debug::Filter::New( Debug::NoLogging, false, " } // unnamed namespace -Window* Window::New( const PositionSize& positionSize, const std::string& name, const std::string& className, bool isTransparent ) +Window* Window::New(const PositionSize& positionSize, const std::string& name, const std::string& className, bool isTransparent) +{ + Any surface; + return Window::New(surface, positionSize, name, className, isTransparent); +} + +Window* Window::New(Any surface, const PositionSize& positionSize, const std::string& name, const std::string& className, bool isTransparent) { Window* window = new Window(); window->mIsTransparent = isTransparent; - window->Initialize( positionSize, name, className ); + window->Initialize(surface, positionSize, name, className); return window; } @@ -75,17 +83,17 @@ Window::Window() mType( Dali::Window::NORMAL ), mParentWindow( NULL ), mPreferredAngle( Dali::Window::NO_ORIENTATION_PREFERENCE ), - mRotationAngle( 0 ), + mRotationAngle( -1 ), mWindowWidth( 0 ), mWindowHeight( 0 ), mOrientationMode( Internal::Adaptor::Window::OrientationMode::PORTRAIT ), - mFocusChangedSignal(), - mResizedSignal(), + mNativeWindowId( -1 ), mDeleteRequestSignal(), mFocusChangeSignal(), mResizeSignal(), mVisibilityChangedSignal(), - mTransitionEffectEventSignal() + mTransitionEffectEventSignal(), + mKeyboardRepeatSettingsChangedSignal() { } @@ -97,10 +105,9 @@ Window::~Window() } } -void Window::Initialize(const PositionSize& positionSize, const std::string& name, const std::string& className) +void Window::Initialize(Any surface, const PositionSize& positionSize, const std::string& name, const std::string& className) { // Create a window render surface - Any surface; auto renderSurfaceFactory = Dali::Internal::Adaptor::GetRenderSurfaceFactory(); mSurface = renderSurfaceFactory->CreateWindowRenderSurface( positionSize, surface, mIsTransparent ); mWindowSurface = static_cast( mSurface.get() ); @@ -113,6 +120,8 @@ void Window::Initialize(const PositionSize& positionSize, const std::string& nam mWindowBase->FocusChangedSignal().Connect( this, &Window::OnFocusChanged ); mWindowBase->DeleteRequestSignal().Connect( this, &Window::OnDeleteRequest ); mWindowBase->TransitionEffectEventSignal().Connect( this, &Window::OnTransitionEffectEvent ); + mWindowBase->KeyboardRepeatSettingsChangedSignal().Connect( this, &Window::OnKeyboardRepeatSettingsChanged ); + mWindowBase->WindowRedrawRequestSignal().Connect( this, &Window::OnWindowRedrawRequest ); mWindowSurface->OutputTransformedSignal().Connect( this, &Window::OnOutputTransformed ); @@ -139,6 +148,8 @@ void Window::Initialize(const PositionSize& positionSize, const std::string& nam { mOrientationMode = Internal::Adaptor::Window::OrientationMode::PORTRAIT; } + // For Debugging + mNativeWindowId = mWindowBase->GetNativeWindowId(); } void Window::OnAdaptorSet(Dali::Adaptor& adaptor) @@ -152,18 +163,6 @@ void Window::OnSurfaceSet( Dali::RenderSurfaceInterface* surface ) mWindowSurface = static_cast( surface ); } -void Window::ShowIndicator( Dali::Window::IndicatorVisibleMode visibleMode ) -{ -} - -void Window::SetIndicatorBgOpacity( Dali::Window::IndicatorBgOpacity opacityMode ) -{ -} - -void Window::RotateIndicator( Dali::Window::WindowOrientation orientation ) -{ -} - void Window::SetClass( std::string name, std::string className ) { mName = name; @@ -179,19 +178,28 @@ std::string Window::GetClassName() const void Window::Raise() { mWindowBase->Raise(); - DALI_LOG_RELEASE_INFO( "Window (%p) Raise() \n", this ); + + mSurface->SetFullSwapNextFrame(); + + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), Raise() \n", this, mNativeWindowId ); } void Window::Lower() { mWindowBase->Lower(); - DALI_LOG_RELEASE_INFO( "Window (%p) Lower() \n", this ); + + mSurface->SetFullSwapNextFrame(); + + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), Lower() \n", this, mNativeWindowId ); } void Window::Activate() { mWindowBase->Activate(); - DALI_LOG_RELEASE_INFO( "Window (%p) Activate() \n", this ); + + mSurface->SetFullSwapNextFrame(); + + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), Activate() \n", this, mNativeWindowId ); } uint32_t Window::GetLayerCount() const @@ -218,6 +226,7 @@ void Window::AddAvailableOrientation( Dali::Window::WindowOrientation orientatio bool found = false; int convertedAngle = ConvertToAngle( orientation ); + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), AddAvailableOrientation: %d\n", this, mNativeWindowId, convertedAngle ); for( std::size_t i = 0; i < mAvailableAngles.size(); i++ ) { if( mAvailableAngles[i] == convertedAngle ) @@ -242,6 +251,7 @@ void Window::RemoveAvailableOrientation( Dali::Window::WindowOrientation orienta } int convertedAngle = ConvertToAngle( orientation ); + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), RemoveAvailableOrientation: %d\n", this, mNativeWindowId, convertedAngle ); for( std::vector< int >::iterator iter = mAvailableAngles.begin(); iter != mAvailableAngles.end(); ++iter ) { @@ -259,14 +269,17 @@ void Window::SetPreferredOrientation( Dali::Window::WindowOrientation orientatio { if( orientation < Dali::Window::NO_ORIENTATION_PREFERENCE || orientation > Dali::Window::LANDSCAPE_INVERSE ) { + DALI_LOG_INFO( gWindowLogFilter, Debug::Verbose, "Window::CheckOrientation: Invalid input orientation [%d]\n", orientation ); return; } mPreferredAngle = ConvertToAngle( orientation ); + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), SetPreferredOrientation: %d\n", this, mNativeWindowId, mPreferredAngle ); mWindowBase->SetPreferredAngle( mPreferredAngle ); } Dali::Window::WindowOrientation Window::GetPreferredOrientation() { + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), GetPreferredOrientation: %d\n", this, mNativeWindowId, mPreferredAngle ); Dali::Window::WindowOrientation preferredOrientation = ConvertToOrientation( mPreferredAngle ); return preferredOrientation; } @@ -319,7 +332,7 @@ int Window::ConvertToAngle( Dali::Window::WindowOrientation orientation ) return convertAngle; } -Dali::Window::WindowOrientation Window::ConvertToOrientation( int angle ) +Dali::Window::WindowOrientation Window::ConvertToOrientation( int angle ) const { Dali::Window::WindowOrientation orientation = static_cast< Dali::Window::WindowOrientation >( angle ); if( mOrientationMode == Internal::Adaptor::Window::OrientationMode::LANDSCAPE ) @@ -398,7 +411,9 @@ void Window::Show() mVisibilityChangedSignal.Emit( handle, true ); } - DALI_LOG_RELEASE_INFO( "Window (%p) Show(): iconified = %d\n", this, mIconified ); + mSurface->SetFullSwapNextFrame(); + + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), Show(): iconified = %d, visible = %d\n", this, mNativeWindowId, mIconified, mVisible ); } void Window::Hide() @@ -416,11 +431,12 @@ void Window::Hide() mVisibilityChangedSignal.Emit( handle, false ); } - DALI_LOG_RELEASE_INFO( "Window (%p) Hide(): iconified = %d\n", this, mIconified ); + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), Hide(): iconified = %d, visible = %d\n", this, mNativeWindowId, mIconified, mVisible ); } bool Window::IsVisible() const { + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), IsVisible(): iconified = %d, visible = %d\n", this, mNativeWindowId, mIconified, mVisible ); return mVisible && !mIconified; } @@ -566,12 +582,15 @@ void Window::SetSize( Dali::Window::WindowSize size ) mAdaptor->SurfaceResizePrepare( mSurface.get(), newSize ); + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), SetSize(): resize signal [%d x %d]\n", this, mNativeWindowId, newRect.width, newRect.height ); + Dali::Window handle( this ); - mResizedSignal.Emit( newSize ); mResizeSignal.Emit( handle, newSize ); mAdaptor->SurfaceResizeComplete( mSurface.get(), newSize ); } + + mSurface->SetFullSwapNextFrame(); } Dali::Window::WindowSize Window::GetSize() const @@ -592,6 +611,8 @@ void Window::SetPosition( Dali::Window::WindowPosition position ) PositionSize oldRect = mSurface->GetPositionSize(); mWindowSurface->MoveResize( PositionSize( position.GetX(), position.GetY(), oldRect.width, oldRect.height ) ); + + mSurface->SetFullSwapNextFrame(); } Dali::Window::WindowPosition Window::GetPosition() const @@ -624,11 +645,13 @@ void Window::SetPositionSize( PositionSize positionSize ) mAdaptor->SurfaceResizePrepare( mSurface.get(), newSize ); + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), SetPositionSize():resize signal [%d x %d]\n", this, mNativeWindowId, newRect.width, newRect.height ); Dali::Window handle( this ); - mResizedSignal.Emit( newSize ); mResizeSignal.Emit( handle, newSize ); mAdaptor->SurfaceResizeComplete( mSurface.get(), newSize ); } + + mSurface->SetFullSwapNextFrame(); } Dali::Layer Window::GetRootLayer() const @@ -676,7 +699,7 @@ void Window::OnIconifyChanged( bool iconified ) mVisibilityChangedSignal.Emit( handle, false ); } - DALI_LOG_RELEASE_INFO( "Window (%p) Iconified: visible = %d\n", this, mVisible ); + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), Iconified: visible = %d\n", this, mNativeWindowId, mVisible ); } else { @@ -691,15 +714,18 @@ void Window::OnIconifyChanged( bool iconified ) mVisibilityChangedSignal.Emit( handle, true ); } - DALI_LOG_RELEASE_INFO( "Window (%p) Deiconified: visible = %d\n", this, mVisible ); + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), Deiconified: visible = %d\n", this, mNativeWindowId, mVisible ); } + + mSurface->SetFullSwapNextFrame(); } void Window::OnFocusChanged( bool focusIn ) { Dali::Window handle( this ); - mFocusChangedSignal.Emit( focusIn ); mFocusChangeSignal.Emit( handle, focusIn ); + + mSurface->SetFullSwapNextFrame(); } void Window::OnOutputTransformed() @@ -721,6 +747,17 @@ void Window::OnTransitionEffectEvent( DevelWindow::EffectState state, DevelWindo mTransitionEffectEventSignal.Emit( handle, state, type ); } +void Window::OnKeyboardRepeatSettingsChanged() +{ + Dali::Window handle( this ); + mKeyboardRepeatSettingsChangedSignal.Emit(); +} + +void Window::OnWindowRedrawRequest() +{ + mAdaptor->RenderOnce(); +} + void Window::OnTouchPoint( Dali::Integration::Point& point, int timeStamp ) { FeedTouchPoint( point, timeStamp ); @@ -751,9 +788,9 @@ void Window::OnRotation( const RotationEvent& rotation ) mAdaptor->SurfaceResizePrepare( mSurface.get(), Adaptor::SurfaceSize( mWindowWidth, mWindowHeight ) ); + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), OnRotation(): resize signal emit [%d x %d]\n", this, mNativeWindowId, mWindowWidth, mWindowHeight ); // Emit signal Dali::Window handle( this ); - mResizedSignal.Emit( Dali::Window::WindowSize( mWindowWidth, mWindowHeight ) ); mResizeSignal.Emit( handle, Dali::Window::WindowSize( mWindowWidth, mWindowHeight ) ); mAdaptor->SurfaceResizeComplete( mSurface.get(), Adaptor::SurfaceSize( mWindowWidth, mWindowHeight ) ); @@ -773,6 +810,8 @@ void Window::OnResume() { mEventHandler->Resume(); } + + mSurface->SetFullSwapNextFrame(); } void Window::RecalculateTouchPosition( Integration::Point& point ) @@ -817,10 +856,14 @@ Dali::Window Window::Get( Dali::Actor actor ) if ( Internal::Adaptor::Adaptor::IsAvailable() ) { Dali::Internal::Adaptor::Adaptor& adaptor = Internal::Adaptor::Adaptor::GetImplementation( Internal::Adaptor::Adaptor::Get() ); - windowImpl = static_cast( adaptor.GetWindow( actor ) ); + windowImpl = dynamic_cast( adaptor.GetWindow( actor ) ); + if( windowImpl ) + { + return Dali::Window( windowImpl ); + } } - return Dali::Window( windowImpl ); + return Dali::Window(); } void Window::SetParent( Dali::Window& parent ) @@ -849,6 +892,49 @@ Dali::Window Window::GetParent() return mParentWindow; } +Dali::Window::WindowOrientation Window::GetCurrentOrientation() const +{ + DALI_LOG_RELEASE_INFO( "Window (%p), WinId (%d), GetCurrentOrientation(): %d\n", this, mNativeWindowId, mRotationAngle ); + return ConvertToOrientation( mRotationAngle ); +} + +void Window::SetAvailableOrientations( const Dali::Vector& orientations ) +{ + Dali::Vector::SizeType count = orientations.Count(); + for( Dali::Vector::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 ); +} + +int32_t Window::GetNativeId() const +{ + return mWindowBase->GetNativeWindowId(); +} + } // Adaptor } // Internal