surface: Remove unnecessary object, pepper_efl_surface_t. 48/68948/2
authorSeunghun Lee <shiin.lee@samsung.com>
Tue, 10 May 2016 09:52:03 +0000 (18:52 +0900)
committerSeunghun Lee <shiin.lee@samsung.com>
Wed, 11 May 2016 02:37:06 +0000 (11:37 +0900)
Change-Id: Id57e2663b6ba503f2b8fd7a6da02daa39b5cc3b8

src/lib/Makefile.am
src/lib/object.c
src/lib/object.h
src/lib/output.c
src/lib/private.h
src/lib/surface.c [deleted file]
src/lib/surface.h [deleted file]

index 6552528839b0159a156f5cb83d284efb5e20e0f5..f6392ee2ae94dc915dc58d285272dbe6fa8a9b0a 100644 (file)
@@ -14,7 +14,6 @@ libpepper_efl_la_SOURCES = \
 compositor.c           \
 log.c                  \
 output.c               \
-surface.c              \
 shell.c                        \
 input.c                        \
 object.c
index d4a8ee060845317299e5ef185a686d60e58f2291..874dea4302bd078b20738f8f52a0f0be4d50d3bb 100644 (file)
@@ -27,7 +27,7 @@ _pepper_efl_object_buffer_release(Evas_Object *obj)
         pepper_buffer_unreference(po->buffer);
         po->buffer = NULL;
 
-        pepper_event_listener_remove(po->buffer_destroy_listener);
+        PE_FREE_FUNC(po->buffer_destroy_listener, pepper_event_listener_remove);
      }
 }
 
@@ -41,9 +41,6 @@ _pepper_efl_object_del(pepper_efl_object_t *po)
    evas_object_del(po->clip);
    evas_object_del(po->img);
 
-   if (po->es)
-     po->es->obj = NULL;
-
    free(po);
 }
 
@@ -451,7 +448,17 @@ _pepper_efl_object_cb_buffer_destroy(pepper_event_listener_t *listener EINA_UNUS
 
    DBG("[OBJECT] Buffer destroy: obj %p", po->smart_obj);
 
-   _pepper_efl_object_del(po);
+   if (po->shm_buffer)
+     {
+        evas_object_image_data_set(po->img, NULL);
+        po->shm_buffer = NULL;
+     }
+   else
+     {
+        evas_object_image_native_surface_set(po->img, NULL);
+     }
+
+   po->buffer = NULL;
 }
 
 static void
@@ -459,9 +466,27 @@ _pepper_efl_object_cb_surface_destroy(pepper_event_listener_t *listener EINA_UNU
 {
    pepper_efl_object_t *po = data;
 
-   po->es = NULL;
+   if (po->shm_buffer)
+     {
+        evas_object_image_data_set(po->img, NULL);
+        po->shm_buffer = NULL;
+     }
+   else
+     {
+        evas_object_image_native_surface_set(po->img, NULL);
+     }
+
+   if (po->buffer)
+     {
+        pepper_buffer_unreference(po->buffer);
+        PE_FREE_FUNC(po->buffer_destroy_listener, pepper_event_listener_remove);
+        po->buffer = NULL;
+     }
+
    po->surface = NULL;
    PE_FREE_FUNC(po->surface_destroy_listener, pepper_event_listener_remove);
+
+   evas_object_smart_callback_call(po->parent, PEPPER_EFL_OBJ_DEL, (void *)po->smart_obj);
 }
 
 static void
@@ -480,53 +505,58 @@ _pepper_efl_object_setup(pepper_efl_object_t *po)
 }
 
 Evas_Object *
