ivi-shell: hmi-controller supports multi screens at fullscreen mode.
authorNobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
Wed, 9 Dec 2015 06:45:20 +0000 (15:45 +0900)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Mon, 14 Dec 2015 11:16:11 +0000 (13:16 +0200)
It shows ivi applications in fullscreen per screen like,
The first screen: Application 1,4,5,6,,,,
The seconed screen: Application 2,
The third screen: Application 3

Thie mode assigns one application to each screen at first. And remaind
applications more than screens will be assigned to the first screen.

Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
ivi-shell/hmi-controller.c

index 55e70fb..9b69dd2 100644 (file)
@@ -367,6 +367,10 @@ mode_fullscreen_someone(struct hmi_controller *hmi_ctrl,
        struct ivi_layout_surface *ivisurf  = NULL;
        int32_t i = 0;
        const uint32_t duration = hmi_ctrl->hmi_setting->transition_duration;
+       int32_t surf_num = 0;
+       struct ivi_layout_surface **surfaces;
+
+       surfaces = MEM_ALLOC(sizeof(*surfaces) * surface_length);
 
        for (i = 0; i < surface_length; i++) {
                ivisurf = pp_surface[i];
@@ -375,6 +379,18 @@ mode_fullscreen_someone(struct hmi_controller *hmi_ctrl,
                if (is_surf_in_ui_widget(hmi_ctrl, ivisurf))
                        continue;
 
+               surfaces[surf_num++] = ivisurf;
+       }
+       ivi_layout_interface->layer_set_render_order(layer->ivilayer, surfaces, surf_num);
+
+       for (i = 0; i < surf_num; i++) {
+               ivisurf = surfaces[i];
+
+               if ((i > 0) && (i < hmi_ctrl->screen_num)) {
+                       layer = wl_container_of(layer->link.prev, layer, link);
+                       ivi_layout_interface->layer_set_render_order(layer->ivilayer, &ivisurf, 1);
+               }
+
                ivi_layout_interface->surface_set_transition(ivisurf,
                                        IVI_LAYOUT_TRANSITION_VIEW_DEFAULT,
                                        duration);
@@ -383,6 +399,8 @@ mode_fullscreen_someone(struct hmi_controller *hmi_ctrl,
                                                             surface_width,
                                                             surface_height);
        }
+
+       free(surfaces);
 }
 
 static void