.gitignore | 10 COPYING | 44 Makefile.am | 338 +++++-- README | 149 +++ clients/calibrator.c | 38 clients/clickdot.c | 34 clients/cliptest.c | 33 clients/desktop-shell.c | 38 clients/dnd.c | 36 clients/editor.c | 37 clients/eventdemo.c | 42 clients/flower.c | 33 clients/fullscreen.c | 33 clients/gears.c | 33 clients/glmatrix.c | 1062 ---------------------- clients/image.c | 37 clients/ivi-shell-user-interface.c | 44 clients/keyboard.c | 33 clients/matrix3.xpm | 692 -------------- clients/multi-resource.c | 35 clients/nested-client.c | 33 clients/nested.c | 36 clients/presentation-shm.c | 86 + clients/resizor.c | 33 clients/scaler.c | 33 clients/screenshot.c | 35 clients/simple-damage.c | 35 clients/simple-dmabuf.c | 591 ++++++++++++ clients/simple-egl.c | 35 clients/simple-shm.c | 35 clients/simple-touch.c | 38 clients/smoke.c | 33 clients/stacking.c | 34 clients/subsurfaces.c | 40 clients/terminal.c | 90 - clients/transformed.c | 33 clients/weston-info.c | 40 clients/weston-simple-im.c | 33 clients/window.c | 210 ++-- clients/window.h | 49 - clients/wscreensaver-glue.c | 148 --- clients/wscreensaver-glue.h | 120 -- clients/wscreensaver.c | 348 ------- clients/wscreensaver.h | 63 - configure.ac | 75 + data/wayland.svg | 36 desktop-shell/exposay.c | 85 + desktop-shell/input-panel.c | 41 desktop-shell/shell.c | 746 +++++++-------- desktop-shell/shell.h | 48 - doc/doxygen/devtools.dox | 51 + doc/doxygen/tooldev.doxygen.in | 11 doc/doxygen/tools.dox | 31 doc/doxygen/tools.doxygen.in | 10 doc/doxygen/tools_arch_new.gv | 85 + doc/doxygen/tools_arch_old.gv | 53 + fullscreen-shell/fullscreen-shell.c | 86 + ivi-shell/hmi-controller.c | 141 +-- ivi-shell/input-panel-ivi.c | 43 ivi-shell/ivi-layout-export.h | 58 - ivi-shell/ivi-layout-private.h | 47 - ivi-shell/ivi-layout-transition.c | 39 ivi-shell/ivi-layout.c | 984 ++++++++++----------- ivi-shell/ivi-shell.c | 95 +- ivi-shell/ivi-shell.h | 37 man/weston.ini.man | 26 man/weston.man | 4 protocol/desktop-shell.xml | 4 protocol/input-method.xml | 38 protocol/ivi-application.xml | 35 protocol/ivi-hmi-controller.xml | 33 protocol/linux-dmabuf.xml | 274 +++++ protocol/presentation_timing.xml | 38 protocol/scaler.xml | 38 protocol/text.xml | 48 - protocol/weston-test.xml | 38 protocol/xdg-shell.xml | 80 + releasing.txt | 9 shared/cairo-util.c | 38 shared/cairo-util.h | 37 shared/config-parser.c | 40 shared/config-parser.h | 35 shared/file-util.c | 35 shared/file-util.h | 35 shared/frame.c | 35 shared/helpers.h | 96 ++ shared/image-loader.c | 38 shared/image-loader.h | 35 shared/matrix.c | 35 shared/matrix.h | 35 shared/option-parser.c | 35 shared/os-compatibility.c | 57 - shared/os-compatibility.h | 38 shared/platform.h | 35 shared/timespec-util.h | 75 + shared/zalloc.h | 35 src/animation.c | 36 src/bindings.c | 121 +- src/clipboard.c | 36 src/cms-colord.c | 90 + src/cms-helper.c | 35 src/cms-helper.h | 35 src/cms-static.c | 41 src/compositor-drm.c | 1202 +++++++++++++++---------- src/compositor-fbdev.c | 213 ++-- src/compositor-headless.c | 140 +- src/compositor-rdp.c | 268 +++-- src/compositor-rpi.c | 194 ++-- src/compositor-wayland.c | 436 ++++----- src/compositor-x11.c | 635 +++++++------ src/compositor.c | 1000 +++------------------ src/compositor.h | 141 +-- src/data-device.c | 82 - src/dbus.c | 35 src/dbus.h | 35 src/gl-renderer.c | 361 ++++++- src/gl-renderer.h | 35 src/input.c | 410 +++++--- src/launcher-util.c | 35 src/launcher-util.h | 35 src/libbacklight.c | 2 src/libbacklight.h | 32 src/libinput-device.c | 36 src/libinput-device.h | 35 src/libinput-seat.c | 66 - src/libinput-seat.h | 35 src/linux-dmabuf.c | 497 ++++++++++ src/linux-dmabuf.h | 84 + src/log.c | 42 src/logind-util.c | 37 src/logind-util.h | 35 src/main.c | 851 ++++++++++++++++++ src/noop-renderer.c | 35 src/pixman-renderer.c | 38 src/pixman-renderer.h | 35 src/rpi-renderer.c | 109 -- src/rpi-renderer.h | 35 src/screen-share.c | 66 - src/screenshooter.c | 54 - src/spring-tool.c | 35 src/text-backend.c | 262 +++-- src/timeline-object.h | 35 src/timeline.c | 35 src/timeline.h | 35 src/vaapi-recorder.c | 47 - src/vaapi-recorder.h | 35 src/version.h.in | 35 src/vertex-clipping.c | 35 src/vertex-clipping.h | 35 src/weston-egl-ext.h | 48 - src/weston-launch.c | 53 - src/weston-launch.h | 35 src/zoom.c | 76 - tests/bad-buffer-test.c | 37 tests/buffer-count-test.c | 37 tests/button-test.c | 35 tests/config-parser-test.c | 406 +++++++- tests/devices-test.c | 35 tests/event-test.c | 35 tests/internal-screenshot-test.c | 60 - tests/ivi-shell-app-test.c | 35 tests/ivi-test.h | 39 tests/ivi_layout-internal-test.c | 1125 +++++++++++++++++++++++- tests/ivi_layout-test-plugin.c | 787 +++++++++++++++- tests/ivi_layout-test.c | 271 +++++ tests/keyboard-test.c | 37 tests/matrix-test.c | 37 tests/presentation-test.c | 36 tests/roles-test.c | 35 tests/setbacklight.c | 35 tests/subsurface-test.c | 35 tests/surface-global-test.c | 37 tests/surface-screenshot.c | 45 tests/surface-test.c | 37 tests/text-test.c | 35 tests/vertex-clip-test.c | 38 tests/weston-test-client-helper.c | 39 tests/weston-test-client-helper.h | 36 tests/weston-test-runner.c | 35 tests/weston-test-runner.h | 39 tests/weston-test.c | 50 - tests/xwayland-test.c | 35 tools/zunitc/doc/zunitc.dox | 159 +++ tools/zunitc/inc/zunitc/zunitc.h | 696 ++++++++++++++ tools/zunitc/inc/zunitc/zunitc_impl.h | 105 ++ tools/zunitc/src/main.c | 58 + tools/zunitc/src/zuc_base_logger.c | 404 ++++++++ tools/zunitc/src/zuc_base_logger.h | 38 tools/zunitc/src/zuc_collector.c | 427 +++++++++ tools/zunitc/src/zuc_collector.h | 58 + tools/zunitc/src/zuc_context.h | 58 + tools/zunitc/src/zuc_event.h | 86 + tools/zunitc/src/zuc_event_listener.h | 174 +++ tools/zunitc/src/zuc_junit_reporter.c | 471 ++++++++++ tools/zunitc/src/zuc_junit_reporter.h | 38 tools/zunitc/src/zuc_types.h | 80 + tools/zunitc/src/zunitc_impl.c | 1589 ++++++++++++++++++++++++++++++++++ tools/zunitc/test/fixtures_test.c | 106 ++ tools/zunitc/test/zunitc_test.c | 464 +++++++++ wcap/main.c | 39 wcap/wcap-decode.c | 39 wcap/wcap-decode.h | 35 weston.ini.in | 5 xwayland/dnd.c | 38 xwayland/launcher.c | 36 xwayland/selection.c | 56 - xwayland/window-manager.c | 143 +-- xwayland/xwayland.h | 35 208 files changed, 17727 insertions(+), 9097 deletions(-)
New commits: commit b05cdb82f7465381288d051b57a9468c77f7e45a Author: Bryce Harrington <br...@osg.samsung.com> Date: Mon Sep 21 18:11:26 2015 -0700 configure.ac: bump to version 1.9.0 for the official release diff --git a/configure.ac b/configure.ac index 1978705..acb9b02 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ m4_define([weston_major_version], [1]) -m4_define([weston_minor_version], [8]) -m4_define([weston_micro_version], [93]) +m4_define([weston_minor_version], [9]) +m4_define([weston_micro_version], [0]) m4_define([weston_version], [weston_major_version.weston_minor_version.weston_micro_version]) @@ -59,7 +59,7 @@ AC_CHECK_HEADERS([execinfo.h]) AC_CHECK_FUNCS([mkostemp strchrnul initgroups posix_fallocate]) -COMPOSITOR_MODULES="wayland-server >= 1.8.0 pixman-1 >= 0.25.2" +COMPOSITOR_MODULES="wayland-server >= 1.9.0 pixman-1 >= 0.25.2" AC_CONFIG_FILES([doc/doxygen/tools.doxygen doc/doxygen/tooldev.doxygen]) @@ -317,7 +317,7 @@ AC_SUBST(JPEG_LIBS) PKG_CHECK_MODULES(CAIRO, [cairo]) -PKG_CHECK_MODULES(TEST_CLIENT, [wayland-client >= 1.8.0]) +PKG_CHECK_MODULES(TEST_CLIENT, [wayland-client >= 1.9.0]) AC_ARG_ENABLE(simple-clients, AS_HELP_STRING([--disable-simple-clients], commit 90e2d07ec1e6e46136e7b43f427a838f3e5b01ed Author: Bryce Harrington <br...@osg.samsung.com> Date: Thu Sep 17 16:33:48 2015 -0700 releasing: Note need for pgp signing announcement diff --git a/releasing.txt b/releasing.txt index 1380361..f35a2e0 100644 --- a/releasing.txt +++ b/releasing.txt @@ -22,7 +22,8 @@ To make a release of Weston and/or Wayland, follow these steps. you install it to a location other than /usr/bin/Xwayland, specify this in the following env var: - export DISTCHECK_CONFIGURE_FLAGS="--with-xserver-path=<your-Xwayland-path>" + XWAYLAND=$(which Xwayland) # Or specify your own path + export DISTCHECK_CONFIGURE_FLAGS="--with-xserver-path=$XWAYLAND" If you're using a locally installed libinput or other dependency libraries, you'll likely need to set a few other environment @@ -58,7 +59,7 @@ To make a release of Weston and/or Wayland, follow these steps. listing of the most notable changes. For x.y.0 releases, indicate the schedule for the x.y+1.0 release. - 5. Send the release announcements to + 5. pgp sign the the release announcements and send them to wayland-de...@lists.freedesktop.org 6. Get your freshly posted release email URL from commit 30e24ed51c37dad7846188ae1bd83f207961beb8 Author: Bryce Harrington <br...@osg.samsung.com> Date: Tue Sep 15 20:20:37 2015 -0700 configure.ac: bump to version 1.8.93 for the RC1 release diff --git a/configure.ac b/configure.ac index 17a3754..1978705 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ m4_define([weston_major_version], [1]) m4_define([weston_minor_version], [8]) -m4_define([weston_micro_version], [92]) +m4_define([weston_micro_version], [93]) m4_define([weston_version], [weston_major_version.weston_minor_version.weston_micro_version]) commit 45a7c27f2b69870ad2fe516ab1290a6a14d2d08a Author: Derek Foreman <der...@osg.samsung.com> Date: Fri Sep 11 14:27:40 2015 -0500 clients: If available, prefer top level surfaces for move or rotate This stops us from rotating or moving pop-up menus by instead rotating their parents. This is easiest to see using a multi-seat configuration. Signed-off-by: Derek Foreman <der...@osg.samsung.com> Reviewed-by: Bryce Harrington <br...@osg.samsung.com> diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index ecc42c5..3c6a3da 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -481,6 +481,25 @@ get_output_work_area(struct desktop_shell *shell, } } +static struct shell_surface * +find_toplevel_surface(struct shell_surface *in_surface) +{ + struct shell_surface *surface = in_surface; + + if (!surface) + return NULL; + + while (surface->parent) + surface = get_shell_surface(surface->parent); + + /* If no top level surface was found, just use whatever surface was + originally provided. */ + if (!surface || surface->type != SHELL_SURFACE_TOPLEVEL) + surface = in_surface; + + return surface; +} + static void send_configure_for_surface(struct shell_surface *shsurf) { @@ -1770,6 +1789,8 @@ surface_move(struct shell_surface *shsurf, struct weston_pointer *pointer, if (!shsurf) return -1; + shsurf = find_toplevel_surface(shsurf); + if (shsurf->grabbed || shsurf->state.fullscreen || shsurf->state.maximized) return 0; @@ -4994,6 +5015,8 @@ surface_rotate(struct shell_surface *surface, struct weston_pointer *pointer) float dx, dy; float r; + surface = find_toplevel_surface(surface); + rotate = malloc(sizeof *rotate); if (!rotate) return; commit c0c1497f999cea4d488ed334636b00b227fdca13 Author: Derek Foreman <der...@osg.samsung.com> Date: Fri Sep 11 14:30:39 2015 -0500 shell: Make sure we actually have a resource in end_busy_cursor It's actually possible to get here after the surface has been destroyed, especially when running client apps under valgrind. That probably shouldn't be able to segfault the compositor. Signed-off-by: Derek Foreman <der...@osg.samsung.com> Reviewed-by: Bryce Harrington <br...@osg.samsung.com> diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 034d39b..ecc42c5 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -2119,6 +2119,7 @@ end_busy_cursor(struct weston_compositor *compositor, struct wl_client *client) grab = (struct shell_grab *) pointer->grab; if (grab->grab.interface == &busy_cursor_grab_interface && + grab->shsurf->resource && wl_resource_get_client(grab->shsurf->resource) == client) { shell_grab_end(grab); free(grab); commit ca510d06dca3e47e434a50cee105e96c9e82599c Author: John Sadler <deathofathousandpaperc...@gmail.com> Date: Sat Sep 5 15:01:38 2015 +0100 rpi: fix segfault at startup in rpi_flippipe_init() v2 When running with the RPi backend, Weston now segfaults at startup on the line: flippipe->clk_id = output->base.compositor->presentation_clock; in `rpi_flippipe_init()`. This is because `output->base.compositor` is NULL. This problem did not exist on 1.8.0, and it looks like it may have been introduced by 954f183e2f. This commit ensures that the `compositor` is initialised in `rpi_backend` and that flippipe init uses the compositor pointer from backend. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91885 Signed-off-by: John Sadler <deathofathousandpaperc...@gmail.com> Changes in v2: - fix summary to not break the build - use output->backend->compositor in rpi_flippipe_init() instead of output->base.compositor. The latter is set by weston_output_init() which gets called later than rpi_flippipe_init(). Signed-off-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> Tested-by: John Sadler <deathofathousandpaperc...@gmail.com> diff --git a/src/compositor-rpi.c b/src/compositor-rpi.c index 5d7f41d..83c01b4 100644 --- a/src/compositor-rpi.c +++ b/src/compositor-rpi.c @@ -184,6 +184,7 @@ rpi_flippipe_handler(int fd, uint32_t mask, void *data) static int rpi_flippipe_init(struct rpi_flippipe *flippipe, struct rpi_output *output) { + struct weston_compositor *compositor = output->backend->compositor; struct wl_event_loop *loop; int fd[2]; @@ -192,9 +193,9 @@ rpi_flippipe_init(struct rpi_flippipe *flippipe, struct rpi_output *output) flippipe->readfd = fd[0]; flippipe->writefd = fd[1]; - flippipe->clk_id = output->base.compositor->presentation_clock; + flippipe->clk_id = compositor->presentation_clock; - loop = wl_display_get_event_loop(output->base.compositor->wl_display); + loop = wl_display_get_event_loop(compositor->wl_display); flippipe->source = wl_event_loop_add_fd(loop, flippipe->readfd, WL_EVENT_READABLE, rpi_flippipe_handler, output); @@ -498,6 +499,7 @@ rpi_backend_create(struct weston_compositor *compositor, backend->base.destroy = rpi_backend_destroy; backend->base.restore = rpi_restore; + backend->compositor = compositor; backend->prev_state = WESTON_COMPOSITOR_ACTIVE; backend->single_buffer = param->renderer.single_buffer; commit 7978bc82dd056933a3998c54d9a7bd43cecae19f Author: Derek Foreman <der...@osg.samsung.com> Date: Wed Sep 2 16:21:54 2015 -0500 terminal: Don't crash when selecting non-ascii characters So it turns out if you cat /dev/urandom and drag select in the mess you can crash weston-terminal. There may also be more legitimate ways of doing this. The reason is that isalpha() and isdigit() only accept values that fit within an unsigned char or are EOF. By treating values < 0 the same as values > 127 we prevent this crash. Signed-off-by: Derek Foreman <der...@osg.samsung.com> Reviewed-by: Bryce Harrington <br...@osg.samsung.com> diff --git a/clients/terminal.c b/clients/terminal.c index f1d8fc0..c5d5d60 100644 --- a/clients/terminal.c +++ b/clients/terminal.c @@ -2579,7 +2579,7 @@ static int wordsep(int ch) { const char extra[] = "-,./?%&#:_=+@~"; - if (ch > 127) + if (ch > 127 || ch < 0) return 1; return ch == 0 || !(isalpha(ch) || isdigit(ch) || strchr(extra, ch)); commit 617933840bd3c190d0bd3c4aa4acf99d3caea016 Author: Derek Foreman <der...@osg.samsung.com> Date: Wed Sep 2 13:45:20 2015 -0500 compositor-fbdev: Remove bizarre division by sizeof Really not sure why this was even here - it worked because we were dividing by 1. Signed-off-by: Derek Foreman <der...@osg.samsung.com> Reviewed-by: Bryce Harrington <br...@osg.samsung.com> diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c index a5c7947..81281d0 100644 --- a/src/compositor-fbdev.c +++ b/src/compositor-fbdev.c @@ -337,7 +337,7 @@ fbdev_query_screen_info(struct fbdev_output *output, int fd, info->buffer_length = fixinfo.smem_len; info->line_length = fixinfo.line_length; - strncpy(info->id, fixinfo.id, sizeof(info->id) / sizeof(*info->id)); + strncpy(info->id, fixinfo.id, sizeof(info->id)); info->pixel_format = calculate_pixman_format(&varinfo, &fixinfo); info->refresh_rate = calculate_refresh_rate(&varinfo); commit 3f32a13acdd2b98c87f96a94ee7089df4fd429af Author: Pekka Paalanen <pekka.paala...@collabora.co.uk> Date: Mon Sep 7 15:38:43 2015 +0300 Revert "compositor-drm: disable hardware cursors" This reverts commit 6858383d51b12632481370fdc7d886a1e6bb4ebd. The main reason for the original patch was a regression on the Intel drivers causing compositor framerate to drop to half during cursor updates or motion. The Intel problem was fixed in https://github.com/torvalds/linux/commit/2e7f43c41c042d6fed4d67aceeaae32d8f102e98 The fix is included in Linux 4.1-rc6 and 4.0.5. The comment in the original patch is still true, but arguably the possible minor glitches with cursor updates are less bad than not using cursor planes at all. Cc: nerdopolis <bluescreen_aven...@verizon.net> Cc: Daniel Stone <dan...@fooishbar.org> Cc: Giulio Camuffo <giuliocamu...@gmail.com> Cc: David FORT <cont...@hardening-consulting.com> Signed-off-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> Tested-by: Giulio Camuffo <giuliocamu...@gmail.com> Reviewed-by: Giulio Camuffo <giuliocamu...@gmail.com> Reviewed-by: Daniel Vetter <daniel.vet...@ffwll.ch> diff --git a/src/compositor-drm.c b/src/compositor-drm.c index f5f125a..6777bf8 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -3075,12 +3075,12 @@ drm_backend_create(struct weston_compositor *compositor, * without nuclear page flip. Without nuclear/atomic, hw plane * and cursor plane updates would either tear or cause extra * waits for vblanks which means dropping the compositor framerate - * to a fraction. + * to a fraction. For cursors, it's not so bad, so they are + * enabled. * * These can be enabled again when nuclear/atomic support lands. */ b->sprites_are_broken = 1; - b->cursors_are_broken = 1; b->compositor = compositor; section = weston_config_get_section(config, "core", NULL, NULL); commit ae6f1bb3f7f7cc90523f6fa184c52ee8d77d9bc5 Author: Bryce Harrington <br...@osg.samsung.com> Date: Tue Sep 8 19:24:12 2015 -0700 clients: Fix height typo in clamp_view() We should be checking our scaled image height against the allocation height rather than the allocation width. Fixes vertical image motion when horizontal motion restricted, i.e. when window is wide and short compared to the image. Signed-off-by: Bryce Harrington <br...@osg.samsung.com> Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> diff --git a/clients/image.c b/clients/image.c index d28f221..4126305 100644 --- a/clients/image.c +++ b/clients/image.c @@ -93,7 +93,7 @@ clamp_view(struct image *image) image->matrix.x0 = allocation.width - sw; } - if (sh < allocation.width) { + if (sh < allocation.height) { image->matrix.y0 = (allocation.height - image->height * scale) / 2; } else { commit 76287896408841428804ab94dce2adb8b0b896e3 Author: John Sadler <deathofathousandpaperc...@gmail.com> Date: Sat Sep 5 15:01:40 2015 +0100 rpi: prevent segfault on shut-down due to NULL backend When running with the RPi backend, Weston sefaults during shutdown. This is due to the fact that `compositor->backend` is never initialised, and there is no NULL check prior to calling `destroy()`. This commit fixes the issue by making `rpi_backend_create()` intialise `compositor->backend` - just like the X11 backend does. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91886 Signed-off-by: John Sadler <deathofathousandpaperc...@gmail.com> Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> diff --git a/src/compositor-rpi.c b/src/compositor-rpi.c index 602cbee..5d7f41d 100644 --- a/src/compositor-rpi.c +++ b/src/compositor-rpi.c @@ -531,6 +531,8 @@ rpi_backend_create(struct weston_compositor *compositor, goto out_launcher; } + compositor->backend = &backend->base; + return backend; out_launcher: commit 960b5ebd825763c89386f265cb377092beee061a Author: John Sadler <deathofathousandpaperc...@gmail.com> Date: Sat Sep 5 15:01:39 2015 +0100 rpi: avoid segfault in rpir_view_compute_rects() when EGL client destroys buffer This commit works-around a serious issue when running with the RPi backend. When an EGL client shuts down and destroys it's EGL window, Weston dies with a segmentation fault in the above function (because `buffer` is now NULL). The addition of a simple NULL check avoids the problem. This is a minor re-formatting of the patch already submitted here: http://patchwork.freedesktop.org/patch/34885 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85167 Signed-off-by: John Sadler <deathofathousandpaperc...@gmail.com> Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> diff --git a/src/rpi-renderer.c b/src/rpi-renderer.c index a096033..d0a9797 100644 --- a/src/rpi-renderer.c +++ b/src/rpi-renderer.c @@ -703,6 +703,9 @@ rpir_view_compute_rects(struct rpir_view *view, struct weston_buffer *buffer = view->surface->egl_front->buffer_ref.buffer; + if (!buffer) + return -1; + src_width = buffer->width << 16; src_height = buffer->height << 16; } else { commit cdb91d019f9d3af7ffe6df3ccbe27c1bdac47791 Author: Bryce Harrington <br...@osg.samsung.com> Date: Tue Sep 1 16:58:25 2015 -0700 configure.ac: bump to version 1.8.92 for the beta release diff --git a/configure.ac b/configure.ac index 425f071..17a3754 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ m4_define([weston_major_version], [1]) m4_define([weston_minor_version], [8]) -m4_define([weston_micro_version], [91]) +m4_define([weston_micro_version], [92]) m4_define([weston_version], [weston_major_version.weston_minor_version.weston_micro_version]) commit 4412cd1974adf65359d127af12cc815d79469f34 Author: Nobuhiko Tanibata <nobuhiko_tanib...@xddp.denso.co.jp> Date: Mon Aug 24 09:12:37 2015 +0900 hmi-controller: fix wrong width and height are set to a layer of workspace. Signed-off-by: Nobuhiko Tanibata <nobuhiko_tanib...@xddp.denso.co.jp> Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> Reviewed-by: Bryce Harrington <br...@osg.samsung.com> diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c index 19ceef2..c388164 100644 --- a/ivi-shell/hmi-controller.c +++ b/ivi-shell/hmi-controller.c @@ -1287,8 +1287,8 @@ move_workspace_grab_end(struct move_grab *move, struct wl_resource* resource, duration); ivi_controller_interface->layer_set_destination_rectangle(layer, end_pos, pos_y, - hmi_ctrl->workspace_background_layer.width, - hmi_ctrl->workspace_background_layer.height); + hmi_ctrl->workspace_layer.width, + hmi_ctrl->workspace_layer.height); ivi_controller_interface->commit_changes(); } commit d290f881d5004af1758ceda146b911fcd1637e2d Author: Nobuhiko Tanibata <nobuhiko_tanib...@xddp.denso.co.jp> Date: Mon Aug 24 09:12:23 2015 +0900 hmi-controller: fix the laucher layer width A layer for workspace is used to display icons for invoking applications in several pages. These pages are swapped from one to next page. The width of the layer was decided as a size of screen before reading weston.ini. This worked correctly because there was no feature of clipping of layer so the width of layer was not taken account. Now clipping feature is supported. So the width shall be set to correct one after reading weston.ini. Signed-off-by: Nobuhiko Tanibata <nobuhiko_tanib...@xddp.denso.co.jp> Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> Reviewed-by: Bryce Harrington <br...@osg.samsung.com> diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c index 760bf06..19ceef2 100644 --- a/ivi-shell/hmi-controller.c +++ b/ivi-shell/hmi-controller.c @@ -725,27 +725,9 @@ hmi_controller_create(struct weston_compositor *ec) ivi_controller_interface->layer_set_visibility( hmi_ctrl->workspace_background_layer.ivilayer, false); - /* init workspace ivi_layer */ - hmi_ctrl->workspace_layer.x = hmi_ctrl->workspace_background_layer.x; - hmi_ctrl->workspace_layer.y = hmi_ctrl->workspace_background_layer.y; - hmi_ctrl->workspace_layer.width = - hmi_ctrl->workspace_background_layer.width; - hmi_ctrl->workspace_layer.height = - hmi_ctrl->workspace_background_layer.height; - hmi_ctrl->workspace_layer.id_layer = - hmi_ctrl->hmi_setting->workspace_layer_id; - - create_layer(iviscrn, &hmi_ctrl->workspace_layer); - ivi_controller_interface->layer_set_opacity(hmi_ctrl->workspace_layer.ivilayer, 0); - ivi_controller_interface->layer_set_visibility(hmi_ctrl->workspace_layer.ivilayer, - false); wl_list_init(&hmi_ctrl->workspace_fade.layer_list); tmp_link_layer = MEM_ALLOC(sizeof(*tmp_link_layer)); - tmp_link_layer->layout_layer = hmi_ctrl->workspace_layer.ivilayer; - wl_list_insert(&hmi_ctrl->workspace_fade.layer_list, - &tmp_link_layer->link); - tmp_link_layer = MEM_ALLOC(sizeof(*tmp_link_layer)); tmp_link_layer->layout_layer = hmi_ctrl->workspace_background_layer.ivilayer; wl_list_insert(&hmi_ctrl->workspace_fade.layer_list, @@ -980,12 +962,11 @@ static void ivi_hmi_controller_add_launchers(struct hmi_controller *hmi_ctrl, int32_t icon_size) { - struct ivi_layout_layer *layer = hmi_ctrl->workspace_layer.ivilayer; int32_t minspace_x = 10; int32_t minspace_y = minspace_x; - int32_t width = hmi_ctrl->workspace_layer.width; - int32_t height = hmi_ctrl->workspace_layer.height; + int32_t width = hmi_ctrl->workspace_background_layer.width; + int32_t height = hmi_ctrl->workspace_background_layer.height; int32_t x_count = (width - minspace_x) / (minspace_x + icon_size); int32_t space_x = (int32_t)((width - x_count * icon_size) / (1.0 + x_count)); @@ -1015,6 +996,11 @@ ivi_hmi_controller_add_launchers(struct hmi_controller *hmi_ctrl, struct ivi_layout_surface* layout_surface = NULL; uint32_t *add_surface_id = NULL; + struct ivi_layout_screen *iviscrn = NULL; + struct link_layer *tmp_link_layer = NULL; + struct ivi_layout_screen **pp_screen = NULL; + int32_t screen_length = 0; + if (0 == x_count) x_count = 1; @@ -1091,16 +1077,10 @@ ivi_hmi_controller_add_launchers(struct hmi_controller *hmi_ctrl, ivi_controller_interface->get_surface_from_id(data->surface_id); assert(layout_surface); - ret = ivi_controller_interface->layer_add_surface(layer, layout_surface); - assert(!ret); - ret = ivi_controller_interface->surface_set_destination_rectangle( layout_surface, x, y, icon_size, icon_size); assert(!ret); - ret = ivi_controller_interface->surface_set_visibility(layout_surface, true); - assert(!ret); - nx++; if (x_count == nx) { @@ -1109,6 +1089,43 @@ ivi_hmi_controller_add_launchers(struct hmi_controller *hmi_ctrl, } } + /* init workspace ivi_layer */ + hmi_ctrl->workspace_layer.x = hmi_ctrl->workspace_background_layer.x; + hmi_ctrl->workspace_layer.y = hmi_ctrl->workspace_background_layer.y; + hmi_ctrl->workspace_layer.width = + hmi_ctrl->workspace_background_layer.width * hmi_ctrl->workspace_count; + hmi_ctrl->workspace_layer.height = + hmi_ctrl->workspace_background_layer.height; + hmi_ctrl->workspace_layer.id_layer = + hmi_ctrl->hmi_setting->workspace_layer_id; + + ivi_controller_interface->get_screens(&screen_length, &pp_screen); + iviscrn = pp_screen[0]; + free(pp_screen); + create_layer(iviscrn, &hmi_ctrl->workspace_layer); + ivi_controller_interface->layer_set_opacity(hmi_ctrl->workspace_layer.ivilayer, 0); + ivi_controller_interface->layer_set_visibility(hmi_ctrl->workspace_layer.ivilayer, + false); + + tmp_link_layer = MEM_ALLOC(sizeof(*tmp_link_layer)); + tmp_link_layer->layout_layer = hmi_ctrl->workspace_layer.ivilayer; + wl_list_insert(&hmi_ctrl->workspace_fade.layer_list, + &tmp_link_layer->link); + + /* Add surface to layer */ + wl_array_for_each(data, &launchers) { + layout_surface = + ivi_controller_interface->get_surface_from_id(data->surface_id); + assert(layout_surface); + + ret = ivi_controller_interface->layer_add_surface(hmi_ctrl->workspace_layer.ivilayer, + layout_surface); + assert(!ret); + + ret = ivi_controller_interface->surface_set_visibility(layout_surface, true); + assert(!ret); + } + wl_array_release(&launchers); ivi_controller_interface->commit_changes(); } commit acbcc6c9788226fca601155123dbfdcd96f0ccee Author: Nobuhiko Tanibata <nobuhiko_tanib...@xddp.denso.co.jp> Date: Mon Aug 24 10:24:15 2015 +0900 ivi-layout: implement surface clipping View clip region is set in surface-local coordinates. To compute that region, the ivi-layer destination rectangle in the global coordinates are transformed back into the surface-local coordinates. The transformation is computed by first forming the transformation matric for the forward mappings, and then inverting it. The inverse matric is used to transform the destination rectangles to the surface-local coordinate system. The intersection of the rectangles is the view clip mask. Signed-off-by: Nobuhiko Tanibata <nobuhiko_tanib...@xddp.denso.co.jp> Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk> Reviewed-by: Bryce Harrington <br...@osg.samsung.com> diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c index 827359a..24bd8dd 100644 --- a/ivi-shell/ivi-layout.c +++ b/ivi-shell/ivi-layout.c @@ -67,6 +67,8 @@ #include "shared/helpers.h" #include "shared/os-compatibility.h" +#define max(a, b) ((a) > (b) ? (a) : (b)) + struct link_layer { struct ivi_layout_layer *ivilayer; struct wl_list link; @@ -567,18 +569,127 @@ calc_transformation_matrix(struct ivi_rectangle *source_rect, weston_matrix_translate(m, translate_x, translate_y, 0.0f); } +/* + * This computes intersected rect_output from two ivi_rectangles + */ +static void +ivi_rectangle_intersect(const struct ivi_rectangle *rect1, + const struct ivi_rectangle *rect2, + struct ivi_rectangle *rect_output) +{ + int32_t rect1_right = rect1->x + rect1->width; + int32_t rect1_bottom = rect1->y + rect1->height; + int32_t rect2_right = rect2->x + rect2->width; + int32_t rect2_bottom = rect2->y + rect2->height; + + rect_output->x = max(rect1->x, rect2->x); + rect_output->y = max(rect1->y, rect2->y); + rect_output->width = rect1_right < rect2_right ? + rect1_right - rect_output->x : + rect2_right - rect_output->x; + rect_output->height = rect1_bottom < rect2_bottom ? + rect1_bottom - rect_output->y : + rect2_bottom - rect_output->y; + + if (rect_output->width < 0 || rect_output->height < 0) { + rect_output->width = 0; + rect_output->height = 0; + } +} + +/* + * Transform rect_input by the inverse of matrix, intersect with boundingbox, + * and store the result in rect_output. + * The boundingbox must be given in the same coordinate space as rect_output. + * Additionally, there are the following restrictions on the matrix: + * - no projective transformations + * - no skew + * - only multiples of 90-degree rotations supported + * + * In failure case of weston_matrix_invert, rect_output is set to boundingbox + * as a fail-safe with log. + */ +static void +calc_inverse_matrix_transform(const struct weston_matrix *matrix, + const struct ivi_rectangle *rect_input, + const struct ivi_rectangle *boundingbox, + struct ivi_rectangle *rect_output) +{ + struct weston_matrix m; + struct weston_vector top_left; + struct weston_vector bottom_right; + + assert(boundingbox != rect_output); + + if (weston_matrix_invert(&m, matrix) < 0) { + weston_log("ivi-shell: calc_inverse_matrix_transform fails to invert a matrix.\n"); + weston_log("ivi-shell: boundingbox is set to the rect_output.\n"); + rect_output->x = boundingbox->x; + rect_output->y = boundingbox->y; + rect_output->width = boundingbox->width; + rect_output->height = boundingbox->height; + } + + /* The vectors and matrices involved will always produce f[3] == 1.0. */ + top_left.f[0] = rect_input->x; + top_left.f[1] = rect_input->y; + top_left.f[2] = 0.0f; + top_left.f[3] = 1.0f; + + bottom_right.f[0] = rect_input->x + rect_input->width; + bottom_right.f[1] = rect_input->y + rect_input->height; + bottom_right.f[2] = 0.0f; + bottom_right.f[3] = 1.0f; + + weston_matrix_transform(&m, &top_left); + weston_matrix_transform(&m, &bottom_right); + + if (top_left.f[0] < bottom_right.f[0]) { + rect_output->x = top_left.f[0]; + rect_output->width = bottom_right.f[0] - rect_output->x; + } else { + rect_output->x = bottom_right.f[0]; + rect_output->width = top_left.f[0] - rect_output->x; + } + + if (top_left.f[1] < bottom_right.f[1]) { + rect_output->y = top_left.f[1]; + rect_output->height = bottom_right.f[1] - rect_output->y; + } else { + rect_output->y = bottom_right.f[1]; + rect_output->height = top_left.f[1] - rect_output->y; + } + + ivi_rectangle_intersect(rect_output, boundingbox, rect_output); +} + /** - * This computes the whole transformation matrix from surface-local + * This computes the whole transformation matrix:m from surface-local * coordinates to global coordinates. It is assumed that * weston_view::geometry.{x,y} are zero. + * + * Additionally, this computes the mask on surface-local coordinates as a + * ivi_rectangle. This can be set to weston_view_set_mask. + * + * The mask is computed by following steps + * - destination rectangle of layer is inversed to surface-local cooodinates + * by inversed matrix:m. + * - the area is intersected by intersected area between weston_surface and + * source rectangle of ivi_surface. */ static void -calc_surface_to_global_matrix(struct ivi_layout_layer *ivilayer, - struct ivi_layout_surface *ivisurf, - struct weston_matrix *m) +calc_surface_to_global_matrix_and_mask_to_weston_surface( + struct ivi_layout_layer *ivilayer, + struct ivi_layout_surface *ivisurf, + struct weston_matrix *m, + struct ivi_rectangle *result) { const struct ivi_layout_surface_properties *sp = &ivisurf->prop; const struct ivi_layout_layer_properties *lp = &ivilayer->prop; + struct ivi_rectangle weston_surface_rect = { 0, + 0,