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
typedef struct mm_display {
mm_display_type_e type;
+ /* Evas */
+ Evas_Object *eo;
+
/* wayland */
int parent_id; /* parent id of window for wayland 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);
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);
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);
LOGD("enter - type %d", type);
- dp_handle->type = type;
-
obj = (Evas_Object *)display;
object_type = evas_object_type_get(obj);
if (!object_type) {
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)
{
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);
}
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);
}