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()
373 delete mEventHandler;
377 mOverlay->Remove( mIndicator->GetActor() );
378 Dali::RenderTaskList taskList = mOverlay->GetOverlayRenderTasks();
379 Dali::RenderTask indicatorTask = taskList.GetTask(0);
380 mOverlay->GetOverlayRenderTasks().RemoveTask(indicatorTask);
387 mAdaptor->RemoveObserver( *this );
388 mAdaptor->SetDragAndDropDetector( NULL );
395 void Window::Initialize(const PositionSize& positionSize, const std::string& name, const std::string& className)
397 // create an X11 window by default
399 ECore::WindowRenderSurface* windowSurface = new ECore::WindowRenderSurface( positionSize, surface, name, className, mIsTransparent );
400 windowSurface->Map();
402 mSurface = windowSurface;
404 mOrientation = Orientation::New(this);
406 // create event handler for X11 window
407 mEventHandler = new EventHandler( this );
410 void Window::DoShowIndicator( Dali::Window::WindowOrientation lastOrientation )
412 if( mIndicator == NULL )
414 if( mIndicatorVisible != Dali::Window::INVISIBLE )
416 mIndicator = new Indicator( mAdaptor, mIndicatorOrientation, this );
417 mIndicator->SetOpacityMode( mIndicatorOpacityMode );
418 Dali::Actor actor = mIndicator->GetActor();
419 SetIndicatorActorRotation();
420 mOverlay->Add(actor);
422 // else don't create a hidden indicator
424 else // Already have indicator
426 if( mIndicatorVisible == Dali::Window::VISIBLE )
428 // If we are resuming, and rotation has changed,
429 if( mIndicatorIsShown == false && mIndicatorOrientation != mNextIndicatorOrientation )
431 // then close current indicator and open new one
432 mShowRotatedIndicatorOnClose = true;
433 mIndicator->Close(); // May synchronously call IndicatorClosed() callback & 1 level of recursion
434 // Don't show actor - will contain indicator for old orientation.
439 // set indicator visible mode
440 if( mIndicator != NULL )
442 mIndicator->SetVisible( mIndicatorVisible );
445 bool show = (mIndicatorVisible != Dali::Window::INVISIBLE );
446 SetIndicatorProperties( show, lastOrientation );
447 mIndicatorIsShown = show;
450 void Window::DoRotateIndicator( Dali::Window::WindowOrientation orientation )
452 if( mIndicatorIsShown )
454 mShowRotatedIndicatorOnClose = true;
455 mNextIndicatorOrientation = orientation;
456 mIndicator->Close(); // May synchronously call IndicatorClosed() callback
460 // Save orientation for when the indicator is next shown
461 mShowRotatedIndicatorOnClose = false;
462 mNextIndicatorOrientation = orientation;
466 void Window::SetIndicatorProperties( bool isShow, Dali::Window::WindowOrientation lastOrientation )
468 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
471 Ecore_X_Window win = x11Window->GetXWindow();
473 int show_state = static_cast<int>( isShow );
474 ecore_x_window_prop_property_set( win,
475 ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
476 ECORE_X_ATOM_CARDINAL, 32, &show_state, 1);
480 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_ON);
484 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
489 void Window::IndicatorTypeChanged(Indicator::Type type)
491 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
494 #ifndef DALI_PROFILE_UBUNTU
495 Ecore_X_Window win = x11Window->GetXWindow();
498 case Indicator::INDICATOR_TYPE_1:
499 ecore_x_e_illume_indicator_type_set( win, ECORE_X_ILLUME_INDICATOR_TYPE_1 );
502 case Indicator::INDICATOR_TYPE_2:
503 ecore_x_e_illume_indicator_type_set( win, ECORE_X_ILLUME_INDICATOR_TYPE_2 );
506 case Indicator::INDICATOR_TYPE_UNKNOWN:
510 #endif // DALI_PROFILE_UBUNTU
514 void Window::IndicatorClosed( IndicatorInterface* indicator )
516 DALI_LOG_TRACE_METHOD( gWindowLogFilter );
518 if( mShowRotatedIndicatorOnClose )
520 Dali::Window::WindowOrientation currentOrientation = mIndicatorOrientation;
521 mIndicator->Open(mNextIndicatorOrientation);
522 mIndicatorOrientation = mNextIndicatorOrientation;
523 SetIndicatorActorRotation();
524 DoShowIndicator(currentOrientation);
528 void Window::IndicatorVisibilityChanged(bool isVisible)
530 mIndicatorVisibilityChangedSignal.Emit(isVisible);
533 void Window::SetIndicatorActorRotation()
535 DALI_LOG_TRACE_METHOD( gWindowLogFilter );
536 DALI_ASSERT_DEBUG( mIndicator != NULL );
538 Dali::Actor actor = mIndicator->GetActor();
539 switch( mIndicatorOrientation )
541 case Dali::Window::PORTRAIT:
542 actor.SetParentOrigin( ParentOrigin::TOP_CENTER );
543 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
544 actor.SetOrientation( Degree(0), Vector3::ZAXIS );
546 case Dali::Window::PORTRAIT_INVERSE:
547 actor.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
548 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
549 actor.SetOrientation( Degree(180), Vector3::ZAXIS );
551 case Dali::Window::LANDSCAPE:
552 actor.SetParentOrigin( ParentOrigin::CENTER_LEFT );
553 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
554 actor.SetOrientation( Degree(270), Vector3::ZAXIS );
556 case Dali::Window::LANDSCAPE_INVERSE:
557 actor.SetParentOrigin( ParentOrigin::CENTER_RIGHT );
558 actor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
559 actor.SetOrientation( Degree(90), Vector3::ZAXIS );
566 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
569 Ecore_X_Window win = x11Window->GetXWindow();
570 ecore_x_window_raise(win);
576 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
579 Ecore_X_Window win = x11Window->GetXWindow();
580 ecore_x_window_lower(win);
584 void Window::Activate()
586 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
589 Ecore_X_Window win = x11Window->GetXWindow();
590 ecore_x_netwm_client_active_request(ecore_x_window_root_get(win), win, 1 /* request type, 1:application, 2:pager */, 0);
594 Dali::DragAndDropDetector Window::GetDragAndDropDetector() const
596 return mDragAndDropDetector;
599 Dali::Any Window::GetNativeHandle() const
603 return mEventHandler->mEcoreWindow;
611 void Window::OnStart()
613 ShowIndicator( mIndicatorVisible );
616 void Window::OnPause()
620 void Window::OnResume()
622 // resume indicator status
623 if( mIndicator != NULL )
625 // Restore own indicator opacity
626 // Send opacity mode to indicator service when app resumed
627 mIndicator->SetOpacityMode( mIndicatorOpacityMode );
631 void Window::OnStop()
642 void Window::OnDestroy()
647 void Window::AddAvailableOrientation(Dali::Window::WindowOrientation orientation)
651 for( std::size_t i=0; i<mAvailableOrientations.size(); i++ )
653 if(mAvailableOrientations[i] == orientation)
662 mAvailableOrientations.push_back(orientation);
663 SetAvailableOrientations( mAvailableOrientations );
667 void Window::RemoveAvailableOrientation(Dali::Window::WindowOrientation orientation)
669 for( std::vector<Dali::Window::WindowOrientation>::iterator iter = mAvailableOrientations.begin();
670 iter != mAvailableOrientations.end(); ++iter )
672 if( *iter == orientation )
674 mAvailableOrientations.erase( iter );
678 SetAvailableOrientations( mAvailableOrientations );
681 void Window::SetAvailableOrientations(const std::vector<Dali::Window::WindowOrientation>& orientations)
683 DALI_ASSERT_ALWAYS( mAvailableOrientations.size() <= 4 && "Incorrect number of available orientations" );
685 mAvailableOrientations = orientations;
686 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
689 #ifndef DALI_PROFILE_UBUNTU
690 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
691 if( ! mWMRotationAppSet )
693 mWMRotationAppSet = true;
694 ecore_x_e_window_rotation_app_set(ecoreWindow, EINA_TRUE);
698 for( std::size_t i=0; i<mAvailableOrientations.size(); i++ )
700 rotations[i] = static_cast<int>(mAvailableOrientations[i]);
702 ecore_x_e_window_rotation_available_rotations_set(ecoreWindow, rotations, mAvailableOrientations.size() );
703 #endif // DALI_PROFILE_UBUNTU
707 const std::vector<Dali::Window::WindowOrientation>& Window::GetAvailableOrientations()
709 return mAvailableOrientations;
712 void Window::SetPreferredOrientation(Dali::Window::WindowOrientation orientation)
714 mPreferredOrientation = orientation;
716 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
719 #ifndef DALI_PROFILE_UBUNTU
720 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
722 if( ! mWMRotationAppSet )
724 mWMRotationAppSet = true;
725 ecore_x_e_window_rotation_app_set(ecoreWindow, EINA_TRUE);
728 ecore_x_e_window_rotation_preferred_rotation_set(ecoreWindow, orientation);
729 #endif // DALI_PROFILE_UBUNTU
733 Dali::Window::WindowOrientation Window::GetPreferredOrientation()
735 return mPreferredOrientation;
738 void Window::SetAcceptFocus( bool accept )
740 mIsFocusAcceptable = accept;
743 bool Window::IsFocusAcceptable()
745 return mIsFocusAcceptable;
750 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
753 Ecore_X_Window win = x11Window->GetXWindow();
754 ecore_x_window_show( win );
756 // Need an update request
759 mAdaptor->RequestUpdateOnce();
766 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
769 Ecore_X_Window win = x11Window->GetXWindow();
770 ecore_x_window_hide( win );
774 bool Window::IsVisible() const
776 bool visible = false;
778 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
781 Ecore_X_Window win = x11Window->GetXWindow();
782 visible = static_cast< bool >( ecore_x_window_visible_get( win ) );
787 void Window::RotationDone( int orientation, int width, int height )
789 // Tell window manager we're done
790 ECore::WindowRenderSurface* x11Window = dynamic_cast< ECore::WindowRenderSurface * >( mSurface );
793 #ifndef DALI_PROFILE_UBUNTU
794 Ecore_X_Window ecoreWindow = x11Window->GetXWindow();
795 Ecore_X_Window root = ecore_x_window_root_get(ecoreWindow);
798 * send rotation done message to wm, even if window is already rotated.
799 * that's why wm must be wait for comming rotation done message
800 * after sending rotation request.
802 ecore_x_e_window_rotation_change_done_send(root, ecoreWindow, orientation, width, height);
805 * set rotate window property
807 int angles[2] = { orientation, orientation };
808 ecore_x_window_prop_property_set( ecoreWindow,
809 ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
810 ECORE_X_ATOM_CARDINAL, 32, &angles, 2 );
811 #endif // DALI_PROFILE_UBUNTU
815 unsigned int Window::GetSupportedAuxiliaryHintCount()
820 std::string Window::GetSupportedAuxiliaryHint( unsigned int index )
822 return std::string();
825 unsigned int Window::AddAuxiliaryHint( const std::string& hint, const std::string& value )
830 bool Window::RemoveAuxiliaryHint( unsigned int id )
835 bool Window::SetAuxiliaryHintValue( unsigned int id, const std::string& value )
840 std::string Window::GetAuxiliaryHintValue( unsigned int id ) const
842 return std::string();
845 unsigned int Window::GetAuxiliaryHintId( const std::string& hint ) const
850 void Window::SetInputRegion( const Rect< int >& inputRegion )
854 void Window::SetType( Dali::DevelWindow::Type type )
859 Dali::DevelWindow::Type Window::GetType() const
864 bool Window::SetNotificationLevel( Dali::DevelWindow::NotificationLevel::Type level )
869 Dali::DevelWindow::NotificationLevel::Type Window::GetNotificationLevel()
871 return Dali::DevelWindow::NotificationLevel::NONE;
874 void Window::SetOpaqueState( bool opaque )
876 mOpaqueState = opaque;
879 bool Window::IsOpaqueState()
884 bool Window::SetScreenMode( Dali::DevelWindow::ScreenMode::Type screenMode )
889 Dali::DevelWindow::ScreenMode::Type Window::GetScreenMode()
891 return Dali::DevelWindow::ScreenMode::DEFAULT;
894 bool Window::SetBrightness( int brightness )
899 int Window::GetBrightness()
904 void Window::SetSize( Dali::DevelWindow::WindowSize size )
906 PositionSize positionSize = mSurface->GetPositionSize();
908 if( positionSize.width != size.GetWidth() || positionSize.height != size.GetHeight() )
910 positionSize.width = size.GetWidth();
911 positionSize.height = size.GetHeight();
913 mSurface->MoveResize( positionSize );
915 mAdaptor->SurfaceSizeChanged( Dali::Adaptor::SurfaceSize( positionSize.width, positionSize.height ) );
918 mResizedSignal.Emit( Dali::DevelWindow::WindowSize( positionSize.width, positionSize.height ) );
922 Dali::DevelWindow::WindowSize Window::GetSize()
924 PositionSize positionSize = mSurface->GetPositionSize();
926 return Dali::DevelWindow::WindowSize( positionSize.width, positionSize.height );
929 void Window::SetPosition( Dali::DevelWindow::WindowPosition position )
931 PositionSize positionSize = mSurface->GetPositionSize();
933 if( positionSize.x != position.GetX() || positionSize.y != position.GetY() )
935 positionSize.x = position.GetX();
936 positionSize.y = position.GetY();
938 mSurface->MoveResize( positionSize );
942 Dali::DevelWindow::WindowPosition Window::GetPosition()
944 PositionSize positionSize = mSurface->GetPositionSize();
946 return Dali::DevelWindow::WindowPosition( positionSize.x, positionSize.y );
949 void Window::SetTransparency( bool transparent )
959 #pragma GCC diagnostic pop