From 65160dcadeefd49b8ec9cf6cbabf0ef85e4288b0 Mon Sep 17 00:00:00 2001 From: Nobuhiko Tanibata Date: Mon, 27 Apr 2015 17:00:25 +0900 Subject: [PATCH] ivi-shell: fit source rectangle of ivi-surface to the size of application content. When application changes the size of its content, UI shall fit the source rectangle, view area, to the size of its content to show whole content. Signed-off-by: Nobuhiko Tanibata Acked-by: Pekka Paalanen --- ivi-shell/hmi-controller.c | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c index 2d15e063..cd79c386 100644 --- a/ivi-shell/hmi-controller.c +++ b/ivi-shell/hmi-controller.c @@ -542,6 +542,45 @@ set_notification_configure_surface(struct ivi_layout_surface *ivisurf, void *userdata) { struct hmi_controller *hmi_ctrl = userdata; + struct ivi_layout_layer *application_layer = + hmi_ctrl->application_layer.ivilayer; + struct weston_surface *surface; + struct ivi_layout_surface **ivisurfs; + int32_t length = 0; + int32_t i; + + /* return if the surface is not application content */ + if (is_surf_in_ui_widget(hmi_ctrl, ivisurf)) { + return; + } + + /* + * if application changes size of wl_buffer. The source rectangle shall be + * fit to the size. + */ + surface = ivi_controller_interface->surface_get_weston_surface(ivisurf); + if (surface) { + ivi_controller_interface->surface_set_source_rectangle( + ivisurf, 0, 0, surface->width, + surface->height); + } + + /* + * search if the surface is already added to layer. + * If not yet, it is newly invoded application to go to switch_mode. + */ + ivi_controller_interface->get_surfaces_on_layer(application_layer, + &length, &ivisurfs); + for (i = 0; i < length; i++) { + if (ivisurf == ivisurfs[i]) { + /* + * if it is non new invoked application, just call + * commit_changes to apply source_rectangle. + */ + ivi_controller_interface->commit_changes(); + return; + } + } switch_mode(hmi_ctrl, hmi_ctrl->layout_mode); }