-pepper_efl_object_add(pepper_efl_surface_t *es, Evas_Object *parent, pepper_surface_t *surface)
+pepper_efl_object_get(pepper_efl_output_t *output, pepper_surface_t *surface)
 {
    Evas *evas;
    Evas_Object *o;
    pepper_efl_object_t *po;
 
-   _pepper_efl_smart_init();
-
-   evas = evas_object_evas_get(parent);
-   o = evas_object_smart_add(evas, _pepper_efl_smart);
-
-   po = evas_object_smart_data_get(o);
+   po = pepper_object_get_user_data((pepper_object_t *)surface, output);
    if (!po)
-     return NULL;
-
-   po->es = es;
-   po->input.ptr = es->output->comp->input->pointer;
-   po->input.kbd = es->output->comp->input->keyboard;
-   po->input.touch = es->output->comp->input->touch;
-   po->evas = evas;
-   po->parent = parent;
-   po->surface = surface;
-   po->surface_destroy_listener =
-      pepper_object_add_event_listener((pepper_object_t *)surface,
-                                       PEPPER_EVENT_OBJECT_DESTROY, 0,
-                                       _pepper_efl_object_cb_surface_destroy, po);
+     {
+        _pepper_efl_smart_init();
+
+        evas = evas_object_evas_get(output->win);
+        o = evas_object_smart_add(evas, _pepper_efl_smart);
+
+        po = evas_object_smart_data_get(o);
+        if (!po)
+          return NULL;
+
+        po->input.ptr = output->comp->input->pointer;
+        po->input.kbd = output->comp->input->keyboard;
+        po->input.touch = output->comp->input->touch;
+        po->evas = evas;
+        po->parent = output->win;
+        po->surface = surface;
+        po->surface_destroy_listener =
+           pepper_object_add_event_listener((pepper_object_t *)surface,
+                                            PEPPER_EVENT_OBJECT_DESTROY, 0,
+                                            _pepper_efl_object_cb_surface_destroy, po);
 
 #define EVENT_ADD(type, func)                                                    \
-   evas_object_event_callback_priority_add(o,                                    \
-                                           EVAS_CALLBACK_##type,                 \
-                                           EVAS_CALLBACK_PRIORITY_AFTER,         \
-                                           _pepper_efl_object_evas_cb_##func,    \
-                                           po);
-   EVENT_ADD(MOUSE_IN, mouse_in);
-   EVENT_ADD(MOUSE_OUT, mouse_out);
-   EVENT_ADD(MOUSE_MOVE, mouse_move);
-   EVENT_ADD(MOUSE_DOWN, mouse_down);
-   EVENT_ADD(MOUSE_UP, mouse_up);
-   EVENT_ADD(MULTI_DOWN, multi_down);
-   EVENT_ADD(MULTI_UP, multi_up);
-   EVENT_ADD(MULTI_MOVE, multi_move);
-
-   EVENT_ADD(FOCUS_IN, focus_in);
-   EVENT_ADD(FOCUS_OUT, focus_out);
+        evas_object_event_callback_priority_add(o,                                    \
+                                                EVAS_CALLBACK_##type,                 \
+                                                EVAS_CALLBACK_PRIORITY_AFTER,         \
+                                                _pepper_efl_object_evas_cb_##func,    \
+                                                po);
+        EVENT_ADD(MOUSE_IN, mouse_in);
+        EVENT_ADD(MOUSE_OUT, mouse_out);
+        EVENT_ADD(MOUSE_MOVE, mouse_move);
+        EVENT_ADD(MOUSE_DOWN, mouse_down);
+        EVENT_ADD(MOUSE_UP, mouse_up);
+        EVENT_ADD(MULTI_DOWN, multi_down);
+        EVENT_ADD(MULTI_UP, multi_up);
+        EVENT_ADD(MULTI_MOVE, multi_move);
+
+        EVENT_ADD(FOCUS_IN, focus_in);
+        EVENT_ADD(FOCUS_OUT, focus_out);
 #undef EVENT_ADD
 
-   return o;
+        pepper_object_set_user_data((pepper_object_t *)surface, output, po, NULL);
+     }
+
+   return po->smart_obj;
 }
 
 Eina_Bool
@@ -627,7 +657,7 @@ pepper_efl_object_render(Evas_Object *obj)
         evas_object_image_data_set(po->img, wl_shm_buffer_get_data(po->shm_buffer));
         evas_object_image_data_update_add(po->img, 0, 0, po->w, po->h);
      }
-   else
+   else if (po->buffer)
      {
         Evas_Native_Surface ns;
 
index abd8b7d53145c73fc13ce3202f2339df2705d8ed..954417cd7d10a629c9a480b74f107e6d42f518c3 100644 (file)
@@ -11,8 +11,6 @@ struct pepper_efl_object
    Evas_Object *img;
    Evas_Object *clip;
 
-   pepper_efl_surface_t *es;
-
    pepper_surface_t *surface;
    pepper_buffer_t *buffer;
    pepper_event_listener_t *buffer_destroy_listener;
@@ -29,7 +27,7 @@ struct pepper_efl_object
    } input;
 };
 
-Evas_Object *pepper_efl_object_add(pepper_efl_surface_t *es, Evas_Object *parent, pepper_surface_t *surface);
+Evas_Object *pepper_efl_object_get(pepper_efl_output_t *output, pepper_surface_t *surface);
 Eina_Bool    pepper_efl_object_buffer_attach(Evas_Object *obj, int *w, int *h);
 void         pepper_efl_object_render(Evas_Object *obj);
 
