aboutsummaryrefslogtreecommitdiffstats
path: root/meta-ivi-common/recipes-graphics/wayland/weston-ivi-shell/0001-IVI-Shell-use-primary-screen-for-resolution.patch
blob: 2df9f4aed83e61895c385a2f86b4731d783cfd37 (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
From: Manuel Bachmann <manuel.bachmann@iot.bzh>
Date: Thu, Nov 5 10:17:00 2015 +0000
Subject: ivi-shell: use primary screen for resolution values

Screen resolution values (width, height) are always grabbed
from the first screen, n.0, which can be a bad choice if it
is not the one really used as main display.

This mostly happens on hardware with a VGA adapter, such as
laptops or Renesas R-Car E2 "Silk", and prevents correct
layout stretching (black borders).

Discover the primary screen and use its values.

Signed-off-by: Manuel Bachmann <manuel.bachmann@iot.bzh>
---

--- a/ivi-shell/hmi-controller.c	2015-11-05 09:57:55.740942450 +0000
+++ b/ivi-shell/hmi-controller.c	2015-11-05 10:00:23.545912494 +0000
@@ -676,6 +676,8 @@
 	struct link_layer *tmp_link_layer = NULL;
 	int32_t panel_height = 0;
 	struct hmi_controller *hmi_ctrl = MEM_ALLOC(sizeof(*hmi_ctrl));
+	struct weston_output *output = NULL;
+	int i = 0;
 
 	wl_array_init(&hmi_ctrl->ui_widgets);
 	hmi_ctrl->layout_mode = IVI_HMI_CONTROLLER_LAYOUT_MODE_TILING;
@@ -684,11 +686,19 @@
 
 	ivi_controller_interface->get_screens(&screen_length, &pp_screen);
 
-	iviscrn = pp_screen[0];
+	/* find primary screen */
+	for (i = 0; i < screen_length; i++) {
+		iviscrn = pp_screen[i];
+		output = ivi_controller_interface->screen_get_output(iviscrn);
+		if (output->x == 0)
+			break;
+	}
 
 	ivi_controller_interface->get_screen_resolution(iviscrn, &screen_width,
 					 &screen_height);
 
+	iviscrn = pp_screen[0];
+
 	/* init base ivi_layer*/
 	hmi_ctrl->base_layer.x = 0;
 	hmi_ctrl->base_layer.y = 0;