Add new function to get window rect info 54/216854/2 accepted/tizen/unified/20191112.125138 submit/tizen/20191112.051613
authorJeongmo Yang <jm80.yang@samsung.com>
Mon, 4 Nov 2019 04:54:47 +0000 (13:54 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Fri, 8 Nov 2019 09:40:11 +0000 (18:40 +0900)
- mm_display_get_window_rect()
- mm_display_interface_get_window_rect()

[Version] 0.0.5
[Profile] Common
[Issue Type] Update

Change-Id: Id9cb27f41ac635959b9248f08f3d829d7afc3f73
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/libmm-display.spec
src/include/mm_display.h
src/include/mm_display_interface.h
src/include/mm_display_interface_private.h
src/mm_display.c
src/mm_display_interface.c

index 925602ce8d5a13df9964e947ea4efb530adb3a9a..2fa8d2086c84187c9859115e38f868c7f22efdd5 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-display
 Summary:    Multimedia framework display library
-Version:    0.0.4
+Version:    0.0.5
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 9c6bbb773cfb28603eb539ac9e6986c7c03c87ca..75a0d1c9ae7c847c02077487f04a31c50d6bc2e2 100644 (file)
@@ -26,6 +26,9 @@ extern "C" {
 typedef struct mm_display {
        mm_display_type_e type;
 
+       /* Evas */
+       Evas_Object *eo;
+
        /* wayland */
        int parent_id;                                          /* parent id of window for wayland display */
 
@@ -35,6 +38,7 @@ typedef struct mm_display {
        GMutex evas_mutex;
 #endif /* TIZEN_FEATURE_EVAS_RENDERER */
 } mm_display_t;
+
 typedef void *mm_display_h;
 
 int mm_display_init(mm_display_h *handle);
index 71bc62cc7cbf66078097ee7afb0a6eab1d66ff75..5e3571b1f7655144a8cf0d84124cddb0c9a46b8d 100644 (file)
@@ -37,6 +37,7 @@ typedef void (*mm_display_evas_rendered_cb)(media_packet_h packet, void *user_da
 int mm_display_interface_init(mm_display_interface_h *handle);
 int mm_display_interface_deinit(mm_display_interface_h handle);
 int mm_display_interface_set_display(mm_display_interface_h handle, mm_display_type_e type, void *display, int *parent_id);
+int mm_display_interface_get_window_rect(mm_display_interface_h handle, MMRectType *window_rect);
 int mm_display_interface_evas_set_rotation(mm_display_interface_h handle, int rotation);
 int mm_display_interface_evas_get_rotation(mm_display_interface_h handle, int *rotation);
 int mm_display_interface_evas_set_visible(mm_display_interface_h handle, bool visible);
index 732078097a655e32cc9a7ae07679a8aec52b9d1f..e1c0902b8d7ba058f00499ee5ce29b69cf806f4d 100644 (file)
@@ -34,6 +34,7 @@ typedef struct mm_display_interface {
        int (*init)(void **);
        int (*deinit)(void *);
        int (*set_display)(void *, int, void *, int *);
+       int (*get_window_rect)(void *, MMRectType *);
        int (*evas_set_rotation)(void *, int);
        int (*evas_get_rotation)(void *, int *);
        int (*evas_set_visible)(void *, bool);
index a2121bd9e8ba314487080b508b8023e080f34885..ee47d6803e09e081c6fa5a2e27229e95693a618e 100644 (file)
@@ -285,8 +285,6 @@ int mm_display_set_display(mm_display_h handle, mm_display_type_e type, void *di
 
        LOGD("enter - type %d", type);
 
-       dp_handle->type = type;
-
        obj = (Evas_Object *)display;
        object_type = evas_object_type_get(obj);
        if (!object_type) {
@@ -340,10 +338,61 @@ int mm_display_set_display(mm_display_h handle, mm_display_type_e type, void *di
                ret = MM_ERROR_INVALID_ARGUMENT;
        }
 
+       if (ret == MM_ERROR_NONE) {
+               dp_handle->type = type;
+               dp_handle->eo = obj;
+       }
+
        return ret;
 }
 
 
+int mm_display_get_window_rect(mm_display_h handle, MMRectType *window_rect)
+{
+       mm_display_t *dp_handle = (mm_display_t *)handle;
+       Ecore_Evas *ee = NULL;
+       int rotation = 0;
+       int tmp = 0;
+
+       if (!dp_handle || !window_rect) {
+               LOGE("NULL param %p %p", dp_handle, window_rect);
+               return MM_ERROR_INVALID_ARGUMENT;
+       }
+
+       if (dp_handle->type != MM_DISPLAY_TYPE_OVERLAY) {
+               LOGE("not overlay type : %d", dp_handle->type);
+               return MM_ERROR_COMMON_INTERNAL;
+       }
+
+       LOGD("get window rect for parent id : %d, eo %p",
+               dp_handle->parent_id, dp_handle->eo);
+
+       evas_object_geometry_get(dp_handle->eo, &window_rect->x, &window_rect->y,
+               &window_rect->width, &window_rect->height);
+
+       ee = ecore_evas_ecore_evas_get(evas_object_evas_get(dp_handle->eo));
+       if (ee) {
+               rotation = ecore_evas_rotation_get(ee);
+               if (rotation == 90 || rotation == 270) {
+                       LOGD("swap width and height %d, %d",
+                               window_rect->width, window_rect->height);
+
+                       tmp = window_rect->width;
+                       window_rect->width = window_rect->height;
+                       window_rect->height = tmp;
+               }
+       } else {
+               LOGW("failed to get ecore_evas.. skip rotation check");
+       }
+
+       LOGD("window rect : %d,%d,%dx%d",
+               window_rect->x, window_rect->y,
+               window_rect->width, window_rect->height);
+
+       return MM_ERROR_NONE;
+}
+
+
 #ifdef TIZEN_FEATURE_EVAS_RENDERER
 int mm_display_evas_set_rotation(mm_display_h handle, int rotation)
 {
index 5f69fdc07e7799ae36d2bb25d72acce7fcb815c0..3f4c9f663655466bd62bf17437ff85f43dbe09e3 100644 (file)
@@ -77,6 +77,7 @@ int mm_display_interface_init(mm_display_interface_h *handle)
        sym_ret = g_module_symbol(module, "mm_display_init", (gpointer *)&new_interface->init);
        sym_ret &= g_module_symbol(module, "mm_display_deinit", (gpointer *)&new_interface->deinit);
        sym_ret &= g_module_symbol(module, "mm_display_set_display", (gpointer *)&new_interface->set_display);
+       sym_ret &= g_module_symbol(module, "mm_display_get_window_rect", (gpointer *)&new_interface->get_window_rect);
 #ifdef TIZEN_FEATURE_EVAS_RENDERER
        sym_ret &= g_module_symbol(module, "mm_display_evas_set_rotation", (gpointer *)&new_interface->evas_set_rotation);
        sym_ret &= g_module_symbol(module, "mm_display_evas_get_rotation", (gpointer *)&new_interface->evas_get_rotation);
@@ -171,8 +172,19 @@ int mm_display_interface_set_display(mm_display_interface_h handle, mm_display_t
        }
 
        return interface->set_display(interface->dp_handle, type, display, parent_id);
+}
 
-       return MM_ERROR_NONE;
+
+int mm_display_interface_get_window_rect(mm_display_interface_h handle, MMRectType *window_rect)
+{
+       DECLARE_CHECK_INTERFACE_HANDLE(handle);
+
+       if (!interface->get_window_rect) {
+               LOGE("NULL function pointer");
+               return MM_ERROR_UNKNOWN;
+       }
+
+       return interface->get_window_rect(interface->dp_handle, window_rect);
 }