From 64635ee69988b0da28bd8beed282c432eecdc4bc Mon Sep 17 00:00:00 2001 From: "Ucan, Emre (ADITG/SW1)" Date: Fri, 28 Aug 2015 12:59:06 +0000 Subject: [PATCH] ivi-shell: introduce get_weston_view The internal API "get_weston_view" is introduced, which returns the weston_view of the given ivi_layout_surface. The API returns a NULL pointer, if the ivi_layout_surface does not have any weston_view. The weston_view is required in many places of ivi-shell implementation. Therefore, this API will reduce lines of code. Furthermore, it will increase the maintainability of the ivi-shell implementation. Old way of getting the weston_view was flawed, because the views list of the weston_surface is read without controlling the existence of the weston_surface. New implementation explicitly throws an error if the weston_surface does not exist. Signed-off-by: Emre Ucan Tested-by: Nobuhiko Tanibata Reviewed-by: Nobuhiko Tanibata [Pekka: Line-wrapped the commit message.] --- ivi-shell/ivi-layout.c | 75 +++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 42 deletions(-) diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c index f5872661..33d71434 100644 --- a/ivi-shell/ivi-layout.c +++ b/ivi-shell/ivi-layout.c @@ -150,6 +150,22 @@ get_layer(struct wl_list *layer_list, uint32_t id_layer) return NULL; } +static struct weston_view * +get_weston_view(struct ivi_layout_surface *ivisurf) +{ + struct weston_view *view = NULL; + + assert(ivisurf->surface != NULL); + + /* One view per surface */ + if(wl_list_empty(&ivisurf->surface->views)) + view = NULL; + else + view = wl_container_of(ivisurf->surface->views.next, view, surface_link); + + return view; +} + static void remove_configured_listener(struct ivi_layout_surface *ivisurf) { @@ -302,18 +318,15 @@ static void update_opacity(struct ivi_layout_layer *ivilayer, struct ivi_layout_surface *ivisurf) { + struct weston_view *tmpview = NULL; double layer_alpha = wl_fixed_to_double(ivilayer->prop.opacity); double surf_alpha = wl_fixed_to_double(ivisurf->prop.opacity); if ((ivilayer->event_mask & IVI_NOTIFICATION_OPACITY) || (ivisurf->event_mask & IVI_NOTIFICATION_OPACITY)) { - struct weston_view *tmpview = NULL; - wl_list_for_each(tmpview, &ivisurf->surface->views, surface_link) { - if (tmpview == NULL) { - continue; - } - tmpview->alpha = layer_alpha * surf_alpha; - } + tmpview = get_weston_view(ivisurf); + assert(tmpview != NULL); + tmpview->alpha = layer_alpha * surf_alpha; } } @@ -590,11 +603,8 @@ update_prop(struct ivi_layout_layer *ivilayer, update_opacity(ivilayer, ivisurf); - wl_list_for_each(tmpview, &ivisurf->surface->views, surface_link) { - if (tmpview != NULL) { - break; - } - } + tmpview = get_weston_view(ivisurf); + assert(tmpview != NULL); if (ivisurf->prop.source_width == 0 || ivisurf->prop.source_height == 0) { weston_log("ivi-shell: source rectangle is not yet set by ivi_layout_surface_set_source_rectangle\n"); @@ -613,24 +623,18 @@ update_prop(struct ivi_layout_layer *ivilayer, calc_surface_to_global_matrix_and_mask_to_weston_surface( ivilayer, ivisurf, &ivisurf->transform.matrix, &r); - if (tmpview != NULL) { - weston_view_set_mask(tmpview, r.x, r.y, r.width, r.height); - wl_list_insert(&tmpview->geometry.transformation_list, - &ivisurf->transform.link); + weston_view_set_mask(tmpview, r.x, r.y, r.width, r.height); + wl_list_insert(&tmpview->geometry.transformation_list, + &ivisurf->transform.link); - weston_view_set_transform_parent(tmpview, NULL); - } + weston_view_set_transform_parent(tmpview, NULL); } ivisurf->update_count++; - if (tmpview != NULL) { - weston_view_geometry_dirty(tmpview); - } + weston_view_geometry_dirty(tmpview); - if (ivisurf->surface != NULL) { - weston_surface_damage(ivisurf->surface); - } + weston_surface_damage(ivisurf->surface); } static void @@ -799,6 +803,7 @@ commit_screen_list(struct ivi_layout *layout) struct ivi_layout_layer *ivilayer = NULL; struct ivi_layout_layer *next = NULL; struct ivi_layout_surface *ivisurf = NULL; + struct weston_view *tmpview = NULL; wl_list_for_each(iviscrn, &layout->screen_list, link) { if (iviscrn->order.dirty) { @@ -831,17 +836,11 @@ commit_screen_list(struct ivi_layout *layout) continue; wl_list_for_each(ivisurf, &ivilayer->order.surface_list, order.link) { - struct weston_view *tmpview = NULL; - wl_list_for_each(tmpview, &ivisurf->surface->views, surface_link) { - if (tmpview != NULL) { - break; - } - } - if (ivisurf->prop.visibility == false) continue; - if (ivisurf->surface == NULL || tmpview == NULL) - continue; + + tmpview = get_weston_view(ivisurf); + assert(tmpview != NULL); weston_layer_entry_insert(&layout->layout_layer.view_list, &tmpview->layer_link); @@ -2555,18 +2554,10 @@ ivi_layout_surface_dump(struct weston_surface *surface, struct weston_view * ivi_layout_get_weston_view(struct ivi_layout_surface *surface) { - struct weston_view *tmpview = NULL; - if (surface == NULL) return NULL; - wl_list_for_each(tmpview, &surface->surface->views, surface_link) - { - if (tmpview != NULL) { - break; - } - } - return tmpview; + return get_weston_view(surface); } void