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 ),
351 mOpaqueState( false ),
352 mResizeEnabled( true ),
354 mIndicatorOrientation( Dali::Window::PORTRAIT ),
355 mNextIndicatorOrientation( Dali::Window::PORTRAIT ),
356 mIndicatorOpacityMode( Dali::Window::OPAQUE ),
359 mType( Dali::DevelWindow::NORMAL ),
360 mEventHandler( NULL ),
361 mPreferredOrientation( Dali::Window::PORTRAIT ),
362 mSupportedAuxiliaryHints(),
364 mIndicatorVisibilityChangedSignal(),
365 mFocusChangedSignal(),
367 mDeleteRequestSignal()
370 // Detect if we're not running in a ecore main loop (e.g. libuv).
371 // Typically ecore_x_init is called by app_efl_main->elm_init
372 // but if we're not using app_efl_main then we have to call it ourselves
373 // This is a hack until we create a pure X Window class
374 if( ecore_x_display_get() == NULL )
376 mEcoreEventHander = false;
377 ecore_x_init (NULL); // internally calls _ecore_x_input_init
384 delete mEventHandler;
388 mOverlay->Remove( mIndicator->GetActor() );
389 Dali::RenderTaskList taskList = mOverlay->GetOverlayRenderTasks();
390 Dali::RenderTask indicatorTask = taskList.GetTask(0);
391 mOverlay->GetOverlayRenderTasks().RemoveTask(indicatorTask);
398 mAdaptor->RemoveObserver( *this );
399 mAdaptor->SetDragAndDropDetector( NULL );
406 void Window::Initialize(const PositionSize& positionSize, const std::string& name, const std::string& className)
408 // create an X11 window by default
410 ECore::WindowRenderSurface* windowSurface = new ECore::WindowRenderSurface( positionSize, surface, name, className, mIsTransparent );
411 windowSurface->Map();
413 mSurface = windowSurface;
415 mOrientation = Orientation::New(this);
417 // create event handler for X11 window
418 mEventHandler = new EventHandler( this );
421 void Window::DoShowIndicator( Dali::Window::WindowOrientation lastOrientation )
423 if( mIndicator == NULL )
425 if( mIndicatorVisible != Dali::Window::INVISIBLE )
427 mIndicator = new Indicator( mAdaptor, mIndicatorOrientation, this );
428 mIndicator->SetOpacityMode( mIndicatorOpacityMode );
429 Dali::Actor actor = mIndicator->GetActor();
430 SetIndicatorActorRotation();
431 mOverlay->Add(actor);
433 // else don't create a hidden indicator
435 else // Already have indicator
437 if( mIndicatorVisible == Dali::Window::VISIBLE )
439 // If we are resuming, and rotation has changed,
440 if( mIndicatorIsShown == false && mIndicatorOrientation != mNextIndicatorOrientation )
442 // then close current indicator and open new one
443 mShowRotatedIndicatorOnClose = true;
444 mIndicator->Close(); // May synchronously call IndicatorClosed() callback & 1 level of recursion
445 // Don't show actor - will contain indicator for old orientation.
450 // set indicator visible mode
451 if( mIndicator != NULL )
453 mIndicator->SetVisible( mIndicatorVisible );
456 bool show = (mIndicatorVisible != Dali::Window::INVISIBLE );
457 SetIndicatorProperties( show, lastOrientation );
458 mIndicatorIsShown = show;
461 void Window::DoRotateIndicator( Dali::Window::WindowOrientation orientation )
463 if( mIndicatorIsShown )
465 mShowRotatedIndicatorOnClose = true;
466 mNextIndicatorOrientation = orientation;
467 mIndicator->Close(); // May synchronously call IndicatorClosed() callback
471 // Save orientation for when the indicator is next shown
472 mShowRotatedIndicatorOnClose = false;
473 mNextIndicatorOrientation = orientation;
477 void Window::SetIndicatorProperties( bool isShow, Dali::Window::WindowOrientation lastOrientation )
479 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
482 Ecore_X_Window win = x11Window->GetXWindow();
484 int show_state = static_cast<int>( isShow );
485 ecore_x_window_prop_property_set( win,
486 ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
487 ECORE_X_ATOM_CARDINAL, 32, &show_state, 1);
491 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_ON);
495 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
500 void Window::IndicatorTypeChanged(Indicator::Type type)
502 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
505 #ifndef DALI_PROFILE_UBUNTU
506 Ecore_X_Window win = x11Window->GetXWindow();
509 case Indicator::INDICATOR_TYPE_1:
510 ecore_x_e_illume_indicator_type_set( win, ECORE_X_ILLUME_INDICATOR_TYPE_1 );
513 case Indicator::INDICATOR_TYPE_2:
514 ecore_x_e_illume_indicator_type_set( win, ECORE_X_ILLUME_INDICATOR_TYPE_2 );
517 case Indicator::INDICATOR_TYPE_UNKNOWN:
521 #endif // DALI_PROFILE_UBUNTU
525 void Window::IndicatorClosed( IndicatorInterface* indicator )
527 DALI_LOG_TRACE_METHOD( gWindowLogFilter );
529 if( mShowRotatedIndicatorOnClose )
531 Dali::Window::WindowOrientation currentOrientation = mIndicatorOrientation;
532 mIndicator->Open(mNextIndicatorOrientation);
533 mIndicatorOrientation = mNextIndicatorOrientation;
534 SetIndicatorActorRotation();
535 DoShowIndicator(currentOrientation);
539 void Window::IndicatorVisibilityChanged(bool isVisible)
541 mIndicatorVisibilityChangedSignal.Emit(isVisible);
544 void Window::SetIndicatorActorRotation()
546 DALI_LOG_TRACE_METHOD( gWindowLogFilter );
547 DALI_ASSERT_DEBUG( mIndicator != NULL );
549 Dali::Actor actor = mIndicator->GetActor();
550 switch( mIndicatorOrientation )
552 case Dali::Window::PORTRAIT:
553 actor.SetParentOrigin( ParentOrigin::TOP_CENTER );
554 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
555 actor.SetOrientation( Degree(0), Vector3::ZAXIS );
557 case Dali::Window::PORTRAIT_INVERSE:
558 actor.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
559 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
560 actor.SetOrientation( Degree(180), Vector3::ZAXIS );
562 case Dali::Window::LANDSCAPE:
563 actor.SetParentOrigin( ParentOrigin::CENTER_LEFT );
564 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
565 actor.SetOrientation( Degree(270), Vector3::ZAXIS );
567 case Dali::Window::LANDSCAPE_INVERSE:
568 actor.SetParentOrigin( ParentOrigin::CENTER_RIGHT );
569 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
570 actor.SetOrientation( Degree(90), Vector3::ZAXIS );
577 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
580 Ecore_X_Window win = x11Window->GetXWindow();
581 ecore_x_window_raise(win);
587 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
590 Ecore_X_Window win = x11Window->GetXWindow();
591 ecore_x_window_lower(win);
595 void Window::Activate()
597 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
600 Ecore_X_Window win = x11Window->GetXWindow();
601 ecore_x_netwm_client_active_request(ecore_x_window_root_get(win), win, 1 /* request type, 1:application, 2:pager */, 0);
605 Dali::DragAndDropDetector Window::GetDragAndDropDetector() const
607 return mDragAndDropDetector;
610 Dali::Any Window::GetNativeHandle() const
614 return mEventHandler->mEcoreWindow;
622 void Window::OnStart()
624 ShowIndicator( mIndicatorVisible );
627 void Window::OnPause()
631 void Window::OnResume()
633 // resume indicator status
634 if( mIndicator != NULL )
636 // Restore own indicator opacity
637 // Send opacity mode to indicator service when app resumed
638 mIndicator->SetOpacityMode( mIndicatorOpacityMode );
642 void Window::OnStop()
653 void Window::OnDestroy()
658 void Window::AddAvailableOrientation(Dali::Window::WindowOrientation orientation)
662 for( std::size_t i=0; i<mAvailableOrientations.size(); i++ )
664 if(mAvailableOrientations[i] == orientation)
673 mAvailableOrientations.push_back(orientation);
674 SetAvailableOrientations( mAvailableOrientations );
678 void Window::RemoveAvailableOrientation(Dali::Window::WindowOrientation orientation)
680 for( std::vector<Dali::Window::WindowOrientation>::iterator iter = mAvailableOrientations.begin();
681 iter != mAvailableOrientations.end(); ++iter )
683 if( *iter == orientation )
685 mAvailableOrientations.erase( iter );
689 SetAvailableOrientations( mAvailableOrientations );
692 void Window::SetAvailableOrientations(const std::vector<Dali::Window::WindowOrientation>& orientations)
694 DALI_ASSERT_ALWAYS( mAvailableOrientations.size() <= 4 && "Incorrect number of available orientations" );
696 mAvailableOrientations = orientations;
697 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
700 #ifndef DALI_PROFILE_UBUNTU
701 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
702 if( ! mWMRotationAppSet )
704 mWMRotationAppSet = true;
705 ecore_x_e_window_rotation_app_set(ecoreWindow, EINA_TRUE);
709 for( std::size_t i=0; i<mAvailableOrientations.size(); i++ )
711 rotations[i] = static_cast<int>(mAvailableOrientations[i]);
713 ecore_x_e_window_rotation_available_rotations_set(ecoreWindow, rotations, mAvailableOrientations.size() );
714 #endif // DALI_PROFILE_UBUNTU
718 const std::vector<Dali::Window::WindowOrientation>& Window::GetAvailableOrientations()
720 return mAvailableOrientations;
723 void Window::SetPreferredOrientation(Dali::Window::WindowOrientation orientation)
725 mPreferredOrientation = orientation;
727 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
730 #ifndef DALI_PROFILE_UBUNTU
731 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
733 if( ! mWMRotationAppSet )
735 mWMRotationAppSet = true;
736 ecore_x_e_window_rotation_app_set(ecoreWindow, EINA_TRUE);
739 ecore_x_e_window_rotation_preferred_rotation_set(ecoreWindow, orientation);
740 #endif // DALI_PROFILE_UBUNTU
744 Dali::Window::WindowOrientation Window::GetPreferredOrientation()
746 return mPreferredOrientation;
749 void Window::SetAcceptFocus( bool accept )
751 mIsFocusAcceptable = accept;
754 bool Window::IsFocusAcceptable()
756 return mIsFocusAcceptable;
761 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
764 Ecore_X_Window win = x11Window->GetXWindow();
765 ecore_x_window_show( win );
767 // Need an update request
770 mAdaptor->RequestUpdateOnce();
777 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
780 Ecore_X_Window win = x11Window->GetXWindow();
781 ecore_x_window_hide( win );
785 bool Window::IsVisible() const
787 bool visible = false;
789 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
792 Ecore_X_Window win = x11Window->GetXWindow();
793 visible = static_cast< bool >( ecore_x_window_visible_get( win ) );
798 void Window::RotationDone( int orientation, int width, int height )
800 // Tell window manager we're done
801 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
804 #ifndef DALI_PROFILE_UBUNTU
805 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
806 Ecore_X_Window root = ecore_x_window_root_get(ecoreWindow);
809 * send rotation done message to wm, even if window is already rotated.
810 * that's why wm must be wait for comming rotation done message
811 * after sending rotation request.
813 ecore_x_e_window_rotation_change_done_send(root, ecoreWindow, orientation, width, height);
816 * set rotate window property
818 int angles[2] = { orientation, orientation };
819 ecore_x_window_prop_property_set( ecoreWindow,
820 ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
821 ECORE_X_ATOM_CARDINAL, 32, &angles, 2 );
822 #endif // DALI_PROFILE_UBUNTU
826 unsigned int Window::GetSupportedAuxiliaryHintCount()
831 std::string Window::GetSupportedAuxiliaryHint( unsigned int index )
833 return std::string();
836 unsigned int Window::AddAuxiliaryHint( const std::string& hint, const std::string& value )
841 bool Window::RemoveAuxiliaryHint( unsigned int id )
846 bool Window::SetAuxiliaryHintValue( unsigned int id, const std::string& value )
851 std::string Window::GetAuxiliaryHintValue( unsigned int id ) const
853 return std::string();
856 unsigned int Window::GetAuxiliaryHintId( const std::string& hint ) const
861 void Window::SetInputRegion( const Rect< int >& inputRegion )
865 void Window::SetType( Dali::DevelWindow::Type type )
870 Dali::DevelWindow::Type Window::GetType() const
875 bool Window::SetNotificationLevel( Dali::DevelWindow::NotificationLevel::Type level )
880 Dali::DevelWindow::NotificationLevel::Type Window::GetNotificationLevel()
882 return Dali::DevelWindow::NotificationLevel::NONE;
885 void Window::SetOpaqueState( bool opaque )
887 mOpaqueState = opaque;
890 bool Window::IsOpaqueState()
895 bool Window::SetScreenMode( Dali::DevelWindow::ScreenMode::Type screenMode )
900 Dali::DevelWindow::ScreenMode::Type Window::GetScreenMode()
902 return Dali::DevelWindow::ScreenMode::DEFAULT;
905 bool Window::SetBrightness( int brightness )
910 int Window::GetBrightness()
915 void Window::SetSize( Dali::DevelWindow::WindowSize size )
917 PositionSize positionSize = mSurface->GetPositionSize();
919 if( positionSize.width != size.GetWidth() || positionSize.height != size.GetHeight() )
921 positionSize.width = size.GetWidth();
922 positionSize.height = size.GetHeight();
924 mSurface->MoveResize( positionSize );
926 mAdaptor->SurfaceSizeChanged( Dali::Adaptor::SurfaceSize( positionSize.width, positionSize.height ) );
929 mResizedSignal.Emit( Dali::DevelWindow::WindowSize( positionSize.width, positionSize.height ) );
933 Dali::DevelWindow::WindowSize Window::GetSize()
935 PositionSize positionSize = mSurface->GetPositionSize();
937 return Dali::DevelWindow::WindowSize( positionSize.width, positionSize.height );
940 void Window::SetPosition( Dali::DevelWindow::WindowPosition position )
942 PositionSize positionSize = mSurface->GetPositionSize();
944 if( positionSize.x != position.GetX() || positionSize.y != position.GetY() )
946 positionSize.x = position.GetX();
947 positionSize.y = position.GetY();
949 mSurface->MoveResize( positionSize );
953 Dali::DevelWindow::WindowPosition Window::GetPosition()
955 PositionSize positionSize = mSurface->GetPositionSize();
957 return Dali::DevelWindow::WindowPosition( positionSize.x, positionSize.y );
966 #pragma GCC diagnostic pop