[PATCH 5/5] ivi-shell: introduce get_weston_view
Ucan, Emre (ADITG/SW1)
eucan at de.adit-jv.com
Fri Aug 28 05:59:06 PDT 2015
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 <eucan at de.adit-jv.com>
---
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 49e789e..702878f 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);
@@ -2554,18 +2553,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
--
1.7.9.5
More information about the wayland-devel
mailing list