#define DALI_INTERNAL_WINDOWSYSTEM_COMMON_WINDOW_IMPL_H
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 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 <dali/public-api/object/base-object.h>
#include <dali/public-api/actors/layer.h>
#include <dali/public-api/render-tasks/render-task-list.h>
-
-#ifdef DALI_ADAPTOR_COMPILATION
-#include <dali/integration-api/scene-holder-impl.h>
-#else
-#include <dali/integration-api/adaptors/scene-holder-impl.h>
-#endif
+#include <dali/public-api/object/property-array.h>
// INTERNAL INCLUDES
-#include <dali/internal/adaptor/common/adaptor-impl.h>
#include <dali/public-api/adaptor-framework/window.h>
#include <dali/public-api/adaptor-framework/key-grab.h>
#include <dali/devel-api/adaptor-framework/window-devel.h>
+#include <dali/integration-api/adaptor-framework/scene-holder-impl.h>
+#include <dali/internal/adaptor/common/adaptor-impl.h>
#include <dali/internal/window-system/common/event-handler.h>
namespace Dali
class Window : public Dali::Internal::Adaptor::SceneHolder, public EventHandler::Observer, public ConnectionTracker
{
public:
- typedef Dali::Window::IndicatorSignalType IndicatorSignalType;
- typedef Dali::Window::FocusSignalType FocusSignalType;
- typedef Dali::Window::ResizedSignalType ResizedSignalType;
typedef Dali::Window::FocusChangeSignalType FocusChangeSignalType;
typedef Dali::Window::ResizeSignalType ResizeSignalType;
+ typedef Dali::DevelWindow::VisibilityChangedSignalType VisibilityChangedSignalType;
typedef Dali::DevelWindow::TransitionEffectEventSignalType TransitionEffectEventSignalType;
+ typedef Dali::DevelWindow::KeyboardRepeatSettingsChangedSignalType KeyboardRepeatSettingsChangedSignalType;
typedef Signal< void () > SignalType;
/**
- * Create a new Window. This should only be called once by the Application class
+ * @brief Create a new Window. This should only be called once by the Application class
* @param[in] positionSize The position and size of the window
* @param[in] name The window title
* @param[in] className The window class name
static Window* New(const PositionSize& positionSize, const std::string& name, const std::string& className, bool isTransparent = false);
/**
- * @copydoc Dali::Window::ShowIndicator()
- */
- void ShowIndicator( Dali::Window::IndicatorVisibleMode visibleMode );
-
- /**
- * @copydoc Dali::Window::SetIndicatorBgOpacity()
- */
- void SetIndicatorBgOpacity( Dali::Window::IndicatorBgOpacity opacity );
-
- /**
- * @copydoc Dali::Window::RotateIndicator()
+ * @brief Create a new Window. This should only be called once by the Application class
+ * @param[in] surface The surface used to render on.
+ * @param[in] positionSize The position and size of the window
+ * @param[in] name The window title
+ * @param[in] className The window class name
+ * @param[in] isTransparent Whether window is transparent
+ * @return A newly allocated Window
*/
- void RotateIndicator( Dali::Window::WindowOrientation orientation );
+ static Window* New(Any surface, const PositionSize& positionSize, const std::string& name, const std::string& className, bool isTransparent = false);
/**
* @copydoc Dali::Window::SetClass()
void RemoveAvailableOrientation(Dali::Window::WindowOrientation orientation);
/**
- * @copydoc Dali::Window::SetAvailableOrientations()
- */
- void SetAvailableOrientations(const std::vector<Dali::Window::WindowOrientation>& orientations);
-
- /**
- * @copydoc Dali::Window::GetAvailableOrientations()
- */
- const std::vector<Dali::Window::WindowOrientation>& GetAvailableOrientations();
-
- /**
* @copydoc Dali::Window::SetPreferredOrientation()
*/
void SetPreferredOrientation(Dali::Window::WindowOrientation orientation);
*/
Dali::Window GetParent();
+ /**
+ * @copydoc Dali::DevelWindow::GetCurrentOrientation()
+ */
+ Dali::Window::WindowOrientation GetCurrentOrientation() const;
+
+ /**
+ * @copydoc Dali::DevelWindow::SetAvailableOrientations()
+ */
+ void SetAvailableOrientations( const Dali::Vector<Dali::Window::WindowOrientation>& orientations );
+
+ /**
+ * @copydoc Dali::DevelWindow::SetDamagedAreas()
+ */
+ void SetDamagedAreas(std::vector<Dali::Rect<int>>& areas);
+
public: // Dali::Internal::Adaptor::SceneHolder
/**
*/
bool IsVisible() const override;
+ /**
+ * @copydoc Dali::DevelWindow::GetNativeId()
+ */
+ int32_t GetNativeId() const;
+
private:
/**
+ * @brief Enumeration for orietation mode.
+ * The Orientation Mode is related to screen size.
+ * If screen width is longer than height, the Orientation Mode will have LANDSCAPE.
+ * Otherwise screen width is shorter than height or same, the Orientation Mode will have PORTRAIT.
+ */
+ enum class OrientationMode
+ {
+ PORTRAIT = 0,
+ LANDSCAPE
+ };
+
+ /**
* Private constructor.
* @sa Window::New()
*/
/**
* Second stage initialization
*/
- void Initialize(const PositionSize& positionSize, const std::string& name, const std::string& className);
+ void Initialize(Any surface, const PositionSize& positionSize, const std::string& name, const std::string& className);
/**
* Called when the window becomes iconified or deiconified.
*/
void OnTransitionEffectEvent( DevelWindow::EffectState state, DevelWindow::EffectType type );
+ /**
+ * @brief Called when window receives a keyboard repeat event.
+ */
+ void OnKeyboardRepeatSettingsChanged();
+
+ /**
+ * @brief Set available orientation to window base.
+ */
+ void SetAvailableAnlges( const std::vector< int >& angles );
+
+ /**
+ * @brief Convert from window orientation to angle using OrientationMode.
+ */
+ int ConvertToAngle( Dali::Window::WindowOrientation orientation );
+
+ /**
+ * @brief Convert from angle to window orientation using OrientationMode.
+ */
+ Dali::Window::WindowOrientation ConvertToOrientation( int angle ) const;
+
+ /**
+ * @brief Check available window orientation for Available orientation.
+ */
+ bool IsOrientationAvailable( Dali::Window::WindowOrientation orientation ) const;
+
private: // Dali::Internal::Adaptor::SceneHolder
/**
public: // Signals
/**
- * The user should connect to this signal to get a timing when indicator was shown / hidden.
- */
- IndicatorSignalType& IndicatorVisibilityChangedSignal() { return mIndicatorVisibilityChangedSignal; }
-
- /**
- * @copydoc Dali::Window::FocusChangedSignal()
- */
- FocusSignalType& FocusChangedSignal() { return mFocusChangedSignal; }
-
- /**
- * @copydoc Dali::Window::WindowFocusChangedSignal()
+ * @copydoc Dali::Window::FocusChangeSignal()
*/
FocusChangeSignalType& FocusChangeSignal() { return mFocusChangeSignal; }
- /**
- * @copydoc Dali::Window::ResizedSignal()
- */
- ResizedSignalType& ResizedSignal() { return mResizedSignal; }
+
/**
* @copydoc Dali::Window::ResizedSignal()
*/
SignalType& DeleteRequestSignal() { return mDeleteRequestSignal; }
/**
+ * @copydoc Dali::DevelWindow::VisibilityChangedSignal()
+ */
+ VisibilityChangedSignalType& VisibilityChangedSignal() { return mVisibilityChangedSignal; }
+
+ /**
* @copydoc Dali::Window::SignalEventProcessingFinished()
*/
Dali::DevelWindow::EventProcessingFinishedSignalType& EventProcessingFinishedSignal() { return mScene.EventProcessingFinishedSignal(); }
*/
TransitionEffectEventSignalType& TransitionEffectEventSignal() { return mTransitionEffectEventSignal; }
+ /**
+ * @copydoc Dali::DevelWindow::KeyboardRepeatSettingsChangedSignal()
+ */
+ KeyboardRepeatSettingsChangedSignalType& KeyboardRepeatSettingsChangedSignal() { return mKeyboardRepeatSettingsChangedSignal; }
+
private:
WindowRenderSurface* mWindowSurface; ///< The window rendering surface
Dali::Window::Type mType;
Dali::Window mParentWindow;
- OrientationPtr mOrientation;
- std::vector<Dali::Window::WindowOrientation> mAvailableOrientations;
- Dali::Window::WindowOrientation mPreferredOrientation;
+ OrientationPtr mOrientation;
+ std::vector< int > mAvailableAngles;
+ int mPreferredAngle;
int mRotationAngle; ///< The angle of the rotation
int mWindowWidth; ///< The width of the window
EventHandlerPtr mEventHandler; ///< The window events handler
+ OrientationMode mOrientationMode;
+
+ int mNativeWindowId; ///< The Native Window Id
+
// Signals
- IndicatorSignalType mIndicatorVisibilityChangedSignal;
- FocusSignalType mFocusChangedSignal;
- ResizedSignalType mResizedSignal;
- SignalType mDeleteRequestSignal;
- FocusChangeSignalType mFocusChangeSignal;
- ResizeSignalType mResizeSignal;
- TransitionEffectEventSignalType mTransitionEffectEventSignal;
+ SignalType mDeleteRequestSignal;
+ FocusChangeSignalType mFocusChangeSignal;
+ ResizeSignalType mResizeSignal;
+ VisibilityChangedSignalType mVisibilityChangedSignal;
+ TransitionEffectEventSignalType mTransitionEffectEventSignal;
+ KeyboardRepeatSettingsChangedSignalType mKeyboardRepeatSettingsChangedSignal;
};
} // namespace Adaptor