From: Nobuhiko Tanibata Date: Mon, 27 Apr 2015 08:00:25 +0000 (+0900) Subject: ivi-shell: fit source rectangle of ivi-surface to the size of application content. X-Git-Tag: 1.7.91~20 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=65160dcadeefd49b8ec9cf6cbabf0ef85e4288b0;p=platform%2Fupstream%2Fweston.git 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 --- diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c index 2d15e06..cd79c38 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); }