summaryrefslogtreecommitdiffstats
path: root/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch')
-rw-r--r--meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch95
1 files changed, 95 insertions, 0 deletions
diff --git a/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch
new file mode 100644
index 000000000..35835f08c
--- /dev/null
+++ b/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0002-ivi-shell-multi-screen-support-to-calcuration-of-a-m.patch
@@ -0,0 +1,95 @@
+From 5c3c97aecadd59231e3b99a021080b019e1bbea4 Mon Sep 17 00:00:00 2001
+From: Nobuhiko Tanibata <nobuhiko_tanibata@xddp.denso.co.jp>
+Date: Wed, 9 Dec 2015 15:39:26 +0900
+Subject: [PATCH 2/7] 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: Nobuhiko Tanibata <nobuhiko_tanibata@xddp.denso.co.jp>
+Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
+---
+ ivi-shell/ivi-layout.c | 36 +++++++++++++++++++++++++++++++-----
+ 1 file changed, 31 insertions(+), 5 deletions(-)
+
+diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
+index efc0da5..c8ea270 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.
+ */
+@@ -706,7 +715,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
+@@ -729,9 +748,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);
+ }
+--
+2.4.5
+