index 7cde438390ac65bb3a19ac2802b80b6197155b19..d94dd666ebf25a05aa5eff4d6a85cdaa086839a5 100644 (file)
@@ -115,35 +115,39 @@ static void
 _pepper_efl_output_repaint(void *o EINA_UNUSED, const pepper_list_t *plane_list EINA_UNUSED)
 {
    pepper_efl_output_t *output = o;
-   pepper_efl_surface_t *es;
-   Eina_List *l;
+   Evas_Object *co;
+   Eina_List *l, *ll;
 
    DBG("callback output");
 
-   EINA_LIST_FOREACH(output->update_list, l, es) {
-      pepper_efl_object_render(es->obj);
-      output->update_list = eina_list_remove_list(output->update_list, l);
-   }
+   EINA_LIST_FOREACH_SAFE(output->update_list, l, ll, co)
+     {
+        pepper_efl_object_render(co);
+        output->update_list = eina_list_remove(output->update_list, co);
+     }
 }
 
 static void
 _pepper_efl_output_attach_surface(void *o, pepper_surface_t *surface, int *w, int *h)
 {
-   pepper_efl_output_t *output = o;
-   pepper_efl_surface_t *es;
+   pepper_efl_output_t *output;
+   Evas_Object *co;
    int rw = 0, rh = 0;
+   Eina_Bool res;
 
-   es = pepper_efl_surface_get(output, surface);
-   if (!es)
+   output = o;
+   co = pepper_efl_object_get(output, surface);
+   if (!co)
      {
-        ERR("failed to get pepper_efl_surface_t");
+        ERR("failed to get Evas_Object of client");
         goto end;
      }
 
-   if (!pepper_efl_surface_update(es, &rw, &rh))
+   res = pepper_efl_object_buffer_attach(co, &rw, &rh);
+   if (!res)
      goto end;
 
-   output->update_list = eina_list_append(output->update_list, es);
+   output->update_list = eina_list_append(output->update_list, co);
 
 end:
    if (w) *w = rw;
index 0bf9666d94b3fd01b0253b468e36e2cf1b13ac15..3633c485b25bba36ed019cfa8ccbc12e5b4bbb62 100644 (file)
@@ -15,7 +15,6 @@ typedef struct pepper_efl_output pepper_efl_output_t;
 #include "log.h"
 #include "output.h"
 #include "input.h"
-#include "surface.h"
 #include "shell.h"
 #include "object.h"
 
diff --git a/src/lib/surface.c b/src/lib/surface.c
deleted file mode 100644 (file)
index a394a73..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#include "private.h"
-
-static void
-_pepper_efl_surface_cb_destroy(pepper_event_listener_t *listener EINA_UNUSED, pepper_object_t *object EINA_UNUSED, uint32_t id EINA_UNUSED, void *info EINA_UNUSED, void *data)
-{
-   pepper_efl_surface_t *es = data;
-
-   evas_object_smart_callback_call(es->output->win, PEPPER_EFL_OBJ_DEL, (void *)es->obj);
-
-   pepper_event_listener_remove(es->surface_destroy_listener);
-   pepper_object_set_user_data((pepper_object_t *)es->surface,
-                               (const void *)es->output, NULL, NULL);
-
-   es->output->update_list = eina_list_remove(es->output->update_list, es);
-
-   free(es);
-}
-
-Eina_Bool
-pepper_efl_surface_update(pepper_efl_surface_t *es, int *w, int *h)
-{
-   if (!es->obj)
-     return EINA_FALSE;
-
-   if (!pepper_efl_object_buffer_attach(es->obj, w, h))
-     return EINA_FALSE;
-
-   return EINA_TRUE;
-}
-
-pepper_efl_surface_t *
-pepper_efl_surface_get(pepper_efl_output_t *output, pepper_surface_t *surface)
-{
-   pepper_efl_surface_t *es;
-
-   es = pepper_object_get_user_data((pepper_object_t *)surface, output);
-   if (!es)
-     {
-        es = calloc(1, sizeof(pepper_efl_surface_t));
-        if (!es)
-          return NULL;
-
-        es->output = output;
-        es->obj = pepper_efl_object_add(es, output->win, surface);
-        es->surface = surface;
-        es->surface_destroy_listener =
-           pepper_object_add_event_listener((pepper_object_t *)surface,
-                                            PEPPER_EVENT_OBJECT_DESTROY, 0,
-                                            _pepper_efl_surface_cb_destroy, es);
-
-        pepper_object_set_user_data((pepper_object_t *)surface, output, es, NULL);
-     }
-
-   return es;
-}
diff --git a/src/lib/surface.h b/src/lib/surface.h
deleted file mode 100644 (file)
index 10f6340..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _PEPPER_EFL_SURFACE_H_
-#define _PEPPER_EFL_SURFACE_H_
-
-typedef struct pepper_efl_surface pepper_efl_surface_t;
-
-struct pepper_efl_surface
-{
-   pepper_efl_output_t *output;
-
-   Evas_Object *obj;
-
-   struct wl_shm_buffer *shm_buffer;
-
-   pepper_surface_t *surface;
-   pepper_buffer_t *buffer;
-
-   int buffer_width, buffer_height;
-
-   pepper_event_listener_t *surface_destroy_listener;
-};
-
-pepper_efl_surface_t *pepper_efl_surface_get(pepper_efl_output_t *output, pepper_surface_t *surface);
-Eina_Bool             pepper_efl_surface_update(pepper_efl_surface_t *es, int *w, int *h);
-
-#endif