#define DALI_INTERNAL_WINDOWSYSTEM_COMMON_WINDOW_BASE_H
/*
- * Copyright (c) 2021 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.
#include <vector>
// INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/mouse-in-out-event.h>
#include <dali/devel-api/adaptor-framework/window-devel.h>
#include <dali/internal/graphics/gles/egl-implementation.h>
#include <dali/internal/window-system/common/damage-observer.h>
};
// Window
- typedef Signal<void(bool)> IconifySignalType;
- typedef Signal<void(bool)> FocusSignalType;
- typedef Signal<void()> OutputSignalType;
- typedef Signal<void()> DeleteSignalType;
- typedef Signal<void(const DamageArea&)> DamageSignalType;
- typedef Signal<void(const RotationEvent&)> RotationSignalType;
- typedef Signal<void(WindowEffectState, WindowEffectType)> TransitionEffectEventSignalType;
- typedef Signal<void()> KeyboardRepeatSettingsChangedSignalType;
- typedef Signal<void()> WindowRedrawRequestSignalType;
- typedef Signal<void(Dali::PositionSize&)> UpdatePositionSizeType;
+ typedef Signal<void(bool)> IconifySignalType;
+ typedef Signal<void(bool)> MaximizeSignalType;
+ typedef Signal<void(bool)> FocusSignalType;
+ typedef Signal<void()> OutputSignalType;
+ typedef Signal<void()> DeleteSignalType;
+ typedef Signal<void(const DamageArea&)> DamageSignalType;
+ typedef Signal<void(const RotationEvent&)> RotationSignalType;
+ typedef Signal<void(WindowEffectState, WindowEffectType)> TransitionEffectEventSignalType;
+ typedef Signal<void()> KeyboardRepeatSettingsChangedSignalType;
+ typedef Signal<void()> WindowRedrawRequestSignalType;
+ typedef Signal<void(Dali::PositionSize&)> UpdatePositionSizeType;
+ typedef Signal<void(const std::string&, const std::string&, const Property::Array&)> AuxiliaryMessageSignalType;
+ typedef Signal<void(const Dali::DevelWindow::MouseInOutEvent&)> MouseInOutEventSignalType;
+ typedef Signal<void(const Dali::DevelWindow::MouseRelativeEvent&)> MouseRelativeEventSignalType;
+ typedef Signal<void(Dali::Int32Pair&)> MoveCompletedSignalType;
+ typedef Signal<void(Dali::Uint16Pair&)> ResizeCompletedSignalType;
+ typedef Signal<void(WindowInsetsPartType, WindowInsetsPartState, const Extents&)> InsetsChangedSignalType;
+ typedef Signal<void(const Dali::Int32Pair&, bool, bool)> PointerConstraintsSignalType;
// Input events
typedef Signal<void(Integration::Point&, uint32_t)> TouchEventSignalType;
typedef Signal<void(void*)> SelectionSignalType;
// Accessibility
- typedef Signal<void(StyleChange::Type)> StyleSignalType;
- typedef Signal<void(const AccessibilityInfo&)> AccessibilitySignalType;
+ typedef Signal<void(StyleChange::Type)> StyleSignalType;
/**
* @brief Default constructor
virtual int GetNativeWindowId() = 0;
/**
+ * @brief Get the native window resource id assinged by window manager
+ * @return The native window resource id
+ */
+ virtual std::string GetNativeWindowResourceId() = 0;
+
+ /**
* @brief Create the egl window
*/
virtual EGLNativeWindowType CreateEglWindow(int width, int height) = 0;
virtual void MoveResize(Dali::PositionSize positionSize) = 0;
/**
+ * @copydoc Dali::Window::SetLayout()
+ */
+ virtual void SetLayout(unsigned int numCols, unsigned int numRows, unsigned int column, unsigned int row, unsigned int colSpan, unsigned int rowSpan) = 0;
+
+ /**
* @copydoc Dali::Window::SetClass()
*/
virtual void SetClass(const std::string& name, const std::string& className) = 0;
virtual void Activate() = 0;
/**
+ * @copydoc Dali::DevelWindow::Maximize()
+ */
+ virtual void Maximize(bool maximize) = 0;
+
+ /**
+ * @copydoc Dali::DevelWindow::IsMaximized()
+ */
+ virtual bool IsMaximized() const = 0;
+
+ /**
+ * @copydoc Dali::DevelWindow::SetMaximumSize()
+ */
+ virtual void SetMaximumSize(Dali::Window::WindowSize size) = 0;
+
+ /**
+ * @copydoc Dali::DevelWindow::Minimize()
+ */
+ virtual void Minimize(bool minimize) = 0;
+
+ /**
+ * @copydoc Dali::DevelWindow::IsMinimized()
+ */
+ virtual bool IsMinimized() const = 0;
+
+ /**
+ * @copydoc Dali::DevelWindow::SetMimimumSize()
+ */
+ virtual void SetMimimumSize(Dali::Window::WindowSize size) = 0;
+
+ /**
* @copydoc Dali::Window::SetAvailableOrientations()
*/
virtual void SetAvailableAnlges(const std::vector<int>& angles) = 0;
virtual void SetType(Dali::WindowType type) = 0;
/**
+ * @copydoc Dali::Window::GetType()
+ */
+ virtual Dali::WindowType GetType() const = 0;
+
+ /**
* @copydoc Dali::Window::SetNotificationLevel()
*/
- virtual bool SetNotificationLevel(Dali::WindowNotificationLevel level) = 0;
+ virtual Dali::WindowOperationResult SetNotificationLevel(Dali::WindowNotificationLevel level) = 0;
/**
* @copydoc Dali::Window::GetNotificationLevel()
/**
* @copydoc Dali::Window::SetScreenOffMode()
*/
- virtual bool SetScreenOffMode(WindowScreenOffMode screenOffMode) = 0;
+ virtual Dali::WindowOperationResult SetScreenOffMode(WindowScreenOffMode screenOffMode) = 0;
/**
* @copydoc Dali::Window::GetScreenOffMode()
/**
* @copydoc Dali::Window::SetBrightness()
*/
- virtual bool SetBrightness(int brightness) = 0;
+ virtual Dali::WindowOperationResult SetBrightness(int brightness) = 0;
/**
* @copydoc Dali::Window::GetBrightness()
virtual void GetDpi(unsigned int& dpiHorizontal, unsigned int& dpiVertical) = 0;
/**
- * @brief Return the orientation of the surface.
- * @return The orientation
+ * @brief Return the angle of the window's rotation.
+ * @return The window orientation
*/
- virtual int GetOrientation() const = 0;
+ virtual int GetWindowRotationAngle() const = 0;
/**
- * @brief Get the screen rotation angle of the window
+ * @brief Get the angle of screen rotation for the window
+ * @return The screen orientation
*/
virtual int GetScreenRotationAngle() = 0;
/**
- * @brief Set the rotation angle of the window
+ * @brief Set the screen rotation angle of the window
*/
virtual void SetWindowRotationAngle(int degree) = 0;
virtual void WindowRotationCompleted(int degree, int width, int height) = 0;
/**
+ * @brief starts the window is moved by display server
+ */
+ virtual void RequestMoveToServer() = 0;
+
+ /**
+ * @brief starts the window is resized by display server
+ *
+ * @param[in] direction It is direction of the started edge/side.
+ */
+ virtual void RequestResizeToServer(WindowResizeDirection direction) = 0;
+
+ /**
+ * @brief Enables the floating mode of window.
+ *
+ * The floating mode is to support making partial size window easliy.
+ * It is useful to make popup style window
+ * and this window is always upper than the other normal window.
+ *
+ * A special display server(as a Tizen display server) supports this mode.
+ *
+ * @param[in] enable Enable floating mode or not.
+ */
+ virtual void EnableFloatingMode(bool enable) = 0;
+
+ /**
+ * @brief Gets whether floating mode is enabled or not.
+ */
+ virtual bool IsFloatingModeEnabled() const = 0;
+
+ /**
* @copydoc Dali::Window::SetTransparency()
*/
virtual void SetTransparency(bool transparent) = 0;
/**
* @copydoc Dali::Window::SetParent()
*/
- virtual void SetParent(WindowBase* parentWinBase) = 0;
+ virtual void SetParent(WindowBase* parentWinBase, bool belowParent) = 0;
/**
* @brief Create a sync fence that can tell the frame is rendered by the graphics driver.
*/
virtual int CreateFramePresentedSyncFence() = 0;
+ /**
+ * @copydoc Dali::Window::SetPositionSizeWithAngle()
+ */
+ virtual void SetPositionSizeWithAngle(PositionSize positionSize, int angle) = 0;
+
+ /**
+ * @brief Initialize for Ime window.
+ * It should be called when the window is only used for Ime keyboard window.
+ */
+ virtual void InitializeIme() = 0;
+
+ /**
+ * @brief Send the signal to display server for Ime Window is ready to render.
+ * It is used for compositing by display server.
+ */
+ virtual void ImeWindowReadyToRender() = 0;
+
+ /**
+ * @brief Includes input region.
+ * @param[in] inputRegion The added region to accept input events.
+ */
+ virtual void IncludeInputRegion(const Rect<int>& inputRegion) = 0;
+
+ /**
+ * @brief Excludes input region.
+ * @param[in] inputRegion The subtracted region to except input events.
+ */
+ virtual void ExcludeInputRegion(const Rect<int>& inputRegion) = 0;
+
+ /**
+ * @brief Sets the pointer constraints lock.
+ * @return Returns true if PointerConstraintsLock succeeds.
+ */
+ virtual bool PointerConstraintsLock() = 0;
+
+ /**
+ * @brief Sets the pointer constraints unlock.
+ * @return Returns true if PointerConstraintsUnlock succeeds.
+ */
+ virtual bool PointerConstraintsUnlock() = 0;
+
+ /**
+ * @brief Sets the locked pointer region
+ *
+ * @param[in] x The x position.
+ * @param[in] y The y position.
+ * @param[in] width The width.
+ * @param[in] height The height
+ */
+ virtual void LockedPointerRegionSet(int32_t x, int32_t y, int32_t width, int32_t height) = 0;
+
+ /**
+ * @brief Sets the locked pointer cursor position hintset
+ *
+ * @param[in] x The x position.
+ * @param[in] y The y position.
+ */
+ virtual void LockedPointerCursorPositionHintSet(int32_t x, int32_t y) = 0;
+
+ /**
+ * @brief Sets the pointer warp. The pointer moves to the set coordinates.
+ *
+ * @param[in] x The x position.
+ * @param[in] y The y position.
+ * @return Returns true if PointerWarp succeeds.
+ */
+ virtual bool PointerWarp(int32_t x, int32_t y) = 0;
+
+ /**
+ * @brief Sets visibility on/off of cursor
+ *
+ * @param[in] visible The visibility of cursor
+ */
+ virtual void CursorVisibleSet(bool visible) = 0;
+
+ /**
+ * @brief Requests grab key events according to the requested device subtype
+ *
+ * @param[in] deviceSubclass The deviceSubclass type.
+ * @return Returns true if KeyboardGrab succeeds.
+ */
+ virtual bool KeyboardGrab(Device::Subclass::Type deviceSubclass) = 0;
+
+ /**
+ * @brief Requests ungrab key events
+ *
+ * @param[in] window The window instance.
+ * @return Returns true if KeyboardUnGrab succeeds.
+ */
+ virtual bool KeyboardUnGrab() = 0;
+
// Signals
/**
IconifySignalType& IconifyChangedSignal();
/**
+ * @brief This signal is emitted when the window becomes maximized or unmaximized.
+ */
+ MaximizeSignalType& MaximizeChangedSignal();
+
+ /**
* @brief This signal is emitted when the window focus is changed.
*/
FocusSignalType& FocusChangedSignal();
StyleSignalType& StyleChangedSignal();
/**
- * @brief This signal is emitted when an accessibility event is received.
- */
- AccessibilitySignalType& AccessibilitySignal();
-
- /**
* @brief This signal is emitted when window's transition animation is started or ended.
*/
TransitionEffectEventSignalType& TransitionEffectEventSignal();
WindowRedrawRequestSignalType& WindowRedrawRequestSignal();
/**
- * @brief This signal is emitted when the window is resized or moved by display server.
+ * @brief This signal is emitted when the window's geometry data is changed by display server or client.
+ * It is based on configure noification event.
*/
UpdatePositionSizeType& UpdatePositionSizeSignal();
+ /**
+ * @brief This signal is emitted when the window is received the auxiliary message from display server.
+ */
+ AuxiliaryMessageSignalType& AuxiliaryMessageSignal();
+
+ /**
+ * @brief This signal is emitted when a mouse in or out event is recevied.
+ */
+ MouseInOutEventSignalType& MouseInOutEventSignal();
+
+ /**
+ * @brief This signal is emitted when a mouse relative event is recevied.
+ */
+ MouseRelativeEventSignalType& MouseRelativeEventSignal();
+
+ /**
+ * @brief This signal is emitted when window has been moved by then display server.
+ * To be moved the window by display server, RequestMoveToServer() should be called.
+ * After the moving job is finished, this function will be called.
+ */
+ MoveCompletedSignalType& MoveCompletedSignal();
+
+ /**
+ * @brief This signal is emitted when window has been resized by then display server.
+ * To be resized the window by display server, RequestResizeToServer() should be called.
+ * After the resizing job is finished, this function will be called.
+ */
+ ResizeCompletedSignalType& ResizeCompletedSignal();
+
+ /**
+ * @brief This signal is emitted when window insets are changed by appearing or disappearing indicator, virtual keyboard, or clipboard.
+ */
+ InsetsChangedSignalType& InsetsChangedSignal();
+
+ /**
+ * @brief This signal is emitted when window pointer is locked/unlocked
+ */
+ PointerConstraintsSignalType& PointerConstraintsSignal();
+
protected:
// Undefined
WindowBase(const WindowBase&) = delete;
protected:
IconifySignalType mIconifyChangedSignal;
+ MaximizeSignalType mMaximizeChangedSignal;
FocusSignalType mFocusChangedSignal;
OutputSignalType mOutputTransformedSignal;
DeleteSignalType mDeleteRequestSignal;
SelectionSignalType mSelectionDataSendSignal;
SelectionSignalType mSelectionDataReceivedSignal;
StyleSignalType mStyleChangedSignal;
- AccessibilitySignalType mAccessibilitySignal;
TransitionEffectEventSignalType mTransitionEffectEventSignal;
KeyboardRepeatSettingsChangedSignalType mKeyboardRepeatSettingsChangedSignal;
WindowRedrawRequestSignalType mWindowRedrawRequestSignal;
UpdatePositionSizeType mUpdatePositionSizeSignal;
-
+ AuxiliaryMessageSignalType mAuxiliaryMessageSignal;
+ MouseInOutEventSignalType mMouseInOutEventSignal;
+ MouseRelativeEventSignalType mMouseRelativeEventSignal;
+ MoveCompletedSignalType mMoveCompletedSignal;
+ ResizeCompletedSignalType mResizeCompletedSignal;
+ InsetsChangedSignalType mInsetsChangedSignal;
+ PointerConstraintsSignalType mPointerConstraintsSignal;
};
} // namespace Adaptor