From 3484c39c5cca03ecbfcd4ecd9a495c4e288ac779 Mon Sep 17 00:00:00 2001 From: "sangwan.kwon" Date: Mon, 20 Jun 2016 17:25:24 +0900 Subject: [PATCH] Enable popup to rotate * If window manger support rotation, enable popup to rotate Change-Id: I37d0baa20c1d623970949bd0685b3dd8923d1804 Signed-off-by: sangwan.kwon --- src/framework/ui/popup/popup.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/framework/ui/popup/popup.h | 2 ++ 2 files changed, 41 insertions(+) diff --git a/src/framework/ui/popup/popup.cpp b/src/framework/ui/popup/popup.cpp index 736c327..0f78865 100644 --- a/src/framework/ui/popup/popup.cpp +++ b/src/framework/ui/popup/popup.cpp @@ -50,6 +50,7 @@ Popup::Popup(int buttonN) elm_win_screen_size_get(m_win, NULL, NULL, &m_winW, &m_winH); evas_object_size_hint_max_set(m_win, m_winW, m_winH); evas_object_size_hint_min_set(m_win, m_winW, m_winH / 4); + setRotationToWin(m_win); // Set popup properties. m_popup = elm_popup_add(m_win); @@ -173,6 +174,20 @@ void Popup::setDefaultProperties(Evas_Object *obj) noexcept evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, 0.5); } +void Popup::setRotationToWin(Evas_Object *win) noexcept +{ + if (!elm_win_wm_rotation_supported_get(win)) { + DEBUG("Window manager doesn't support rotation."); + return; + } + + int rots[4] = { 0, 90, 180, 270 }; + elm_win_wm_rotation_available_rotations_set(win, + reinterpret_cast(&rots), 4); + evas_object_smart_callback_add(win, "rotation,changed", + rotationChangedCb, m_popup); +} + void Popup::setText(Evas_Object *obj, const std::string &text) noexcept { // Eable text line-break automatically. @@ -195,6 +210,30 @@ void Popup::callbackRegister(Evas_Object *obj, const std::string &url) obj, "anchor,clicked", hypertextClickedCb, &url); } +void Popup::rotationChangedCb(void *data, Evas_Object *, void *) +{ + DEBUG("Window rotation change event caught."); + auto popup = reinterpret_cast(data); + auto win = elm_object_top_widget_get(popup); + auto pos = elm_win_rotation_get(win); + Evas_Coord w, h; + elm_win_screen_size_get(win, NULL, NULL, &w, &h); + + switch (pos) { + case 0: + case 180: + evas_object_move(popup, (w / 2), h); + return; + case 90: + case 270: + evas_object_move(popup, (h / 2), w); + return; + default: + DEBUG("Invalid pos value : " << pos); + return; + } +} + void Popup::hypertextClickedCb(void *data, Evas_Object *, void *) { DEBUG("Launch browser for detailed url."); diff --git a/src/framework/ui/popup/popup.h b/src/framework/ui/popup/popup.h index 350ee68..e977982 100644 --- a/src/framework/ui/popup/popup.h +++ b/src/framework/ui/popup/popup.h @@ -77,6 +77,7 @@ public: void callbackRegister(Evas_Object *obj, const std::string &url); static void btnClickedCb(void *data, Evas_Object *, void *); static void hypertextClickedCb(void *data, Evas_Object *, void *); + static void rotationChangedCb(void *data, Evas_Object *, void *); std::vector m_buttons; Evas_Object *m_hypertext; @@ -84,6 +85,7 @@ public: private: void setDefaultProperties(Evas_Object *obj) noexcept; + void setRotationToWin(Evas_Object *obj) noexcept; Evas_Object *m_win; Evas_Object *m_popup; -- 2.7.4