X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fwindow-system%2Fcommon%2Fwindow-impl.cpp;h=794438d1809d2bd82d2de7ecc2bd67a2802dfe4b;hb=ca7472fb1b41f4dde72bed3fd2eb4c28b3ed9ec2;hp=e3f65254ee6845687ad239dffa01cb8ec559bf84;hpb=6af352690fe5cb16092dcf9de16357264288d89c;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 index e3f6525..794438d 100644 --- a/dali/internal/window-system/common/window-impl.cpp +++ b/dali/internal/window-system/common/window-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -32,7 +32,8 @@ #include // INTERNAL HEADERS -#include +#include +#include #include #include #include @@ -80,6 +81,7 @@ Window::Window() mIconified(false), mOpaqueState(false), mWindowRotationAcknowledgement(false), + mFocused(false), mParentWindow(NULL), mPreferredAngle(static_cast(WindowOrientation::NO_ORIENTATION_PREFERENCE)), mRotationAngle(0), @@ -99,10 +101,13 @@ Window::Window() Window::~Window() { - auto bridge = Accessibility::Bridge::GetCurrentBridge(); - auto rootLayer = mScene.GetRootLayer(); - auto accessible = Accessibility::Accessible::Get(rootLayer, true); - bridge->RemoveTopLevelWindow(accessible); + if(mScene) + { + auto bridge = Accessibility::Bridge::GetCurrentBridge(); + auto rootLayer = mScene.GetRootLayer(); + auto accessible = Accessibility::Accessible::Get(rootLayer, true); + bridge->RemoveTopLevelWindow(accessible); + } if(mAdaptor) { @@ -174,10 +179,13 @@ void Window::OnAdaptorSet(Dali::Adaptor& adaptor) mEventHandler->AddObserver(*this); // Add Window to bridge for ATSPI - auto bridge = Accessibility::Bridge::GetCurrentBridge(); - auto rootLayer = mScene.GetRootLayer(); - auto accessible = Accessibility::Accessible::Get(rootLayer, true); - bridge->AddTopLevelWindow(accessible); + auto bridge = Accessibility::Bridge::GetCurrentBridge(); + if (bridge->IsUp()) + { + auto rootLayer = mScene.GetRootLayer(); + auto accessible = Accessibility::Accessible::Get(rootLayer, true); + bridge->AddTopLevelWindow(accessible); + } bridge->EnabledSignal().Connect(this, &Window::OnAccessibilityEnabled); bridge->DisabledSignal().Connect(this, &Window::OnAccessibilityDisabled); @@ -231,6 +239,30 @@ void Window::Activate() DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), Activate() \n", this, mNativeWindowId); } +void Window::Maximize(bool maximize) +{ + mWindowBase->Maximize(maximize); + + DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), Maximize: %d\n", this, mNativeWindowId, maximize); +} + +bool Window::IsMaximized() const +{ + return mWindowBase->IsMaximized(); +} + +void Window::Minimize(bool minimize) +{ + mWindowBase->Minimize(minimize); + + DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), Minimize: %d\n", this, mNativeWindowId, minimize); +} + +bool Window::IsMinimized() const +{ + return mWindowBase->IsMinimized(); +} + uint32_t Window::GetLayerCount() const { return mScene.GetLayerCount(); @@ -246,6 +278,11 @@ Dali::RenderTaskList Window::GetRenderTaskList() const return mScene.GetRenderTaskList(); } +std::string Window::GetNativeResourceId() const +{ + return mWindowBase->GetNativeWindowResourceId(); +} + void Window::AddAvailableOrientation(WindowOrientation orientation) { if(IsOrientationAvailable(orientation) == false) @@ -442,6 +479,7 @@ void Window::Show() { Dali::Window handle(this); mVisibilityChangedSignal.Emit(handle, true); + Dali::Accessibility::Bridge::GetCurrentBridge()->WindowShown(handle); WindowVisibilityObserver* observer(mAdaptor); observer->OnWindowShown(); @@ -462,6 +500,7 @@ void Window::Hide() { Dali::Window handle(this); mVisibilityChangedSignal.Emit(handle, false); + Dali::Accessibility::Bridge::GetCurrentBridge()->WindowHidden(handle); WindowVisibilityObserver* observer(mAdaptor); observer->OnWindowHidden(); @@ -722,6 +761,7 @@ void Window::OnIconifyChanged(bool iconified) { Dali::Window handle(this); mVisibilityChangedSignal.Emit(handle, false); + Dali::Accessibility::Bridge::GetCurrentBridge()->WindowHidden(handle); WindowVisibilityObserver* observer(mAdaptor); observer->OnWindowHidden(); @@ -737,6 +777,7 @@ void Window::OnIconifyChanged(bool iconified) { Dali::Window handle(this); mVisibilityChangedSignal.Emit(handle, true); + Dali::Accessibility::Bridge::GetCurrentBridge()->WindowShown(handle); WindowVisibilityObserver* observer(mAdaptor); observer->OnWindowShown(); @@ -766,6 +807,7 @@ void Window::OnFocusChanged(bool focusIn) bridge->WindowUnfocused(handle); } } + mFocused = focusIn; } void Window::OnOutputTransformed() @@ -803,7 +845,30 @@ void Window::OnWindowRedrawRequest() void Window::OnUpdatePositionSize(Dali::PositionSize& positionSize) { - SetPositionSize(positionSize); + PositionSize oldRect = mSurface->GetPositionSize(); + + mWindowSurface->UpdatePositionSize(positionSize); + + PositionSize newRect = positionSize; + + // When surface size is updated, inform adaptor of resizing and emit ResizeSignal + if((oldRect.width != newRect.width) || (oldRect.height != newRect.height)) + { + Uint16Pair newSize(newRect.width, newRect.height); + + SurfaceResized(); + + mAdaptor->SurfaceResizePrepare(mSurface.get(), newSize); + + DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), Updated PositionSize by server :resize signal [%d x %d]\n", this, mNativeWindowId, newRect.width, newRect.height); + Dali::Window handle(this); + mResizeSignal.Emit(handle, newSize); + mAdaptor->SurfaceResizeComplete(mSurface.get(), newSize); + } + + mSurface->SetFullSwapNextFrame(); + + Dali::Accessibility::Accessible::Get(mScene.GetRootLayer(), true)->EmitBoundsChanged(Dali::Rect<>(positionSize.x, positionSize.y, positionSize.width, positionSize.height)); } void Window::OnTouchPoint(Dali::Integration::Point& point, int timeStamp) @@ -874,6 +939,12 @@ void Window::OnAccessibilityEnabled() auto rootLayer = mScene.GetRootLayer(); auto accessible = Accessibility::Accessible::Get(rootLayer, true); bridge->AddTopLevelWindow(accessible); + + if(mFocused) + { + Dali::Window handle(this); + bridge->WindowFocused(handle); + } } void Window::OnAccessibilityDisabled()