ivi-shell: remove struct link_layer

link_layer's sole purpose is to link a surface to multiple layers, if
the surface should be shown in multiple layers.  This can be only
achieved, if the surface has multiple weston_views with different
transformation matrices.

Current implementation assumes in many places that a ivi_surface has
only one weston_view.  Therefore, a surface can be only shown on one
layer.

Although this (a surface on multiple layers) is a nice to have feature
for ivi-shell, it is not very crucial.  In any case, it is not an easy
task to implement this feature, because it has lot of corner cases.

I removed with this patch the link_layer data structure, because it does
not have any purpose in current implementation.

Signed-off-by: Emre Ucan <eucan@de.adit-jv.com>
Tested-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
Reviewed-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
[Pekka: Line-wrapped the commit message.]
dev
Ucan, Emre (ADITG/SW1) 9 years ago committed by Pekka Paalanen
parent 8a223673ad
commit dfac375993
  1. 3
      ivi-shell/ivi-layout-private.h
  2. 92
      ivi-shell/ivi-layout.c

@ -32,11 +32,11 @@
struct ivi_layout_surface { struct ivi_layout_surface {
struct wl_list link; struct wl_list link;
struct wl_signal property_changed; struct wl_signal property_changed;
struct wl_list layer_list;
int32_t update_count; int32_t update_count;
uint32_t id_surface; uint32_t id_surface;
struct ivi_layout *layout; struct ivi_layout *layout;
struct ivi_layout_layer *on_layer;
struct weston_surface *surface; struct weston_surface *surface;
struct weston_transform transform; struct weston_transform transform;
@ -65,7 +65,6 @@ struct ivi_layout_surface {
struct ivi_layout_layer { struct ivi_layout_layer {
struct wl_list link; struct wl_list link;
struct wl_signal property_changed; struct wl_signal property_changed;
struct wl_list link_to_surface;
uint32_t id_layer; uint32_t id_layer;
struct ivi_layout *layout; struct ivi_layout *layout;

@ -69,12 +69,6 @@
#define max(a, b) ((a) > (b) ? (a) : (b)) #define max(a, b) ((a) > (b) ? (a) : (b))
struct link_layer {
struct ivi_layout_layer *ivilayer;
struct wl_list link;
struct wl_list link_to_layer;
};
struct listener_layout_notification { struct listener_layout_notification {
void *userdata; void *userdata;
struct wl_listener listener; struct wl_listener listener;
@ -125,72 +119,6 @@ get_instance(void)
return &ivilayout; return &ivilayout;
} }
/**
* Internal API to add/remove a link to ivi_surface from ivi_layer.
*/
static void
add_link_to_surface(struct ivi_layout_layer *ivilayer,
struct link_layer *link_layer)
{
struct link_layer *link = NULL;
wl_list_for_each(link, &ivilayer->link_to_surface, link_to_layer) {
if (link == link_layer)
return;
}
wl_list_insert(&ivilayer->link_to_surface, &link_layer->link_to_layer);
}
static void
remove_link_to_surface(struct ivi_layout_layer *ivilayer)
{
struct link_layer *link = NULL;
struct link_layer *next = NULL;
wl_list_for_each_safe(link, next, &ivilayer->link_to_surface, link_to_layer) {
wl_list_remove(&link->link_to_layer);
wl_list_remove(&link->link);
free(link);
}
wl_list_init(&ivilayer->link_to_surface);
}
/**
* Internal API to add/remove a ivi_surface from ivi_layer.
*/
static void
add_ordersurface_to_layer(struct ivi_layout_surface *ivisurf,
struct ivi_layout_layer *ivilayer)
{
struct link_layer *link_layer = NULL;
link_layer = malloc(sizeof *link_layer);
if (link_layer == NULL) {
weston_log("fails to allocate memory\n");
return;
}
link_layer->ivilayer = ivilayer;
wl_list_insert(&ivisurf->layer_list, &link_layer->link);
add_link_to_surface(ivilayer, link_layer);
}
static void
remove_ordersurface_from_layer(struct ivi_layout_surface *ivisurf)
{
struct link_layer *link_layer = NULL;
struct link_layer *next = NULL;
wl_list_for_each_safe(link_layer, next, &ivisurf->layer_list, link) {
wl_list_remove(&link_layer->link);
wl_list_remove(&link_layer->link_to_layer);
free(link_layer);
}
wl_list_init(&ivisurf->layer_list);
}
/** /**
* Internal API to add/remove a ivi_layer to/from ivi_screen. * Internal API to add/remove a ivi_layer to/from ivi_screen.
*/ */
@ -294,7 +222,6 @@ ivi_layout_surface_destroy(struct ivi_layout_surface *ivisurf)
wl_list_remove(&ivisurf->pending.link); wl_list_remove(&ivisurf->pending.link);
wl_list_remove(&ivisurf->order.link); wl_list_remove(&ivisurf->order.link);
wl_list_remove(&ivisurf->link); wl_list_remove(&ivisurf->link);
remove_ordersurface_from_layer(ivisurf);
wl_signal_emit(&layout->surface_notification.removed, ivisurf); wl_signal_emit(&layout->surface_notification.removed, ivisurf);
@ -878,7 +805,7 @@ commit_layer_list(struct ivi_layout *layout)
wl_list_for_each_safe(ivisurf, next, &ivilayer->order.surface_list, wl_list_for_each_safe(ivisurf, next, &ivilayer->order.surface_list,
order.link) { order.link) {
remove_ordersurface_from_layer(ivisurf); ivisurf->on_layer = NULL;
wl_list_remove(&ivisurf->order.link); wl_list_remove(&ivisurf->order.link);
wl_list_init(&ivisurf->order.link); wl_list_init(&ivisurf->order.link);
ivisurf->event_mask |= IVI_NOTIFICATION_REMOVE; ivisurf->event_mask |= IVI_NOTIFICATION_REMOVE;
@ -891,7 +818,7 @@ commit_layer_list(struct ivi_layout *layout)
wl_list_remove(&ivisurf->order.link); wl_list_remove(&ivisurf->order.link);
wl_list_insert(&ivilayer->order.surface_list, wl_list_insert(&ivilayer->order.surface_list,
&ivisurf->order.link); &ivisurf->order.link);
add_ordersurface_to_layer(ivisurf, ivilayer); ivisurf->on_layer = ivilayer;
ivisurf->event_mask |= IVI_NOTIFICATION_ADD; ivisurf->event_mask |= IVI_NOTIFICATION_ADD;
} }
@ -1642,7 +1569,6 @@ ivi_layout_get_layers_under_surface(struct ivi_layout_surface *ivisurf,
int32_t *pLength, int32_t *pLength,
struct ivi_layout_layer ***ppArray) struct ivi_layout_layer ***ppArray)
{ {
struct link_layer *link_layer = NULL;
int32_t length = 0; int32_t length = 0;
int32_t n = 0; int32_t n = 0;
@ -1651,19 +1577,16 @@ ivi_layout_get_layers_under_surface(struct ivi_layout_surface *ivisurf,
return IVI_FAILED; return IVI_FAILED;
} }
length = wl_list_length(&ivisurf->layer_list); if (ivisurf->on_layer != NULL) {
if (length != 0) {
/* the Array must be free by module which called this function */ /* the Array must be free by module which called this function */
*ppArray = calloc(length, sizeof(struct ivi_layout_layer *)); length = 1;
*ppArray = calloc(length, sizeof(struct ivi_layout_screen *));
if (*ppArray == NULL) { if (*ppArray == NULL) {
weston_log("fails to allocate memory\n"); weston_log("fails to allocate memory\n");
return IVI_FAILED; return IVI_FAILED;
} }
wl_list_for_each(link_layer, &ivisurf->layer_list, link) { (*ppArray)[n++] = ivisurf->on_layer;
(*ppArray)[n++] = link_layer->ivilayer;
}
} }
*pLength = length; *pLength = length;
@ -1761,7 +1684,6 @@ ivi_layout_layer_create_with_dimension(uint32_t id_layer,
ivilayer->ref_count = 1; ivilayer->ref_count = 1;
wl_signal_init(&ivilayer->property_changed); wl_signal_init(&ivilayer->property_changed);
wl_list_init(&ivilayer->link_to_surface);
ivilayer->layout = layout; ivilayer->layout = layout;
ivilayer->id_layer = id_layer; ivilayer->id_layer = id_layer;
@ -1828,7 +1750,6 @@ ivi_layout_layer_destroy(struct ivi_layout_layer *ivilayer)
wl_list_remove(&ivilayer->order.link); wl_list_remove(&ivilayer->order.link);
wl_list_remove(&ivilayer->link); wl_list_remove(&ivilayer->link);
remove_link_to_surface(ivilayer);
ivi_layout_layer_remove_notification(ivilayer); ivi_layout_layer_remove_notification(ivilayer);
free(ivilayer); free(ivilayer);
@ -2741,7 +2662,6 @@ ivi_layout_surface_create(struct weston_surface *wl_surface,
wl_signal_init(&ivisurf->property_changed); wl_signal_init(&ivisurf->property_changed);
wl_signal_init(&ivisurf->configured); wl_signal_init(&ivisurf->configured);
wl_list_init(&ivisurf->layer_list);
ivisurf->id_surface = id_surface; ivisurf->id_surface = id_surface;
ivisurf->layout = layout; ivisurf->layout = layout;

Loading…
Cancel
Save