// EXTERNAL HEADERS
#include <dali/devel-api/adaptor-framework/orientation.h>
+#include <dali/devel-api/events/key-event-devel.h>
#include <dali/integration-api/core.h>
#include <dali/integration-api/events/touch-event-integ.h>
+#include <dali/integration-api/events/touch-integ.h>
#include <dali/public-api/actors/actor.h>
#include <dali/public-api/actors/camera-actor.h>
#include <dali/public-api/actors/layer.h>
Window::Window()
: mWindowSurface(nullptr),
mWindowBase(),
- mIsTransparent(false),
- mIsFocusAcceptable(true),
- mIconified(false),
- mOpaqueState(false),
- mWindowRotationAcknowledgement(false),
- mFocused(false),
mParentWindow(NULL),
mPreferredAngle(static_cast<int>(WindowOrientation::NO_ORIENTATION_PREFERENCE)),
mRotationAngle(0),
mWindowWidth(0),
mWindowHeight(0),
- mOrientationMode(Internal::Adaptor::Window::OrientationMode::PORTRAIT),
mNativeWindowId(-1),
+ mOrientationMode(Internal::Adaptor::Window::OrientationMode::PORTRAIT),
mDeleteRequestSignal(),
mFocusChangeSignal(),
mResizeSignal(),
mVisibilityChangedSignal(),
mTransitionEffectEventSignal(),
mKeyboardRepeatSettingsChangedSignal(),
- mAuxiliaryMessageSignal()
+ mAuxiliaryMessageSignal(),
+ mMovedSignal(),
+ mLastKeyEvent(),
+ mLastTouchEvent(),
+ mIsTransparent(false),
+ mIsFocusAcceptable(true),
+ mIconified(false),
+ mOpaqueState(false),
+ mWindowRotationAcknowledgement(false),
+ mFocused(false)
{
}
{
auto bridge = Accessibility::Bridge::GetCurrentBridge();
auto rootLayer = mScene.GetRootLayer();
- auto accessible = Accessibility::Accessible::Get(rootLayer, true);
+ auto accessible = Accessibility::Accessible::Get(rootLayer);
bridge->RemoveTopLevelWindow(accessible);
+ // Related to multi-window case. This is called for default window and non-default window, but it is effective for non-default window.
+ bridge->Emit(accessible, Accessibility::WindowEvent::DESTROY);
}
if(mAdaptor)
if(bridge->IsUp())
{
auto rootLayer = mScene.GetRootLayer();
- auto accessible = Accessibility::Accessible::Get(rootLayer, true);
+ auto accessible = Accessibility::Accessible::Get(rootLayer);
bridge->AddTopLevelWindow(accessible);
}
return mWindowBase->IsMaximized();
}
+void Window::SetMaximumSize(Dali::Window::WindowSize size)
+{
+ mWindowBase->SetMaximumSize(size);
+}
+
void Window::Minimize(bool minimize)
{
mWindowBase->Minimize(minimize);
return mWindowBase->IsMinimized();
}
+void Window::SetMimimumSize(Dali::Window::WindowSize size)
+{
+ mWindowBase->SetMimimumSize(size);
+}
+
uint32_t Window::GetLayerCount() const
{
return mScene.GetLayerCount();
mSurface->SetFullSwapNextFrame();
- Dali::Accessibility::Accessible::Get(mScene.GetRootLayer(), true)->EmitBoundsChanged(Dali::Rect<>(oldRect.x, oldRect.y, size.GetWidth(), size.GetHeight()));
+ Dali::Accessibility::Accessible::Get(mScene.GetRootLayer())->EmitBoundsChanged(Dali::Rect<>(oldRect.x, oldRect.y, size.GetWidth(), size.GetHeight()));
}
Dali::Window::WindowSize Window::GetSize() const
mSurface->SetFullSwapNextFrame();
- Dali::Accessibility::Accessible::Get(mScene.GetRootLayer(), true)->EmitBoundsChanged(Dali::Rect<>(position.GetX(), position.GetY(), oldRect.width, oldRect.height));
+ Dali::Accessibility::Accessible::Get(mScene.GetRootLayer())->EmitBoundsChanged(Dali::Rect<>(position.GetX(), position.GetY(), oldRect.width, oldRect.height));
}
Dali::Window::WindowPosition Window::GetPosition() const
void Window::SetPositionSize(PositionSize positionSize)
{
PositionSize oldRect = mSurface->GetPositionSize();
+ Dali::Window handle(this);
mWindowSurface->MoveResize(positionSize);
PositionSize newRect = mSurface->GetPositionSize();
+ if((oldRect.x != newRect.x) || (oldRect.y != newRect.y))
+ {
+ Dali::Window::WindowPosition position(newRect.x, newRect.y);
+ mMovedSignal.Emit(handle, position);
+ }
+
// When surface size is updated, inform adaptor of resizing and emit ResizeSignal
if((oldRect.width != newRect.width) || (oldRect.height != newRect.height))
{
mAdaptor->SurfaceResizePrepare(mSurface.get(), newSize);
DALI_LOG_RELEASE_INFO("Window (%p), WinId (%d), current angle (%d), SetPositionSize():resize signal [%d x %d]\n", this, mNativeWindowId, mRotationAngle, 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));
+ Dali::Accessibility::Accessible::Get(mScene.GetRootLayer())->EmitBoundsChanged(Dali::Rect<>(positionSize.x, positionSize.y, positionSize.width, positionSize.height));
}
Dali::Layer Window::GetRootLayer() const
void Window::OnUpdatePositionSize(Dali::PositionSize& positionSize)
{
+ bool resized = false;
+ bool moved = false;
+ Dali::Window handle(this);
PositionSize oldRect = mSurface->GetPositionSize();
mWindowSurface->UpdatePositionSize(positionSize);
PositionSize newRect = positionSize;
- // When surface size is updated, inform adaptor of resizing and emit ResizeSignal
+ if((oldRect.x != newRect.x) || (oldRect.y != newRect.y))
+ {
+ moved = true;
+ }
+
if((oldRect.width != newRect.width) || (oldRect.height != newRect.height))
{
+ resized = true;
+ }
+
+ if(moved)
+ {
+ Dali::Window::WindowPosition position(newRect.x, newRect.y);
+ mMovedSignal.Emit(handle, position);
+ }
+
+ // When surface size is updated, inform adaptor of resizing and emit ResizeSignal
+ if(resized)
+ {
Uint16Pair newSize(newRect.width, newRect.height);
+ mWindowWidth = newRect.width;
+ mWindowHeight = 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));
+ Dali::Accessibility::Accessible::Get(mScene.GetRootLayer())->EmitBoundsChanged(Dali::Rect<>(positionSize.x, positionSize.y, positionSize.width, positionSize.height));
}
void Window::OnTouchPoint(Dali::Integration::Point& point, int timeStamp)
{
+ mLastTouchEvent = Dali::Integration::NewTouchEvent(timeStamp, point);
FeedTouchPoint(point, timeStamp);
}
void Window::OnKeyEvent(Dali::Integration::KeyEvent& keyEvent)
{
+ mLastKeyEvent = Dali::DevelKeyEvent::New(keyEvent.keyName, keyEvent.logicalKey, keyEvent.keyString, keyEvent.keyCode, keyEvent.keyModifier, keyEvent.time, static_cast<Dali::KeyEvent::State>(keyEvent.state), keyEvent.compose, keyEvent.deviceName, keyEvent.deviceClass, keyEvent.deviceSubclass);
FeedKeyEvent(keyEvent);
}
{
auto bridge = Accessibility::Bridge::GetCurrentBridge();
auto rootLayer = mScene.GetRootLayer();
- auto accessible = Accessibility::Accessible::Get(rootLayer, true);
+ auto accessible = Accessibility::Accessible::Get(rootLayer);
bridge->AddTopLevelWindow(accessible);
+ if(!mVisible || mIconified)
+ {
+ return;
+ }
+
+ Dali::Window handle(this);
+ bridge->WindowShown(handle);
+
if(mFocused)
{
- Dali::Window handle(this);
bridge->WindowFocused(handle);
}
}
{
auto bridge = Accessibility::Bridge::GetCurrentBridge();
auto rootLayer = mScene.GetRootLayer();
- auto accessible = Accessibility::Accessible::Get(rootLayer, true);
+ auto accessible = Accessibility::Accessible::Get(rootLayer);
bridge->RemoveTopLevelWindow(accessible);
}
return mWindowSurface->IsWindowRotating();
}
+const Dali::KeyEvent& Window::GetLastKeyEvent() const
+{
+ return mLastKeyEvent;
+}
+
+const Dali::TouchEvent& Window::GetLastTouchEvent() const
+{
+ return mLastTouchEvent;
+}
+
} // namespace Adaptor
} // namespace Internal