ivi-shell: fit source rectangle of ivi-surface to the size of application content.
authorNobuhiko Tanibata <nobuhiko_tanibata@xddp.denso.co.jp>
Mon, 27 Apr 2015 08:00:25 +0000 (17:00 +0900)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Tue, 28 Apr 2015 09:59:19 +0000 (12:59 +0300)
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 <nobuhiko_tanibata@xddp.denso.co.jp>
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
ivi-shell/hmi-controller.c

index 2d15e06..cd79c38 100644 (file)
@@ -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);
 }