diff options
Diffstat (limited to 'recipes-graphics/wayland/weston/0007-RFR-ivi-shell-multi-screen-support-to-calcuration-of.patch')
-rw-r--r-- | recipes-graphics/wayland/weston/0007-RFR-ivi-shell-multi-screen-support-to-calcuration-of.patch | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/recipes-graphics/wayland/weston/0007-RFR-ivi-shell-multi-screen-support-to-calcuration-of.patch b/recipes-graphics/wayland/weston/0007-RFR-ivi-shell-multi-screen-support-to-calcuration-of.patch new file mode 100644 index 000000000..7747115ac --- /dev/null +++ b/recipes-graphics/wayland/weston/0007-RFR-ivi-shell-multi-screen-support-to-calcuration-of.patch @@ -0,0 +1,103 @@ +From b995f26e62de2ba8965700062ccf98a8f65fffd0 Mon Sep 17 00:00:00 2001 +From: Koji Ohira <kk.ohira.koji@nttd-mse.com> +Date: Thu, 24 Nov 2016 21:14:38 +0900 +Subject: [PATCH] [RFR] ivi-shell: multi screen support to calcuration of a + mask of weston_surface. + +A weston_surface is transformed to multi screen coordinate, global +coordinate by matrix:m now. + +Additionally, a mask needs to be calucated, taking account into, +- multi screen coordination: a destination rectangle of layer in the + coordination is easily calcurated by adding weston_output.{x,y} in + simple. This is because there is no scaled and rotated transformation. +- intersect inside of a screen the layer is assigned to. This is because + overlapped region of weston surface in another screen shall not be + displayed according to ivi use case. + +Signed-off-by: Koji Ohira <kk.ohira.koji@nttd-mse.com> +--- + ivi-shell/ivi-layout.c | 38 ++++++++++++++++++++++++++++++++------ + 1 file changed, 32 insertions(+), 6 deletions(-) + +diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c +index 65c2735..008fbe5 100644 +--- a/ivi-shell/ivi-layout.c ++++ b/ivi-shell/ivi-layout.c +@@ -665,15 +665,24 @@ calc_inverse_matrix_transform(const struct weston_matrix *matrix, + + /** + * This computes the whole transformation matrix:m from surface-local +- * coordinates to global coordinates. It is assumed that +- * weston_view::geometry.{x,y} are zero. ++ * coordinates to multi screens coordinate, which is global coordinates. ++ * It is assumed that weston_view::geometry.{x,y} are zero. + * + * Additionally, this computes the mask on surface-local coordinates as a + * ivi_rectangle. This can be set to weston_view_set_mask. + * + * The mask is computed by following steps +- * - destination rectangle of layer is inversed to surface-local cooodinates +- * by inversed matrix:m. ++ * - destination rectangle of layer is tansformed to multi screen coordinate, ++ * global coordinates. This is done by adding weston_output.{x,y} in simple ++ * because there is no scaled and rotated transformation. ++ * - destination rectangle of layer in multi screens coordinate needs to be ++ * intersected inside of a screen the layer is assigned to. This is because ++ * overlapped region of weston surface in another screen shall not be ++ * displayed according to ivi use case. ++ * - destination rectangle of layer ++ * - in multi screen coordinates, ++ * - and intersected inside of an assigned screen, ++ * is inversed to surface-local cooodinates by inversed matrix:m. + * - the area is intersected by intersected area between weston_surface and + * source rectangle of ivi_surface. + */ +@@ -708,7 +717,17 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface( + lp->dest_y, + lp->dest_width, + lp->dest_height }; ++ struct ivi_rectangle screen_dest_rect = { output->x, ++ output->y, ++ output->width, ++ output->height }; ++ struct ivi_rectangle layer_dest_rect_in_global = ++ { lp->dest_x + output->x, ++ lp->dest_y + output->y, ++ lp->dest_width, ++ lp->dest_height }; + struct ivi_rectangle surface_result; ++ struct ivi_rectangle layer_dest_rect_in_global_intersected; + + /* + * the whole transformation matrix:m from surface-local +@@ -735,9 +754,16 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface( + ivi_rectangle_intersect(&surface_source_rect, &weston_surface_rect, + &surface_result); + ++ /* ++ * destination rectangle of layer in multi screens coordinate ++ * is intersected to avoid displaying outside of an assigned screen. ++ */ ++ ivi_rectangle_intersect(&layer_dest_rect_in_global, &screen_dest_rect, ++ &layer_dest_rect_in_global_intersected); ++ + /* calc masking area of weston_surface from m */ + calc_inverse_matrix_transform(m, +- &layer_dest_rect, ++ &layer_dest_rect_in_global_intersected, + &surface_result, + result); + } +@@ -778,7 +804,7 @@ update_prop(struct ivi_layout_screen *iviscrn, + weston_matrix_init(&ivisurf->transform.matrix); + + calc_surface_to_global_matrix_and_mask_to_weston_surface( +- ivilayer, ivisurf, &ivisurf->transform.matrix, &r); ++ iviscrn, ivilayer, ivisurf, &ivisurf->transform.matrix, &r); + + if (tmpview != NULL) { + weston_view_set_mask(tmpview, r.x, r.y, r.width, r.height); +-- +2.7.4 + |