window: create sub-surfaces
authorPekka Paalanen <ppaalanen@gmail.com>
Thu, 25 Apr 2013 10:57:48 +0000 (13:57 +0300)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 10 May 2013 18:35:53 +0000 (14:35 -0400)
commit35e82631b61a41fc8527258bd00afaf17990b0ed
treeda51ccdc9a9e9e458f7c33423234ba44d5812fe8
parentaef0254dd58bcfd4310f5e3986c3485f32d48284
window: create sub-surfaces

The new application API window_add_subsurface() will create a plain
widget that is on a new sub-surface.

The sub-surface position is taken from the surface's root widget
allocation. This way widget allocations are always in the main surface
(i.e. window) coordinates. However, Cairo drawing coordinates will now
be different to widget coordinates for sub-surfaces. Cairo coordinates
are fixed by applying a translation in widget_cairo_create(), so that
widget drawing code can simply use the widget allocation as before.

Sub-surfaces are hooked up into resize, window flush, redraw, and
find_widget. Window maintains a list of sub-surfaces in top-first order.

Add a client settable default commit mode, and toggle the mode when
resizing to guarantee in-sync updates of a window and its sub-surfaces.

Changes in v3:
- replaced set_commit_mode with set_sync and set_desync

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
clients/window.c
clients/window.h