X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fwindow-system%2Ftizen-wayland%2Fecore-wl2%2Fwindow-base-ecore-wl2.cpp;h=84e9381fd1aa9f58a152efc81346cbb8efcf227f;hb=b901daa6ea05561c291aab6ab2e8a5fe6cfd2f8d;hp=d09451ca14bc05365ec3b5f162e61a9d31a8f3f9;hpb=0417825abc5f142eb99a31a3bd26af545aba02f5;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp b/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp index d09451c..84e9381 100644 --- a/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp +++ b/dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp @@ -31,11 +31,16 @@ // EXTERNAL_HEADERS #include #include +#include #include #include #include + +#if defined(VCONF_ENABLED) #include #include +#endif + #include namespace Dali @@ -50,10 +55,31 @@ namespace Debug::Filter* gWindowBaseLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_WINDOW_BASE"); #endif -const uint32_t MAX_TIZEN_CLIENT_VERSION = 7; -const unsigned int PRIMARY_TOUCH_BUTTON_ID = 1; +DALI_INIT_TRACE_FILTER(gTraceFilter, DALI_TRACE_PERFORMANCE_MARKER, false); + +/** + * @brief Enumeration of location for window resized by display server. + */ +enum class ResizeLocation +{ + INVALID = 0, ///< Invalid value + TOP_LEFT = 5, ///< Start resizing window to the top-left edge. + LEFT = 4, ///< Start resizing window to the left side. + BOTTOM_LEFT = 6, ///< Start resizing window to the bottom-left edge. + BOTTOM = 2, ///< Start resizing window to the bottom side. + BOTTOM_RIGHT = 10, ///< Start resizing window to the bottom-right edge. + RIGHT = 8, ///< Start resizing window to the right side. + TOP_RIGHT = 9, ///< Start resizing window to the top-right edge. + TOP = 1 ///< Start resizing window to the top side. +}; + +const uint32_t MAX_TIZEN_CLIENT_VERSION = 7; +const unsigned int PRIMARY_TOUCH_BUTTON_ID = 1; +const ResizeLocation RESIZE_LOCATIONS[] = {ResizeLocation::TOP_LEFT, ResizeLocation::LEFT, ResizeLocation::BOTTOM_LEFT, ResizeLocation::BOTTOM, ResizeLocation::BOTTOM_RIGHT, ResizeLocation::RIGHT, ResizeLocation::TOP_RIGHT, ResizeLocation::TOP, ResizeLocation::INVALID}; +#if defined(VCONF_ENABLED) const char* DALI_VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME = "db/setting/accessibility/font_name"; // It will be update at vconf-key.h and replaced. +#endif struct KeyCodeMap { @@ -221,6 +247,69 @@ void FindKeyCode(struct xkb_keymap* keyMap, xkb_keycode_t key, void* data) } } +/** + * Return the recalculated window resizing location according to the current orientation. + */ +ResizeLocation RecalculateLocationToCurrentOrientation(WindowResizeDirection direction, int windowRotationAngle) +{ + int index = 8; + switch(direction) + { + case WindowResizeDirection::TOP_LEFT: + { + index = 0; + break; + } + case WindowResizeDirection::LEFT: + { + index = 1; + break; + } + case WindowResizeDirection::BOTTOM_LEFT: + { + index = 2; + break; + } + case WindowResizeDirection::BOTTOM: + { + index = 3; + break; + } + case WindowResizeDirection::BOTTOM_RIGHT: + { + index = 4; + break; + } + case WindowResizeDirection::RIGHT: + { + index = 5; + break; + } + case WindowResizeDirection::TOP_RIGHT: + { + index = 6; + break; + } + case WindowResizeDirection::TOP: + { + index = 7; + break; + } + default: + { + index = 8; + break; + } + } + + if(index != 8 && windowRotationAngle != 0) + { + index = (index + (windowRotationAngle / 90) * 2) % 8; + } + + return RESIZE_LOCATIONS[index]; +} + ///////////////////////////////////////////////////////////////////////////////////////////////// // Window Callbacks ///////////////////////////////////////////////////////////////////////////////////////////////// @@ -530,6 +619,7 @@ static Eina_Bool EcoreEventSeatKeymapChanged(void* data, int type, void* event) // Font Callbacks ///////////////////////////////////////////////////////////////////////////////////////////////// +#if defined(VCONF_ENABLED) /** * Called when a font name is changed. */ @@ -553,6 +643,7 @@ static void VconfNotifyFontSizeChanged(keynode_t* node, void* data) windowBase->OnFontSizeChanged(); } } +#endif ///////////////////////////////////////////////////////////////////////////////////////////////// // Window Redraw Request Event Callbacks @@ -707,8 +798,6 @@ WindowBaseEcoreWl2::WindowBaseEcoreWl2(Dali::PositionSize positionSize, Any surf mWindowRotationAngle(0), mScreenRotationAngle(0), mSupportedPreProtation(0), - mScreenWidth(0), - mScreenHeight(0), mNotificationChangeState(0), mScreenOffModeChangeState(0), mBrightnessChangeState(0), @@ -725,8 +814,10 @@ WindowBaseEcoreWl2::WindowBaseEcoreWl2(Dali::PositionSize positionSize, Any surf WindowBaseEcoreWl2::~WindowBaseEcoreWl2() { +#if defined(VCONF_ENABLED) vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, VconfNotifyFontSizeChanged); vconf_ignore_key_changed(DALI_VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME, VconfNotifyFontNameChanged); +#endif for(Dali::Vector::Iterator iter = mEcoreEventHandler.Begin(), endIter = mEcoreEventHandler.End(); iter != endIter; ++iter) { @@ -823,9 +914,11 @@ void WindowBaseEcoreWl2::Initialize(PositionSize positionSize, Any surface, bool // Register Window auxiliary event mEcoreEventHandler.PushBack(ecore_event_handler_add(ECORE_WL2_EVENT_AUX_MESSAGE, EcoreEventWindowAuxiliaryMessage, this)); +#if defined(VCONF_ENABLED) // Register Vconf notify - font name and size - vconf_notify_key_changed(DALI_VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME, VconfNotifyFontNameChanged, this); - vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, VconfNotifyFontSizeChanged, this); + vconf_notify_key_changed_for_ui_thread(DALI_VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME, VconfNotifyFontNameChanged, this); + vconf_notify_key_changed_for_ui_thread(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, VconfNotifyFontSizeChanged, this); +#endif Ecore_Wl2_Display* display = ecore_wl2_connected_display_get(NULL); mDisplay = ecore_wl2_display_get(display); @@ -999,8 +1092,8 @@ void WindowBaseEcoreWl2::OnConfiguration(void* data, int type, void* event) // Note: To comply with the wayland protocol, Dali should make an ack_configure // by calling ecore_wl2_window_commit - int tempWidth = static_cast(ev->w); - int tempHeight = static_cast(ev->h); + int tempWidth = ev->w; + int tempHeight = ev->h; // Initialize with previous size for skip resize when new size is 0. // When window is just moved or window is resized by client application, @@ -1030,11 +1123,14 @@ void WindowBaseEcoreWl2::OnConfiguration(void* data, int type, void* event) mWindowPositionSize.height = newHeight; DALI_LOG_RELEASE_INFO("Update position & resize signal by server, current angle [%d] x[%d] y[%d] w[%d] h[%d]\n", mWindowRotationAngle, mWindowPositionSize.x, mWindowPositionSize.y, mWindowPositionSize.width, mWindowPositionSize.height); + ecore_wl2_window_geometry_set(mEcoreWindow, mWindowPositionSize.x, mWindowPositionSize.y, mWindowPositionSize.width, mWindowPositionSize.height); + Dali::PositionSize newPositionSize = RecalculatePositionSizeToCurrentOrientation(mWindowPositionSize); - DALI_LOG_RELEASE_INFO("emit signal to update window's position and size, x[%d] y[%d] w[%d] h[%d]\n", newPositionSize.x, newPositionSize.y, newPositionSize.width, newPositionSize.height); mUpdatePositionSizeSignal.Emit(newPositionSize); } + mMaximizeChangedSignal.Emit(static_cast(ev->states & ECORE_WL2_WINDOW_STATE_MAXIMIZED)); + ecore_wl2_window_commit(mEcoreWindow, EINA_FALSE); } } @@ -1182,13 +1278,13 @@ void WindowBaseEcoreWl2::OnKeyDown(void* data, int type, void* event) if(keyEvent->window == static_cast(ecore_wl2_window_id_get(mEcoreWindow))) { - DALI_LOG_INFO(gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreWl2::OnKeyDown\n"); - std::string keyName(keyEvent->keyname); std::string logicalKey(""); std::string keyString(""); std::string compose(""); + DALI_TRACE_SCOPE(gTraceFilter, "DALI_ON_KEY_DOWN"); + // Ensure key compose string is not NULL as keys like SHIFT or arrow have a null string. if(keyEvent->compose) { @@ -1244,8 +1340,6 @@ void WindowBaseEcoreWl2::OnKeyUp(void* data, int type, void* event) if(keyEvent->window == static_cast(ecore_wl2_window_id_get(mEcoreWindow))) { - DALI_LOG_INFO(gWindowBaseLogFilter, Debug::General, "WindowBaseEcoreWl2::OnKeyUp\n"); - #if defined(ECORE_VERSION_MAJOR) && (ECORE_VERSION_MAJOR >= 1) && defined(ECORE_VERSION_MINOR) && (ECORE_VERSION_MINOR >= 23) // Cancel processing flag is sent because this key event will combine with the previous key. So, the event should not actually perform anything. if(keyEvent->event_flags & ECORE_EVENT_FLAG_CANCEL) @@ -1260,6 +1354,8 @@ void WindowBaseEcoreWl2::OnKeyUp(void* data, int type, void* event) std::string keyString(""); std::string compose(""); + DALI_TRACE_SCOPE(gTraceFilter, "DALI_ON_KEY_UP"); + // Ensure key compose string is not NULL as keys like SHIFT or arrow have a null string. if(keyEvent->compose) { @@ -1576,6 +1672,7 @@ void WindowBaseEcoreWl2::SetEglWindowBufferTransform(int angle) } } + DALI_LOG_RELEASE_INFO("wl_egl_window_tizen_set_buffer_transform() with buffer Transform [%d]\n", bufferTransform); wl_egl_window_tizen_set_buffer_transform(mEglWindow, bufferTransform); } @@ -1612,11 +1709,13 @@ void WindowBaseEcoreWl2::SetEglWindowTransform(int angle) } } + DALI_LOG_RELEASE_INFO("wl_egl_window_tizen_set_window_transform() with window Transform [%d]\n", windowTransform); wl_egl_window_tizen_set_window_transform(mEglWindow, windowTransform); } void WindowBaseEcoreWl2::ResizeEglWindow(PositionSize positionSize) { + DALI_LOG_RELEASE_INFO("wl_egl_window_resize(), (%d, %d) [%d x %d]\n", positionSize.x, positionSize.y, positionSize.width, positionSize.height); wl_egl_window_resize(mEglWindow, positionSize.width, positionSize.height, positionSize.x, positionSize.y); // Note: Both "Resize" and "MoveResize" cases can reach here, but only "MoveResize" needs to submit serial number @@ -1643,24 +1742,26 @@ bool WindowBaseEcoreWl2::IsEglWindowRotationSupported() PositionSize WindowBaseEcoreWl2::RecalculatePositionSizeToSystem(PositionSize positionSize) { PositionSize newPositionSize; + int32_t screenWidth, screenHeight; + WindowSystem::GetScreenSize(screenWidth, screenHeight); if(mWindowRotationAngle == 90) { newPositionSize.x = positionSize.y; - newPositionSize.y = mScreenHeight - (positionSize.x + positionSize.width); + newPositionSize.y = screenHeight - (positionSize.x + positionSize.width); newPositionSize.width = positionSize.height; newPositionSize.height = positionSize.width; } else if(mWindowRotationAngle == 180) { - newPositionSize.x = mScreenWidth - (positionSize.x + positionSize.width); - newPositionSize.y = mScreenHeight - (positionSize.y + positionSize.height); + newPositionSize.x = screenWidth - (positionSize.x + positionSize.width); + newPositionSize.y = screenHeight - (positionSize.y + positionSize.height); newPositionSize.width = positionSize.width; newPositionSize.height = positionSize.height; } else if(mWindowRotationAngle == 270) { - newPositionSize.x = mScreenWidth - (positionSize.y + positionSize.height); + newPositionSize.x = screenWidth - (positionSize.y + positionSize.height); newPositionSize.y = positionSize.x; newPositionSize.width = positionSize.height; newPositionSize.height = positionSize.width; @@ -1673,34 +1774,33 @@ PositionSize WindowBaseEcoreWl2::RecalculatePositionSizeToSystem(PositionSize po newPositionSize.height = positionSize.height; } - DALI_LOG_RELEASE_INFO("input coord x[%d], y[%d], w{%d], h[%d], screen w[%d], h[%d]\n", positionSize.x, positionSize.y, positionSize.width, positionSize.height, mScreenWidth, mScreenHeight); - DALI_LOG_RELEASE_INFO("recalc coord x[%d], y[%d], w{%d], h[%d]\n", newPositionSize.x, newPositionSize.y, newPositionSize.width, newPositionSize.height); - return newPositionSize; } PositionSize WindowBaseEcoreWl2::RecalculatePositionSizeToCurrentOrientation(PositionSize positionSize) { PositionSize newPositionSize; + int32_t screenWidth, screenHeight; + WindowSystem::GetScreenSize(screenWidth, screenHeight); if(mWindowRotationAngle == 90) { - newPositionSize.x = mScreenHeight - (positionSize.y + positionSize.height); + newPositionSize.x = screenHeight - (positionSize.y + positionSize.height); newPositionSize.y = positionSize.x; newPositionSize.width = positionSize.height; newPositionSize.height = positionSize.width; } else if(mWindowRotationAngle == 180) { - newPositionSize.x = mScreenWidth - (positionSize.x + positionSize.width); - newPositionSize.y = mScreenHeight - (positionSize.y + positionSize.height); + newPositionSize.x = screenWidth - (positionSize.x + positionSize.width); + newPositionSize.y = screenHeight - (positionSize.y + positionSize.height); newPositionSize.width = positionSize.width; newPositionSize.height = positionSize.height; } else if(mWindowRotationAngle == 270) { newPositionSize.x = positionSize.y; - newPositionSize.y = mScreenWidth - (positionSize.x + positionSize.width); + newPositionSize.y = screenWidth - (positionSize.x + positionSize.width); newPositionSize.width = positionSize.height; newPositionSize.height = positionSize.width; } @@ -1712,9 +1812,6 @@ PositionSize WindowBaseEcoreWl2::RecalculatePositionSizeToCurrentOrientation(Pos newPositionSize.height = positionSize.height; } - DALI_LOG_RELEASE_INFO("input coord x[%d], y[%d], w{%d], h[%d], screen w[%d], h[%d]\n", positionSize.x, positionSize.y, positionSize.width, positionSize.height, mScreenWidth, mScreenHeight); - DALI_LOG_RELEASE_INFO("recalc by current orientation coord x[%d], y[%d], w{%d], h[%d]\n", newPositionSize.x, newPositionSize.y, newPositionSize.width, newPositionSize.height); - return newPositionSize; } @@ -1777,6 +1874,12 @@ bool WindowBaseEcoreWl2::IsMaximized() const return ecore_wl2_window_maximized_get(mEcoreWindow); } +void WindowBaseEcoreWl2::SetMaximumSize(Dali::Window::WindowSize size) +{ + DALI_LOG_RELEASE_INFO("ecore_wl2_window_maximum_size_set, width: %d, height: %d\n", size.GetWidth(), size.GetHeight()); + ecore_wl2_window_maximum_size_set(mEcoreWindow, size.GetWidth(), size.GetHeight()); +} + void WindowBaseEcoreWl2::Minimize(bool minimize) { ecore_wl2_window_iconified_set(mEcoreWindow, minimize); @@ -1787,6 +1890,12 @@ bool WindowBaseEcoreWl2::IsMinimized() const return ecore_wl2_window_iconified_get(mEcoreWindow); } +void WindowBaseEcoreWl2::SetMimimumSize(Dali::Window::WindowSize size) +{ + DALI_LOG_RELEASE_INFO("ecore_wl2_window_minimum_size_set, width: %d, height: %d\n", size.GetWidth(), size.GetHeight()); + ecore_wl2_window_minimum_size_set(mEcoreWindow, size.GetWidth(), size.GetHeight()); +} + void WindowBaseEcoreWl2::SetAvailableAnlges(const std::vector& angles) { int rotations[4] = {0}; @@ -1990,6 +2099,11 @@ void WindowBaseEcoreWl2::SetType(Dali::WindowType type) windowType = ECORE_WL2_WINDOW_TYPE_NONE; break; } + case Dali::WindowType::DESKTOP: + { + windowType = ECORE_WL2_WINDOW_TYPE_DESKTOP; + break; + } default: { windowType = ECORE_WL2_WINDOW_TYPE_TOPLEVEL; @@ -2511,9 +2625,9 @@ void WindowBaseEcoreWl2::GetDpi(unsigned int& dpiHorizontal, unsigned int& dpiVe dpiVertical = int(yres + 0.5f); } -int WindowBaseEcoreWl2::GetOrientation() const +int WindowBaseEcoreWl2::GetWindowRotationAngle() const { - int orientation = (mScreenRotationAngle + mWindowRotationAngle) % 360; + int orientation = mWindowRotationAngle; if(mSupportedPreProtation) { orientation = 0; @@ -2523,8 +2637,12 @@ int WindowBaseEcoreWl2::GetOrientation() const int WindowBaseEcoreWl2::GetScreenRotationAngle() { - int transform = 0; - + if(mSupportedPreProtation) + { + DALI_LOG_RELEASE_INFO("Support PreRotation and return 0\n"); + return 0; + } + int transform; if(ecore_wl2_window_ignore_output_transform_get(mEcoreWindow)) { transform = 0; @@ -2572,9 +2690,6 @@ void WindowBaseEcoreWl2::CreateWindow(PositionSize positionSize) // Set default type ecore_wl2_window_type_set(mEcoreWindow, ECORE_WL2_WINDOW_TYPE_TOPLEVEL); - - // Get Screen width, height - ecore_wl2_display_screen_size_get(display, &mScreenWidth, &mScreenHeight); } void WindowBaseEcoreWl2::SetParent(WindowBase* parentWinBase, bool belowParent) @@ -2728,58 +2843,10 @@ void WindowBaseEcoreWl2::RequestResizeToServer(WindowResizeDirection direction) return; } - int location = 0; - switch(direction) - { - case WindowResizeDirection::TOP_LEFT: - { - location = 5; - break; - } - case WindowResizeDirection::TOP: - { - location = 1; - break; - } - case WindowResizeDirection::TOP_RIGHT: - { - location = 9; - break; - } - case WindowResizeDirection::LEFT: - { - location = 4; - break; - } - case WindowResizeDirection::RIGHT: - { - location = 8; - break; - } - case WindowResizeDirection::BOTTOM_LEFT: - { - location = 6; - break; - } - case WindowResizeDirection::BOTTOM: - { - location = 2; - break; - } - case WindowResizeDirection::BOTTOM_RIGHT: - { - location = 10; - break; - } - default: - { - location = 0; - break; - } - } + ResizeLocation location = RecalculateLocationToCurrentOrientation(direction, mWindowRotationAngle); - ecore_wl2_window_resize(mEcoreWindow, input, location); - DALI_LOG_RELEASE_INFO("WindowBaseEcoreWl2::RequestResizeToServer, starts the window[%p] is resized by server, mode:%d\n", mEcoreWindow, location); + ecore_wl2_window_resize(mEcoreWindow, input, static_cast(location)); + DALI_LOG_RELEASE_INFO("WindowBaseEcoreWl2::RequestResizeToServer, starts the window[%p] is resized by server, direction:%d oriention:%d mode:%d\n", mEcoreWindow, direction, mWindowRotationAngle, location); } void WindowBaseEcoreWl2::EnableFloatingMode(bool enable)