ivi-shell: hmi-controller supports multi screens at random-mode.
It shows ivi applications at screensa randomly. Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
parent
a7ffa68e70
commit
1c2201b543
|
@ -409,14 +409,32 @@ mode_random_replace(struct hmi_controller *hmi_ctrl,
|
||||||
int32_t surface_length,
|
int32_t surface_length,
|
||||||
struct wl_list *layer_list)
|
struct wl_list *layer_list)
|
||||||
{
|
{
|
||||||
struct hmi_controller_layer *layer = wl_container_of(layer_list->prev, layer, link);
|
struct hmi_controller_layer *application_layer = NULL;
|
||||||
const int32_t surface_width = (int32_t)(layer->width * 0.25f);
|
struct hmi_controller_layer **layers = NULL;
|
||||||
const int32_t surface_height = (int32_t)(layer->height * 0.25f);
|
int32_t surface_width = 0;
|
||||||
|
int32_t surface_height = 0;
|
||||||
int32_t surface_x = 0;
|
int32_t surface_x = 0;
|
||||||
int32_t surface_y = 0;
|
int32_t surface_y = 0;
|
||||||
struct ivi_layout_surface *ivisurf = NULL;
|
struct ivi_layout_surface *ivisurf = NULL;
|
||||||
const uint32_t duration = hmi_ctrl->hmi_setting->transition_duration;
|
const uint32_t duration = hmi_ctrl->hmi_setting->transition_duration;
|
||||||
int32_t i = 0;
|
int32_t i = 0;
|
||||||
|
int32_t layer_idx = 0;
|
||||||
|
|
||||||
|
layers = MEM_ALLOC(sizeof(*layers) * hmi_ctrl->screen_num);
|
||||||
|
|
||||||
|
wl_list_for_each(application_layer, layer_list, link) {
|
||||||
|
layers[layer_idx] = application_layer;
|
||||||
|
ivi_layout_interface->layer_set_render_order(layers[layer_idx]->ivilayer,
|
||||||
|
NULL, 0);
|
||||||
|
layer_idx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This commit change is needed because ivisurface can not belongs to several layers
|
||||||
|
* at the same time. So ivisurfaces shall be removed from layers once and then set them
|
||||||
|
* to layers randomly.
|
||||||
|
*/
|
||||||
|
ivi_layout_interface->commit_changes();
|
||||||
|
|
||||||
for (i = 0; i < surface_length; i++) {
|
for (i = 0; i < surface_length; i++) {
|
||||||
ivisurf = pp_surface[i];
|
ivisurf = pp_surface[i];
|
||||||
|
@ -425,19 +443,30 @@ mode_random_replace(struct hmi_controller *hmi_ctrl,
|
||||||
if (is_surf_in_ui_widget(hmi_ctrl, ivisurf))
|
if (is_surf_in_ui_widget(hmi_ctrl, ivisurf))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/* surface determined at random a layer that belongs */
|
||||||
|
layer_idx = rand() % hmi_ctrl->screen_num;
|
||||||
|
|
||||||
ivi_layout_interface->surface_set_transition(ivisurf,
|
ivi_layout_interface->surface_set_transition(ivisurf,
|
||||||
IVI_LAYOUT_TRANSITION_VIEW_DEFAULT,
|
IVI_LAYOUT_TRANSITION_VIEW_DEFAULT,
|
||||||
duration);
|
duration);
|
||||||
|
|
||||||
ivi_layout_interface->surface_set_visibility(ivisurf, true);
|
ivi_layout_interface->surface_set_visibility(ivisurf, true);
|
||||||
surface_x = rand() % (layer->width - surface_width);
|
|
||||||
surface_y = rand() % (layer->height - surface_height);
|
surface_width = (int32_t)(layers[layer_idx]->width * 0.25f);
|
||||||
|
surface_height = (int32_t)(layers[layer_idx]->height * 0.25f);
|
||||||
|
surface_x = rand() % (layers[layer_idx]->width - surface_width);
|
||||||
|
surface_y = rand() % (layers[layer_idx]->height - surface_height);
|
||||||
|
|
||||||
ivi_layout_interface->surface_set_destination_rectangle(ivisurf,
|
ivi_layout_interface->surface_set_destination_rectangle(ivisurf,
|
||||||
surface_x,
|
surface_x,
|
||||||
surface_y,
|
surface_y,
|
||||||
surface_width,
|
surface_width,
|
||||||
surface_height);
|
surface_height);
|
||||||
|
|
||||||
|
ivi_layout_interface->layer_add_surface(layers[layer_idx]->ivilayer, ivisurf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(layers);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t
|
static int32_t
|
||||||
|
|
Loading…
Reference in New Issue