summaryrefslogtreecommitdiffstats
path: root/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0005-ivi-shell-convert-from-screen-to-global-coordinates.patch
blob: f22af13e621be6fefecff164502ba37a5a4ee29b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
From 26c4fc86516626e2e463171e4016ccd851125342 Mon Sep 17 00:00:00 2001
From: Nobuhiko Tanibata <nobuhiko_tanibata@xddp.denso.co.jp>
Date: Wed, 9 Dec 2015 15:38:41 +0900
Subject: [PATCH 5/7] ivi-shell: convert from screen to global coordinates

In single screen, the coordinates of layer local coordinates are the
same as global coordinates. However, to support multi screens, the
layer-local coordinates shall be transformed to multi screen coordinates,
which is global coordinates. The abosolute coordinates of a screen in global
stored in (x,y) of output of its weston output so it shall be used to
transform layer-local to global coordinates.

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 | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index a7c5e22..c7506de 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -688,6 +688,7 @@ calc_inverse_matrix_transform(const struct weston_matrix *matrix,
  */
 static void
 calc_surface_to_global_matrix_and_mask_to_weston_surface(
+	struct ivi_layout_screen  *iviscrn,
 	struct ivi_layout_layer *ivilayer,
 	struct ivi_layout_surface *ivisurf,
 	struct weston_matrix *m,
@@ -695,6 +696,7 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface(
 {
 	const struct ivi_layout_surface_properties *sp = &ivisurf->prop;
 	const struct ivi_layout_layer_properties *lp = &ivilayer->prop;
+	struct weston_output *output = iviscrn->output;
 	struct ivi_rectangle weston_surface_rect = { 0,
 						     0,
 						     ivisurf->surface->width,
@@ -732,7 +734,9 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface(
 	 * coordinates to global coordinates, which is computed by
 	 * two steps,
 	 * - surface-local coordinates to layer-local coordinates
-	 * - layer-local coordinates to global coordinates
+	 * - layer-local coordinates to a single screen-local coordinates
+	 * - a single screen-local coordinates to multi screen coordinates,
+         *   which is global coordinates.
 	 */
 	calc_transformation_matrix(&surface_source_rect,
 				   &surface_dest_rect,
@@ -742,6 +746,8 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface(
 				   &layer_dest_rect,
 				   lp->orientation, m);
 
+	weston_matrix_translate(m, output->x, output->y, 0.0f);
+
 	/* this intersected ivi_rectangle would be used for masking
 	 * weston_surface
 	 */
@@ -798,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.4.5