5 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/public-api/adaptor-framework/window-enumerations.h>
23 #include <dali/public-api/math/rect.h>
24 #include <dali/public-api/math/uint-16-pair.h>
25 #include <dali/public-api/math/vector2.h>
26 #include <dali/public-api/math/vector4.h>
27 #include <dali/public-api/object/any.h>
28 #include <dali/public-api/object/base-handle.h>
29 #include <dali/public-api/signals/dali-signal.h>
33 #include <dali/public-api/dali-adaptor-common.h>
41 * @addtogroup dali_adaptor_framework
45 typedef Dali::Rect<int> PositionSize;
47 namespace Internal DALI_INTERNAL
53 } // namespace DALI_INTERNAL
55 class DragAndDropDetector;
64 * @brief The window class is used internally for drawing.
66 * A Window has an orientation and indicator properties.
67 * You can get a valid Window handle by calling Dali::Application::GetWindow().
70 class DALI_ADAPTOR_API Window : public BaseHandle
74 * @brief Simple class for window position pairs of integers.
76 * Use this for integer position with window coordinates.
83 * @brief Default constructor, initialises to 0.
93 * @brief Constructor taking separate x and y parameters.
95 * @param[in] x The X coordinate of the window.
96 * @param[in] y The Y coordinate of the window.
98 IntPair(int32_t x, int32_t y)
105 * @brief Returns the x coordinate.
115 * @brief Returns the y coordinate.
125 * @brief Sets the x coordinate
127 * @param[in] x the x coordinate value
135 * @brief Sets the y coordinate
137 * @param[in] y the y coordinate value
146 IntPair(const IntPair&) = default; ///< Default copy constructor
147 IntPair(IntPair&&) = default; ///< Default move constructor
148 IntPair& operator=(const IntPair&) = default; ///< Default copy assignment operator
149 IntPair& operator=(IntPair&&) = default; ///< Default move assignment operator
158 using WindowSize = Uint16Pair; ///< Window size type @SINCE_1_2.60
159 using WindowPosition = IntPair; ///< Window position type @SINCE_2_1.43
161 using FocusChangeSignalType = Signal<void(Window, bool)>; ///< Window focus signal type @SINCE_1_4.35
162 using ResizeSignalType = Signal<void(Window, WindowSize)>; ///< Window resized signal type @SINCE_1_4.35
163 using KeyEventSignalType = Signal<void(const KeyEvent&)>; ///< Key event signal type @SINCE_1_9.21
164 using TouchEventSignalType = Signal<void(const TouchEvent&)>; ///< Touch signal type @SINCE_1_9.28
170 * @brief Creates an initialized handle to a new Window.
172 * @param[in] windowPosition The position and size of the Window
173 * @param[in] name The Window title
174 * @param[in] isTransparent Whether Window is transparent
175 * @return A new window
176 * @note This creates an extra window in addition to the default main window
178 static Window New(PositionSize windowPosition, const std::string& name, bool isTransparent = false);
181 * @brief Creates an initialized handle to a new Window.
183 * @param[in] windowPosition The position and size of the Window
184 * @param[in] name The Window title
185 * @param[in] className The Window class name
186 * @param[in] isTransparent Whether Window is transparent
187 * @note This creates an extra window in addition to the default main window
188 * @return A new Window
190 static Window New(PositionSize windowPosition, const std::string& name, const std::string& className, bool isTransparent = false);
193 * @brief Creates an uninitialized handle.
195 * This can be initialized using Dali::Application::GetWindow() or
196 * Dali::Window::New().
204 * This is non-virtual since derived Handle types must not contain data or virtual methods.
210 * @brief This copy constructor is required for (smart) pointer semantics.
213 * @param[in] handle A reference to the copied handle
215 Window(const Window& handle);
218 * @brief This assignment operator is required for (smart) pointer semantics.
221 * @param[in] rhs A reference to the copied handle
222 * @return A reference to this
224 Window& operator=(const Window& rhs);
227 * @brief Move constructor.
230 * @param[in] rhs A reference to the moved handle
232 Window(Window&& rhs);
235 * @brief Move assignment operator.
238 * @param[in] rhs A reference to the moved handle
239 * @return A reference to this handle
241 Window& operator=(Window&& rhs);
244 * @brief Adds a child Actor to the Window.
246 * The child will be referenced.
249 * @param[in] actor The child
250 * @pre The actor has been initialized.
251 * @pre The actor does not have a parent.
253 void Add(Actor actor);
256 * @brief Removes a child Actor from the Window.
258 * The child will be unreferenced.
261 * @param[in] actor The child
262 * @pre The actor has been added to the stage.
264 void Remove(Actor actor);
267 * @brief Sets the background color of the Window.
270 * @param[in] color The new background color
272 void SetBackgroundColor(const Vector4& color);
275 * @brief Gets the background color of the Window.
278 * @return The background color
280 Vector4 GetBackgroundColor() const;
283 * @brief Returns the root Layer of the Window.
286 * @return The root layer
288 Layer GetRootLayer() const;
291 * @brief Queries the number of on-scene layers in the Window.
293 * Note that a default layer is always provided (count >= 1).
296 * @return The number of layers
298 uint32_t GetLayerCount() const;
301 * @brief Retrieves the layer at a specified depth in the Window.
304 * @param[in] depth The depth
305 * @return The layer found at the given depth
306 * @pre Depth is less than layer count; see GetLayerCount().
308 Layer GetLayer(uint32_t depth) const;
311 * @brief Retrieves the DPI of the window.
314 * @return The DPI of the window
316 Uint16Pair GetDpi() const;
319 * @brief Sets the window name and class string.
321 * @param[in] name The name of the window
322 * @param[in] klass The class of the window
324 void SetClass(std::string name, std::string klass);
327 * @brief Raises window to the top of Window stack.
333 * @brief Lowers window to the bottom of Window stack.
339 * @brief Activates window to the top of Window stack even it is iconified.
345 * @brief Adds an orientation to the list of available orientations.
347 * @param[in] orientation The available orientation to add
349 void AddAvailableOrientation(WindowOrientation orientation);
352 * @brief Removes an orientation from the list of available orientations.
354 * @param[in] orientation The available orientation to remove
356 void RemoveAvailableOrientation(WindowOrientation orientation);
359 * @brief Sets a preferred orientation.
361 * @param[in] orientation The preferred orientation
362 * @pre Orientation is in the list of available orientations.
364 * @note To unset the preferred orientation, orientation should be set NO_ORIENTATION_PREFERENCE.
366 void SetPreferredOrientation(WindowOrientation orientation);
369 * @brief Gets the preferred orientation.
371 * @return The preferred orientation if previously set, or none
373 WindowOrientation GetPreferredOrientation();
376 * @brief Gets the native handle of the window.
378 * When users call this function, it wraps the actual type used by the underlying window system.
380 * @return The native handle of the Window or an empty handle
382 Any GetNativeHandle() const;
385 * @brief Sets whether window accepts focus or not.
388 * @param[in] accept If focus is accepted or not. Default is true.
390 void SetAcceptFocus(bool accept);
393 * @brief Returns whether window accepts focus or not.
396 * @return True if the window accept focus, false otherwise
398 bool IsFocusAcceptable() const;
401 * @brief Shows the window if it is hidden.
407 * @brief Hides the window if it is showing.
413 * @brief Returns whether the window is visible or not.
415 * @return True if the window is visible, false otherwise.
417 bool IsVisible() const;
420 * @brief Gets the count of supported auxiliary hints of the window.
422 * @return The number of supported auxiliary hints.
424 * @note The window auxiliary hint is the value which is used to decide which actions should be made available to the user by the window manager.
425 * If you want to set specific hint to your window, then you should check whether it exists in the supported auxiliary hints.
427 unsigned int GetSupportedAuxiliaryHintCount() const;
430 * @brief Gets the supported auxiliary hint string of the window.
432 * @param[in] index The index of the supported auxiliary hint lists
433 * @return The auxiliary hint string of the index.
435 * @note The window auxiliary hint is the value which is used to decide which actions should be made available to the user by the window manager.
436 * If you want to set specific hint to your window, then you should check whether it exists in the supported auxiliary hints.
438 std::string GetSupportedAuxiliaryHint(unsigned int index) const;
441 * @brief Creates an auxiliary hint of the window.
443 * @param[in] hint The auxiliary hint string.
444 * @param[in] value The value string.
445 * @return The ID of created auxiliary hint, or @c 0 on failure.
447 unsigned int AddAuxiliaryHint(const std::string& hint, const std::string& value);
450 * @brief Removes an auxiliary hint of the window.
452 * @param[in] id The ID of the auxiliary hint.
453 * @return True if no error occurred, false otherwise.
455 bool RemoveAuxiliaryHint(unsigned int id);
458 * @brief Changes a value of the auxiliary hint.
460 * @param[in] id The auxiliary hint ID.
461 * @param[in] value The value string to be set.
462 * @return True if no error occurred, false otherwise.
464 bool SetAuxiliaryHintValue(unsigned int id, const std::string& value);
467 * @brief Gets a value of the auxiliary hint.
469 * @param[in] id The auxiliary hint ID.
470 * @return The string value of the auxiliary hint ID, or an empty string if none exists.
472 std::string GetAuxiliaryHintValue(unsigned int id) const;
475 * @brief Gets a ID of the auxiliary hint string.
477 * @param[in] hint The auxiliary hint string.
478 * @return The ID of the auxiliary hint string, or @c 0 if none exists.
480 unsigned int GetAuxiliaryHintId(const std::string& hint) const;
483 * @brief Sets a region to accept input events.
485 * @param[in] inputRegion The region to accept input events.
487 void SetInputRegion(const Rect<int>& inputRegion);
490 * @brief Sets a window type.
492 * @param[in] type The window type.
493 * @remarks The default window type is NORMAL.
495 void SetType(WindowType type);
498 * @brief Gets a window type.
500 * @return A window type.
502 WindowType GetType() const;
505 * @brief Sets a priority level for the specified notification window.
507 * @param[in] level The notification window level.
508 * @return The result of the window operation.
510 * @PRIVILEGE_WINDOW_PRIORITY
511 * @remarks This can be used for a notification type window only. The default level is NotificationLevel::NONE.
513 WindowOperationResult SetNotificationLevel(WindowNotificationLevel level);
516 * @brief Gets a priority level for the specified notification window.
518 * @return The notification window level.
519 * @remarks This can be used for a notification type window only.
521 WindowNotificationLevel GetNotificationLevel() const;
524 * @brief Sets a transparent window's visual state to opaque.
525 * @details If a visual state of a transparent window is opaque,
526 * then the window manager could handle it as an opaque window when calculating visibility.
528 * @param[in] opaque Whether the window's visual state is opaque.
529 * @remarks This will have no effect on an opaque window.
530 * It doesn't change transparent window to opaque window but lets the window manager know the visual state of the window.
532 void SetOpaqueState(bool opaque);
535 * @brief Returns whether a transparent window's visual state is opaque or not.
537 * @return True if the window's visual state is opaque, false otherwise.
538 * @remarks The return value has no meaning on an opaque window.
540 bool IsOpaqueState() const;
543 * @brief Sets a window's screen off mode.
544 * @details This API is useful when the application needs to keep the display turned on.
545 * If the application sets the screen mode to #::Dali::WindowScreenOffMode::NEVER to its window and the window is shown,
546 * the window manager requests the display system to keep the display on as long as the window is shown.
547 * If the window is no longer shown, then the window manager requests the display system to go back to normal operation.
549 * @param[in] screenOffMode The screen mode.
550 * @return The result of the window operation.
554 WindowOperationResult SetScreenOffMode(WindowScreenOffMode screenOffMode);
557 * @brief Gets a screen off mode of the window.
559 * @return The screen off mode.
561 WindowScreenOffMode GetScreenOffMode() const;
564 * @brief Sets preferred brightness of the window.
565 * @details This API is useful when the application needs to change the brightness of the screen when it is appeared on the screen.
566 * If the brightness has been set and the window is shown, the window manager requests the display system to change the brightness to the provided value.
567 * If the window is no longer shown, then the window manager requests the display system to go back to default brightness.
568 * A value less than 0 results in default brightness and a value greater than 100 results in maximum brightness.
570 * @param[in] brightness The preferred brightness (0 to 100).
571 * @return The result of the window operation.
575 WindowOperationResult SetBrightness(int brightness);
578 * @brief Gets preferred brightness of the window.
580 * @return The preferred brightness.
582 int GetBrightness() const;
585 * @brief Sets a size of the window.
588 * @param[in] size The new window size
590 void SetSize(WindowSize size);
593 * @brief Gets a size of the window.
596 * @return The size of the window
598 WindowSize GetSize() const;
601 * @brief Sets a position of the window.
604 * @param[in] position The new window position
606 void SetPosition(WindowPosition position);
609 * @brief Gets a position of the window.
612 * @return The position of the window
614 WindowPosition GetPosition() const;
617 * @brief Sets whether the window is transparent or not.
620 * @param[in] transparent Whether the window is transparent
622 void SetTransparency(bool transparent);
625 * @brief Retrieves the list of render-tasks in the window.
628 * @return A valid handle to a RenderTaskList
630 RenderTaskList GetRenderTaskList();
634 * @brief The user should connect to this signal to get a timing when window gains focus or loses focus.
636 * A callback of the following type may be connected:
638 * void YourCallbackName( Window window, bool focusIn );
640 * The parameter is true if window gains focus, otherwise false.
641 * and window means this signal was called from what window
644 * @return The signal to connect to
646 FocusChangeSignalType& FocusChangeSignal();
649 * @brief This signal is emitted when the window is resized.
651 * A callback of the following type may be connected:
653 * void YourCallbackName( Window window, int width, int height );
655 * The parameters are the resized width and height.
656 * and window means this signal was called from what window
659 * @return The signal to connect to
661 ResizeSignalType& ResizeSignal();
664 * @brief This signal is emitted when key event is received.
666 * A callback of the following type may be connected:
668 * void YourCallbackName(const KeyEvent& event);
672 * @return The signal to connect to
674 KeyEventSignalType& KeyEventSignal();
677 * @brief This signal is emitted when the screen is touched and when the touch ends
678 * (i.e. the down & up touch events only).
680 * If there are multiple touch points, then this will be emitted when the first touch occurs and
681 * then when the last finger is lifted.
682 * An interrupted event will also be emitted (if it occurs).
683 * A callback of the following type may be connected:
685 * void YourCallbackName(const TouchEvent& event);
689 * @return The touch signal to connect to
691 * @note Motion events are not emitted.
693 TouchEventSignalType& TouchedSignal();
695 public: // Not intended for application developers
698 * @brief This constructor is used by Dali::Application::GetWindow().
700 * @param[in] window A pointer to the Window
702 explicit DALI_INTERNAL Window(Internal::Adaptor::Window* window);
711 #endif // __DALI_WINDOW_H__