2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "window-impl.h"
22 // Ecore is littered with C style cast
23 #pragma GCC diagnostic push
24 #pragma GCC diagnostic ignored "-Wold-style-cast"
28 #include <dali/integration-api/core.h>
29 #include <dali/integration-api/system-overlay.h>
30 #include <dali/public-api/render-tasks/render-task.h>
31 #include <dali/public-api/render-tasks/render-task-list.h>
34 #include <window-render-surface.h>
35 #include <drag-and-drop-detector-impl.h>
36 #include <ecore-indicator-impl.h>
37 #include <window-visibility-observer.h>
38 #include <orientation.h>
39 #include <orientation-impl.h>
43 const float INDICATOR_ANIMATION_DURATION( 0.18f ); // 180 milli seconds
44 const float INDICATOR_SHOW_Y_POSITION( 0.0f );
45 const float INDICATOR_HIDE_Y_POSITION( -52.0f );
54 #if defined(DEBUG_ENABLED)
55 Debug::Filter* gWindowLogFilter = Debug::Filter::New(Debug::Concise, false, "LOG_WINDOW");
59 * TODO: Abstract Window class out and move this into a window implementation for Ecore
61 struct Window::EventHandler
65 * @param[in] window A pointer to the window class.
67 EventHandler( Window* window )
69 mWindowPropertyHandler( NULL ),
70 mClientMessagehandler( NULL ),
71 mWindowDeleteRequestHandler( NULL ),
74 // store ecore window handle
75 ECore::WindowRenderSurface* x11Window( dynamic_cast< ECore::WindowRenderSurface * >( mWindow->mSurface ) );
78 mEcoreWindow = x11Window->GetXWindow();
80 DALI_ASSERT_ALWAYS( mEcoreWindow != 0 && "There is no ecore x window");
82 #ifndef DALI_PROFILE_UBUNTU
83 // set property on window to get deiconify approve client message
85 ecore_x_window_prop_card32_set(mEcoreWindow,
86 ECORE_X_ATOM_E_DEICONIFY_APPROVE,
88 #endif // DALI_PROFILE_UBUNTU
90 if( mWindow->mEcoreEventHander )
92 ecore_x_input_multi_select( mEcoreWindow );
94 // This ensures that we catch the window close (or delete) request
95 ecore_x_icccm_protocol_set( mEcoreWindow, ECORE_X_WM_PROTOCOL_DELETE_REQUEST, EINA_TRUE );
97 mWindowPropertyHandler= ecore_event_handler_add( ECORE_X_EVENT_WINDOW_PROPERTY, EcoreEventWindowPropertyChanged, this );
98 mClientMessagehandler = ecore_event_handler_add( ECORE_X_EVENT_CLIENT_MESSAGE, EcoreEventClientMessage, this );
99 mWindowDeleteRequestHandler = ecore_event_handler_add( ECORE_X_EVENT_WINDOW_DELETE_REQUEST, EcoreEventWindowDeleteRequest, this );
108 if ( mWindowPropertyHandler )
110 ecore_event_handler_del( mWindowPropertyHandler );
112 if ( mClientMessagehandler )
114 ecore_event_handler_del( mClientMessagehandler );
116 if ( mWindowDeleteRequestHandler )
118 ecore_event_handler_del( mWindowDeleteRequestHandler );
124 /// Called when the window properties are changed.
125 static Eina_Bool EcoreEventWindowPropertyChanged( void* data, int type, void* event )
127 Ecore_X_Event_Window_Property* propertyChangedEvent( (Ecore_X_Event_Window_Property*)event );
128 EventHandler* handler( (EventHandler*)data );
129 Eina_Bool handled( ECORE_CALLBACK_PASS_ON );
131 if ( handler && handler->mWindow )
133 WindowVisibilityObserver* observer( handler->mWindow->mAdaptor );
134 if ( observer && ( propertyChangedEvent->win == handler->mEcoreWindow ) )
136 Ecore_X_Window_State_Hint state( ecore_x_icccm_state_get( propertyChangedEvent->win ) );
140 case ECORE_X_WINDOW_STATE_HINT_WITHDRAWN:
142 // Window was hidden.
143 observer->OnWindowHidden();
144 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) Withdrawn\n", handler->mEcoreWindow );
145 handled = ECORE_CALLBACK_DONE;
149 case ECORE_X_WINDOW_STATE_HINT_ICONIC:
151 // Window was iconified (minimised).
152 observer->OnWindowHidden();
153 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) Iconfied\n", handler->mEcoreWindow );
154 handled = ECORE_CALLBACK_DONE;
158 case ECORE_X_WINDOW_STATE_HINT_NORMAL:
161 observer->OnWindowShown();
162 DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) Shown\n", handler->mEcoreWindow );
163 handled = ECORE_CALLBACK_DONE;
177 /// Called when the window properties are changed.
178 static Eina_Bool EcoreEventClientMessage( void* data, int type, void* event )
180 Eina_Bool handled( ECORE_CALLBACK_PASS_ON );
181 #ifndef DALI_PROFILE_UBUNTU
182 Ecore_X_Event_Client_Message* clientMessageEvent( (Ecore_X_Event_Client_Message*)event );
183 EventHandler* handler( (EventHandler*)data );
185 if (clientMessageEvent->message_type == ECORE_X_ATOM_E_DEICONIFY_APPROVE)
187 ECore::WindowRenderSurface* x11Window( dynamic_cast< ECore::WindowRenderSurface * >( handler->mWindow->mSurface ) );
188 WindowVisibilityObserver* observer( handler->mWindow->mAdaptor );
190 if ( observer && ( (unsigned int)clientMessageEvent->data.l[0] == handler->mEcoreWindow ) )
192 if (clientMessageEvent->data.l[1] == 0) //wm sends request message using value 0
194 observer->OnWindowShown();
196 // request to approve the deiconify. render-surface should send proper event after real rendering
199 x11Window->RequestToApproveDeiconify();
202 handled = ECORE_CALLBACK_DONE;
206 #endif // DALI_PROFILE_UBUNTU
211 /// Called when the window receives a delete request
212 static Eina_Bool EcoreEventWindowDeleteRequest( void* data, int type, void* event )
214 EventHandler* handler( (EventHandler*)data );
215 handler->mWindow->mDeleteRequestSignal.Emit();
216 return ECORE_CALLBACK_DONE;
221 Ecore_Event_Handler* mWindowPropertyHandler;
222 Ecore_Event_Handler* mClientMessagehandler;
223 Ecore_Event_Handler* mWindowDeleteRequestHandler;
224 Ecore_X_Window mEcoreWindow;
228 Window* Window::New( const PositionSize& positionSize, const std::string& name, const std::string& className, bool isTransparent )
230 Window* window = new Window();
231 window->mIsTransparent = isTransparent;
232 window->Initialize( positionSize, name, className );
236 void Window::SetAdaptor(Dali::Adaptor& adaptor)
238 DALI_ASSERT_ALWAYS( !mStarted && "Adaptor already started" );
241 // Only create one overlay per window
242 Internal::Adaptor::Adaptor& adaptorImpl = Internal::Adaptor::Adaptor::GetImplementation(adaptor);
243 Integration::Core& core = adaptorImpl.GetCore();
244 mOverlay = &core.GetSystemOverlay();
246 Dali::RenderTaskList taskList = mOverlay->GetOverlayRenderTasks();
247 taskList.CreateTask();
249 mAdaptor = &adaptorImpl;
250 mAdaptor->AddObserver( *this );
252 // Can only create the detector when we know the Core has been instantiated.
253 mDragAndDropDetector = DragAndDropDetector::New();
254 mAdaptor->SetDragAndDropDetector( &GetImplementation( mDragAndDropDetector ) );
258 mOrientation->SetAdaptor(adaptor);
261 if( mIndicator != NULL )
263 mIndicator->SetAdaptor(mAdaptor);
267 RenderSurface* Window::GetSurface()
272 void Window::ShowIndicator( Dali::Window::IndicatorVisibleMode visibleMode )
274 DALI_LOG_TRACE_METHOD_FMT( gWindowLogFilter, "visible : %d\n", visibleMode );
275 DALI_ASSERT_DEBUG(mOverlay);
277 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
278 DALI_ASSERT_DEBUG(x11Window);
279 Ecore_X_Window xWinId = x11Window->GetXWindow();
281 mIndicatorVisible = visibleMode;
283 if ( mIndicatorVisible == Dali::Window::VISIBLE )
285 // when the indicator is visible, set proper mode for indicator server according to bg mode
286 if ( mIndicatorOpacityMode == Dali::Window::OPAQUE )
288 ecore_x_e_illume_indicator_opacity_set(xWinId, ECORE_X_ILLUME_INDICATOR_OPAQUE);
290 else if ( mIndicatorOpacityMode == Dali::Window::TRANSLUCENT )
292 ecore_x_e_illume_indicator_opacity_set(xWinId, ECORE_X_ILLUME_INDICATOR_TRANSLUCENT);
294 #if defined(DALI_PROFILE_MOBILE)
295 else if ( mIndicatorOpacityMode == Dali::Window::TRANSPARENT )
297 ecore_x_e_illume_indicator_opacity_set(xWinId, ECORE_X_ILLUME_INDICATOR_OPAQUE);
303 // when the indicator is not visible, set TRANSPARENT mode for indicator server
304 ecore_x_e_illume_indicator_opacity_set(xWinId, ECORE_X_ILLUME_INDICATOR_TRANSPARENT); // it means hidden indicator
307 DoShowIndicator( mIndicatorOrientation );
310 void Window::RotateIndicator(Dali::Window::WindowOrientation orientation)
312 DALI_LOG_TRACE_METHOD_FMT( gWindowLogFilter, "Orientation: %d\n", orientation );
314 DoRotateIndicator( orientation );
317 void Window::SetIndicatorBgOpacity( Dali::Window::IndicatorBgOpacity opacityMode )
319 mIndicatorOpacityMode = opacityMode;
321 if( mIndicator != NULL )
323 mIndicator->SetOpacityMode( opacityMode );
327 void Window::SetClass(std::string name, std::string klass)
329 // Get render surface's x11 window
332 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
335 ecore_x_icccm_name_class_set( x11Window->GetXWindow(), name.c_str(), klass.c_str() );
342 mIndicatorVisible( Dali::Window::INVISIBLE ),
343 mIndicatorIsShown( false ),
344 mShowRotatedIndicatorOnClose( false ),
346 mIsTransparent( false ),
347 mWMRotationAppSet( false ),
348 mEcoreEventHander( true ),
349 mIsFocusAcceptable( true ),
352 mOpaqueState( false ),
353 mResizeEnabled( true ),
355 mIndicatorOrientation( Dali::Window::PORTRAIT ),
356 mNextIndicatorOrientation( Dali::Window::PORTRAIT ),
357 mIndicatorOpacityMode( Dali::Window::OPAQUE ),
360 mType( Dali::Window::NORMAL ),
361 mEventHandler( NULL ),
362 mPreferredOrientation( Dali::Window::PORTRAIT ),
363 mSupportedAuxiliaryHints(),
365 mIndicatorVisibilityChangedSignal(),
366 mFocusChangedSignal(),
368 mDeleteRequestSignal()
374 delete mEventHandler;
378 mOverlay->Remove( mIndicator->GetActor() );
379 Dali::RenderTaskList taskList = mOverlay->GetOverlayRenderTasks();
380 Dali::RenderTask indicatorTask = taskList.GetTask(0);
381 mOverlay->GetOverlayRenderTasks().RemoveTask(indicatorTask);
388 mAdaptor->RemoveObserver( *this );
389 mAdaptor->SetDragAndDropDetector( NULL );
396 void Window::Initialize(const PositionSize& positionSize, const std::string& name, const std::string& className)
398 // create an X11 window by default
400 ECore::WindowRenderSurface* windowSurface = new ECore::WindowRenderSurface( positionSize, surface, name, className, mIsTransparent );
401 windowSurface->Map();
403 mSurface = windowSurface;
405 mOrientation = Orientation::New(this);
407 // create event handler for X11 window
408 mEventHandler = new EventHandler( this );
411 void Window::DoShowIndicator( Dali::Window::WindowOrientation lastOrientation )
413 if( mIndicator == NULL )
415 if( mIndicatorVisible != Dali::Window::INVISIBLE )
417 mIndicator = new Indicator( mAdaptor, mIndicatorOrientation, this );
418 mIndicator->SetOpacityMode( mIndicatorOpacityMode );
419 Dali::Actor actor = mIndicator->GetActor();
420 SetIndicatorActorRotation();
421 mOverlay->Add(actor);
423 // else don't create a hidden indicator
425 else // Already have indicator
427 if( mIndicatorVisible == Dali::Window::VISIBLE )
429 // If we are resuming, and rotation has changed,
430 if( mIndicatorIsShown == false && mIndicatorOrientation != mNextIndicatorOrientation )
432 // then close current indicator and open new one
433 mShowRotatedIndicatorOnClose = true;
434 mIndicator->Close(); // May synchronously call IndicatorClosed() callback & 1 level of recursion
435 // Don't show actor - will contain indicator for old orientation.
440 // set indicator visible mode
441 if( mIndicator != NULL )
443 mIndicator->SetVisible( mIndicatorVisible );
446 bool show = (mIndicatorVisible != Dali::Window::INVISIBLE );
447 SetIndicatorProperties( show, lastOrientation );
448 mIndicatorIsShown = show;
451 void Window::DoRotateIndicator( Dali::Window::WindowOrientation orientation )
453 if( mIndicatorIsShown )
455 mShowRotatedIndicatorOnClose = true;
456 mNextIndicatorOrientation = orientation;
457 mIndicator->Close(); // May synchronously call IndicatorClosed() callback
461 // Save orientation for when the indicator is next shown
462 mShowRotatedIndicatorOnClose = false;
463 mNextIndicatorOrientation = orientation;
467 void Window::SetIndicatorProperties( bool isShow, Dali::Window::WindowOrientation lastOrientation )
469 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
472 Ecore_X_Window win = x11Window->GetXWindow();
474 int show_state = static_cast<int>( isShow );
475 ecore_x_window_prop_property_set( win,
476 ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
477 ECORE_X_ATOM_CARDINAL, 32, &show_state, 1);
481 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_ON);
485 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
490 void Window::IndicatorTypeChanged(Indicator::Type type)
492 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
495 #ifndef DALI_PROFILE_UBUNTU
496 Ecore_X_Window win = x11Window->GetXWindow();
499 case Indicator::INDICATOR_TYPE_1:
500 ecore_x_e_illume_indicator_type_set( win, ECORE_X_ILLUME_INDICATOR_TYPE_1 );
503 case Indicator::INDICATOR_TYPE_2:
504 ecore_x_e_illume_indicator_type_set( win, ECORE_X_ILLUME_INDICATOR_TYPE_2 );
507 case Indicator::INDICATOR_TYPE_UNKNOWN:
511 #endif // DALI_PROFILE_UBUNTU
515 void Window::IndicatorClosed( IndicatorInterface* indicator )
517 DALI_LOG_TRACE_METHOD( gWindowLogFilter );
519 if( mShowRotatedIndicatorOnClose )
521 Dali::Window::WindowOrientation currentOrientation = mIndicatorOrientation;
522 mIndicator->Open(mNextIndicatorOrientation);
523 mIndicatorOrientation = mNextIndicatorOrientation;
524 SetIndicatorActorRotation();
525 DoShowIndicator(currentOrientation);
529 void Window::IndicatorVisibilityChanged(bool isVisible)
531 mIndicatorVisibilityChangedSignal.Emit(isVisible);
534 void Window::SetIndicatorActorRotation()
536 DALI_LOG_TRACE_METHOD( gWindowLogFilter );
537 DALI_ASSERT_DEBUG( mIndicator != NULL );
539 Dali::Actor actor = mIndicator->GetActor();
540 switch( mIndicatorOrientation )
542 case Dali::Window::PORTRAIT:
543 actor.SetParentOrigin( ParentOrigin::TOP_CENTER );
544 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
545 actor.SetOrientation( Degree(0), Vector3::ZAXIS );
547 case Dali::Window::PORTRAIT_INVERSE:
548 actor.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
549 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
550 actor.SetOrientation( Degree(180), Vector3::ZAXIS );
552 case Dali::Window::LANDSCAPE:
553 actor.SetParentOrigin( ParentOrigin::CENTER_LEFT );
554 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
555 actor.SetOrientation( Degree(270), Vector3::ZAXIS );
557 case Dali::Window::LANDSCAPE_INVERSE:
558 actor.SetParentOrigin( ParentOrigin::CENTER_RIGHT );
559 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
560 actor.SetOrientation( Degree(90), Vector3::ZAXIS );
567 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
570 Ecore_X_Window win = x11Window->GetXWindow();
571 ecore_x_window_raise(win);
577 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
580 Ecore_X_Window win = x11Window->GetXWindow();
581 ecore_x_window_lower(win);
585 void Window::Activate()
587 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
590 Ecore_X_Window win = x11Window->GetXWindow();
591 ecore_x_netwm_client_active_request(ecore_x_window_root_get(win), win, 1 /* request type, 1:application, 2:pager */, 0);
595 Dali::DragAndDropDetector Window::GetDragAndDropDetector() const
597 return mDragAndDropDetector;
600 Dali::Any Window::GetNativeHandle() const
604 return mEventHandler->mEcoreWindow;
612 void Window::OnStart()
614 ShowIndicator( mIndicatorVisible );
617 void Window::OnPause()
621 void Window::OnResume()
623 // resume indicator status
624 if( mIndicator != NULL )
626 // Restore own indicator opacity
627 // Send opacity mode to indicator service when app resumed
628 mIndicator->SetOpacityMode( mIndicatorOpacityMode );
632 void Window::OnStop()
643 void Window::OnDestroy()
648 void Window::AddAvailableOrientation(Dali::Window::WindowOrientation orientation)
652 for( std::size_t i=0; i<mAvailableOrientations.size(); i++ )
654 if(mAvailableOrientations[i] == orientation)
663 mAvailableOrientations.push_back(orientation);
664 SetAvailableOrientations( mAvailableOrientations );
668 void Window::RemoveAvailableOrientation(Dali::Window::WindowOrientation orientation)
670 for( std::vector<Dali::Window::WindowOrientation>::iterator iter = mAvailableOrientations.begin();
671 iter != mAvailableOrientations.end(); ++iter )
673 if( *iter == orientation )
675 mAvailableOrientations.erase( iter );
679 SetAvailableOrientations( mAvailableOrientations );
682 void Window::SetAvailableOrientations(const std::vector<Dali::Window::WindowOrientation>& orientations)
684 DALI_ASSERT_ALWAYS( mAvailableOrientations.size() <= 4 && "Incorrect number of available orientations" );
686 mAvailableOrientations = orientations;
687 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
690 #ifndef DALI_PROFILE_UBUNTU
691 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
692 if( ! mWMRotationAppSet )
694 mWMRotationAppSet = true;
695 ecore_x_e_window_rotation_app_set(ecoreWindow, EINA_TRUE);
699 for( std::size_t i=0; i<mAvailableOrientations.size(); i++ )
701 rotations[i] = static_cast<int>(mAvailableOrientations[i]);
703 ecore_x_e_window_rotation_available_rotations_set(ecoreWindow, rotations, mAvailableOrientations.size() );
704 #endif // DALI_PROFILE_UBUNTU
708 const std::vector<Dali::Window::WindowOrientation>& Window::GetAvailableOrientations()
710 return mAvailableOrientations;
713 void Window::SetPreferredOrientation(Dali::Window::WindowOrientation orientation)
715 mPreferredOrientation = orientation;
717 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
720 #ifndef DALI_PROFILE_UBUNTU
721 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
723 if( ! mWMRotationAppSet )
725 mWMRotationAppSet = true;
726 ecore_x_e_window_rotation_app_set(ecoreWindow, EINA_TRUE);
729 ecore_x_e_window_rotation_preferred_rotation_set(ecoreWindow, orientation);
730 #endif // DALI_PROFILE_UBUNTU
734 Dali::Window::WindowOrientation Window::GetPreferredOrientation()
736 return mPreferredOrientation;
739 void Window::SetAcceptFocus( bool accept )
741 mIsFocusAcceptable = accept;
744 bool Window::IsFocusAcceptable() const
746 return mIsFocusAcceptable;
751 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
754 Ecore_X_Window win = x11Window->GetXWindow();
755 ecore_x_window_show( win );
757 // Need an update request
760 mAdaptor->RequestUpdateOnce();
767 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
770 Ecore_X_Window win = x11Window->GetXWindow();
771 ecore_x_window_hide( win );
775 bool Window::IsVisible() const
777 bool visible = false;
779 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
782 Ecore_X_Window win = x11Window->GetXWindow();
783 visible = static_cast< bool >( ecore_x_window_visible_get( win ) );
788 void Window::RotationDone( int orientation, int width, int height )
790 // Tell window manager we're done
791 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
794 #ifndef DALI_PROFILE_UBUNTU
795 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
796 Ecore_X_Window root = ecore_x_window_root_get(ecoreWindow);
799 * send rotation done message to wm, even if window is already rotated.
800 * that's why wm must be wait for comming rotation done message
801 * after sending rotation request.
803 ecore_x_e_window_rotation_change_done_send(root, ecoreWindow, orientation, width, height);
806 * set rotate window property
808 int angles[2] = { orientation, orientation };
809 ecore_x_window_prop_property_set( ecoreWindow,
810 ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
811 ECORE_X_ATOM_CARDINAL, 32, &angles, 2 );
813 mAdaptor->SurfaceResizePrepare( Adaptor::SurfaceSize( width, height ) );
816 mResizedSignal.Emit( Dali::Window::WindowSize( width, height ) );
818 mAdaptor->SurfaceResizeComplete( Adaptor::SurfaceSize( width, height ) );
819 #endif // DALI_PROFILE_UBUNTU
823 void Window::SetIndicatorVisibleMode( Dali::Window::IndicatorVisibleMode mode )
825 mIndicatorVisible = mode;
828 unsigned int Window::GetSupportedAuxiliaryHintCount() const
833 std::string Window::GetSupportedAuxiliaryHint( unsigned int index ) const
835 return std::string();
838 unsigned int Window::AddAuxiliaryHint( const std::string& hint, const std::string& value )
843 bool Window::RemoveAuxiliaryHint( unsigned int id )
848 bool Window::SetAuxiliaryHintValue( unsigned int id, const std::string& value )
853 std::string Window::GetAuxiliaryHintValue( unsigned int id ) const
855 return std::string();
858 unsigned int Window::GetAuxiliaryHintId( const std::string& hint ) const
863 void Window::SetInputRegion( const Rect< int >& inputRegion )
867 void Window::SetType( Dali::Window::Type type )
872 Dali::Window::Type Window::GetType() const
877 bool Window::SetNotificationLevel( Dali::Window::NotificationLevel::Type level )
882 Dali::Window::NotificationLevel::Type Window::GetNotificationLevel() const
884 return Dali::Window::NotificationLevel::NONE;
887 void Window::SetOpaqueState( bool opaque )
889 mOpaqueState = opaque;
892 bool Window::IsOpaqueState() const
897 bool Window::SetScreenOffMode(Dali::Window::ScreenOffMode::Type screenOffMode)
902 Dali::Window::ScreenOffMode::Type Window::GetScreenOffMode() const
904 return Dali::Window::ScreenOffMode::TIMEOUT;
907 bool Window::SetBrightness( int brightness )
912 int Window::GetBrightness() const
917 void Window::SetSize( Dali::Window::WindowSize size )
919 PositionSize positionSize = mSurface->GetPositionSize();
921 if( positionSize.width != size.GetWidth() || positionSize.height != size.GetHeight() )
923 positionSize.width = size.GetWidth();
924 positionSize.height = size.GetHeight();
926 mSurface->MoveResize( positionSize );
928 mAdaptor->SurfaceResizePrepare( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) );
931 mResizedSignal.Emit( Dali::Window::WindowSize( positionSize.width, positionSize.height ) );
933 mAdaptor->SurfaceResizeComplete( Adaptor::SurfaceSize( positionSize.width, positionSize.height ) );
937 Dali::Window::WindowSize Window::GetSize() const
939 PositionSize positionSize = mSurface->GetPositionSize();
941 return Dali::Window::WindowSize( positionSize.width, positionSize.height );
944 void Window::SetPosition( Dali::Window::WindowPosition position )
946 PositionSize positionSize = mSurface->GetPositionSize();
948 if( positionSize.x != position.GetX() || positionSize.y != position.GetY() )
950 positionSize.x = position.GetX();
951 positionSize.y = position.GetY();
953 mSurface->MoveResize( positionSize );
957 Dali::Window::WindowPosition Window::GetPosition() const
959 PositionSize positionSize = mSurface->GetPositionSize();
961 return Dali::Window::WindowPosition( positionSize.x, positionSize.y );
964 void Window::SetTransparency( bool transparent )
974 #pragma GCC diagnostic pop