/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 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.
#if defined(DEBUG_ENABLED)
Debug::Filter* gWindowLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_WINDOW");
#endif
-
} // unnamed namespace
Window* Window::New(const PositionSize& positionSize, const std::string& name, const std::string& className, Dali::WindowType type, bool isTransparent)
mKeyboardRepeatSettingsChangedSignal(),
mAuxiliaryMessageSignal(),
mMovedSignal(),
+ mOrientationChangedSignal(),
mLastKeyEvent(),
mLastTouchEvent(),
mIsTransparent(false),
mIsFocusAcceptable(true),
mIconified(false),
+ mMaximized(false),
mOpaqueState(false),
mWindowRotationAcknowledgement(false),
mFocused(false),
// Connect signals
mWindowBase->IconifyChangedSignal().Connect(this, &Window::OnIconifyChanged);
+ mWindowBase->MaximizeChangedSignal().Connect(this, &Window::OnMaximizeChanged);
mWindowBase->FocusChangedSignal().Connect(this, &Window::OnFocusChanged);
mWindowBase->DeleteRequestSignal().Connect(this, &Window::OnDeleteRequest);
mWindowBase->TransitionEffectEventSignal().Connect(this, &Window::OnTransitionEffectEvent);
mNativeWindowId = mWindowBase->GetNativeWindowId();
}
+void Window::SetRenderNotification(TriggerEventInterface *renderNotification)
+{
+ if(!mWindowSurface)
+ {
+ return;
+ }
+
+ mWindowSurface->SetRenderNotification(renderNotification);
+}
+
void Window::OnAdaptorSet(Dali::Adaptor& adaptor)
{
mEventHandler = EventHandlerPtr(new EventHandler(mWindowSurface->GetWindowBase(), *mAdaptor));
auto rootLayer = mScene.GetRootLayer();
auto accessible = Accessibility::Accessible::Get(rootLayer);
bridge->AddTopLevelWindow(accessible);
+
+ // Emit Window create event
+ // Create and Destory signal only emit in multi-window environment, so it does not emit on default layer.
+ bridge->Emit(accessible, Accessibility::WindowEvent::CREATE);
}
bridge->EnabledSignal().Connect(this, &Window::OnAccessibilityEnabled);
int32_t newX = position.GetX();
int32_t newY = position.GetY();
- mWindowSurface->MoveResize(PositionSize(newX, newY, oldRect.width, oldRect.height));
+ mWindowSurface->Move(PositionSize(newX, newY, oldRect.width, oldRect.height));
if((oldRect.x != newX) || (oldRect.y != newY))
{
Dali::Accessibility::Accessible::Get(mScene.GetRootLayer())->EmitBoundsChanged(Dali::Rect<>(positionSize.x, positionSize.y, positionSize.width, positionSize.height));
}
+void Window::SetLayout(unsigned int numCols, unsigned int numRows, unsigned int column, unsigned int row, unsigned int colSpan, unsigned int rowSpan)
+{
+ mWindowBase->SetLayout(numCols, numRows, column, row, colSpan, rowSpan);
+}
+
Dali::Layer Window::GetRootLayer() const
{
return mScene.GetRootLayer();
void Window::OnIconifyChanged(bool iconified)
{
+ const bool isActuallyChanged = (iconified != mIconified);
+ auto bridge = Dali::Accessibility::Bridge::GetCurrentBridge();
+ Dali::Window handle(this);
+
if(iconified)
{
mIconified = true;
if(mVisible)
{
- Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, false);
- Dali::Accessibility::Bridge::GetCurrentBridge()->WindowHidden(handle);
+ bridge->WindowHidden(handle);
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowHidden();
}
+ if(isActuallyChanged)
+ {
+ bridge->WindowMinimized(handle);
+ }
+
DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), Iconified: visible = %d\n", this, mNativeWindowId, mVisible);
}
else
if(mVisible)
{
- Dali::Window handle(this);
mVisibilityChangedSignal.Emit(handle, true);
- Dali::Accessibility::Bridge::GetCurrentBridge()->WindowShown(handle);
+ bridge->WindowShown(handle);
WindowVisibilityObserver* observer(mAdaptor);
observer->OnWindowShown();
}
+ if(isActuallyChanged)
+ {
+ bridge->WindowRestored(handle, Dali::Accessibility::WindowRestoreType::RESTORE_FROM_ICONIFY);
+ }
+
DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), Deiconified: visible = %d\n", this, mNativeWindowId, mVisible);
}
mSurface->SetFullSwapNextFrame();
}
-void Window::OnFocusChanged(bool focusIn)
+void Window::OnMaximizeChanged(bool maximized)
{
- Dali::Window handle(this);
- mFocusChangeSignal.Emit(handle, focusIn);
-
- mSurface->SetFullSwapNextFrame();
+ const bool isActuallyChanged = (maximized != mMaximized);
- if(auto bridge = Dali::Accessibility::Bridge::GetCurrentBridge())
+ if(isActuallyChanged)
{
- if(focusIn)
+ auto bridge = Dali::Accessibility::Bridge::GetCurrentBridge();
+ Dali::Window handle(this);
+
+ if(maximized)
{
- bridge->WindowFocused(handle);
+ mMaximized = true;
+ bridge->WindowMaximized(handle);
}
else
{
- bridge->WindowUnfocused(handle);
+ mMaximized = false;
+ bridge->WindowRestored(handle, Dali::Accessibility::WindowRestoreType::RESTORE_FROM_MAXIMIZE);
}
}
+}
+
+void Window::OnFocusChanged(bool focusIn)
+{
+ Dali::Window handle(this);
+ mFocusChangeSignal.Emit(handle, focusIn);
+
+ mSurface->SetFullSwapNextFrame();
+ auto bridge = Dali::Accessibility::Bridge::GetCurrentBridge();
+
+ if(focusIn)
+ {
+ bridge->WindowFocused(handle);
+ }
+ else
+ {
+ bridge->WindowUnfocused(handle);
+ }
+
mFocused = focusIn;
}
Dali::Window handle(this);
mResizeSignal.Emit(handle, Dali::Window::WindowSize(mWindowWidth, mWindowHeight));
+ mOrientationChangedSignal.Emit(handle, GetCurrentOrientation());
mAdaptor->SurfaceResizeComplete(mSurface.get(), Adaptor::SurfaceSize(mWindowWidth, mWindowHeight));
}
bridge->RemoveTopLevelWindow(accessible);
}
-void Window::RecalculateTouchPosition(Integration::Point& point)
+Vector2 Window::RecalculatePosition(const Vector2& position)
{
- Vector2 position = point.GetScreenPosition();
Vector2 convertedPosition;
switch(mRotationAngle)
break;
}
}
-
- point.SetScreenPosition(convertedPosition);
+ return convertedPosition;
}
Dali::Window Window::Get(Dali::Actor actor)