On Tue, Dec 18, 2012 at 4:58 AM, Pekka Paalanen <[email protected]> wrote:
> Instead of directly setting the dirty flag on weston_surface geometry, > use a function for that. > > This allows us to hook into geometry dirtying in following patches. > > Also add comments to weston_surface fields, whose modification causes > transform state to become outdated. > > Signed-off-by: Pekka Paalanen <[email protected]> > --- > src/compositor.c | 20 +++++++++++++------- > src/compositor.h | 17 ++++++++++------- > src/shell.c | 24 ++++++++++-------------- > src/util.c | 4 ++-- > src/xwayland/window-manager.c | 4 ++-- > tests/weston-test.c | 2 +- > 6 files changed, 38 insertions(+), 33 deletions(-) > > diff --git a/src/compositor.c b/src/compositor.c > index 0b37e63..24ae6e3 100644 > --- a/src/compositor.c > +++ b/src/compositor.c > @@ -297,7 +297,7 @@ weston_surface_create(struct weston_compositor > *compositor) > &surface->transform.position.link); > weston_matrix_init(&surface->transform.position.matrix); > pixman_region32_init(&surface->transform.boundingbox); > - surface->geometry.dirty = 1; > + surface->transform.dirty = 1; > > surface->pending.buffer_destroy_listener.notify = > surface_handle_pending_buffer_destroy; > @@ -568,10 +568,10 @@ weston_surface_update_transform_enable(struct > weston_surface *surface) > WL_EXPORT void > weston_surface_update_transform(struct weston_surface *surface) > { > - if (!surface->geometry.dirty) > + if (!surface->transform.dirty) > return; > > - surface->geometry.dirty = 0; > + surface->transform.dirty = 0; > > weston_surface_damage_below(surface); > > @@ -596,6 +596,12 @@ weston_surface_update_transform(struct weston_surface > *surface) > } > > WL_EXPORT void > +weston_surface_geometry_dirty(struct weston_surface *surface) > +{ > + surface->transform.dirty = 1; > +} > + > +WL_EXPORT void > weston_surface_to_global_fixed(struct weston_surface *surface, > wl_fixed_t sx, wl_fixed_t sy, > wl_fixed_t *x, wl_fixed_t *y) > @@ -690,7 +696,7 @@ weston_surface_configure(struct weston_surface > *surface, > surface->geometry.y = y; > surface->geometry.width = width; > surface->geometry.height = height; > - surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(surface); > } > > WL_EXPORT void > @@ -699,7 +705,7 @@ weston_surface_set_position(struct weston_surface > *surface, > { > surface->geometry.x = x; > surface->geometry.y = y; > - surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(surface); > } > > WL_EXPORT int > @@ -1393,7 +1399,7 @@ surface_commit(struct wl_client *client, struct > wl_resource *resource) > if (surface->pending.sx || surface->pending.sy || > (surface->pending.buffer && > surface_pending_buffer_has_different_size(surface))) > - surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(surface); > > /* wl_surface.set_buffer_rotation */ > surface->buffer_transform = surface->pending.buffer_transform; > @@ -1426,7 +1432,7 @@ surface_commit(struct wl_client *client, struct > wl_resource *resource) > > if (!pixman_region32_equal(&opaque, &surface->opaque)) { > pixman_region32_copy(&surface->opaque, &opaque); > - surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(surface); > } > > pixman_region32_fini(&opaque); > diff --git a/src/compositor.h b/src/compositor.h > index 1d790d3..3a3580a 100644 > --- a/src/compositor.h > +++ b/src/compositor.h > @@ -360,8 +360,8 @@ struct weston_region { > * To add a transformation to a surface, create a struct > weston_transform, and > * add it to the list surface->geometry.transformation_list. Whenever you > * change the list, anything under surface->geometry, or anything in the > - * weston_transforms linked into the list, you must set > - * surface->geometry.dirty = 1. > + * weston_transforms linked into the list, you must call > + * weston_surface_geometry_dirty(). > * > * The order in the list defines the order of transformations. Let the > list > * contain the transformation matrices M1, ..., Mn as head to tail. The > @@ -385,17 +385,17 @@ struct weston_surface { > struct weston_compositor *compositor; > pixman_region32_t clip; > pixman_region32_t damage; > - pixman_region32_t opaque; > + pixman_region32_t opaque; /* geometry dirty */ > I'm not sure what this comment is supposed to convey. > pixman_region32_t input; > struct wl_list link; > struct wl_list layer_link; > - float alpha; > + float alpha; /* geometry dirty */ > This one as well. > struct weston_plane *plane; > > void *renderer_state; > > /* Surface geometry state, mutable. > - * If you change anything, set dirty = 1. > + * If you change anything, call weston_surface_geometry_dirty(). > * That includes the transformations referenced from the list. > */ > struct { > @@ -404,14 +404,14 @@ struct weston_surface { > > /* struct weston_transform */ > struct wl_list transformation_list; > - > - int dirty; > Why are we changing whitespace here? > } geometry; > > /* State derived from geometry state, read-only. > * This is updated by weston_surface_update_transform(). > */ > struct { > + int dirty; > + > pixman_region32_t boundingbox; > pixman_region32_t opaque; > And here? > > @@ -489,6 +489,9 @@ void > weston_surface_update_transform(struct weston_surface *surface); > > void > +weston_surface_geometry_dirty(struct weston_surface *surface); > + > +void > weston_surface_to_global_fixed(struct weston_surface *surface, > wl_fixed_t sx, wl_fixed_t sy, > wl_fixed_t *x, wl_fixed_t *y); > diff --git a/src/shell.c b/src/shell.c > index aa1c7c1..5b9acd7 100644 > --- a/src/shell.c > +++ b/src/shell.c > @@ -594,7 +594,7 @@ surface_translate(struct weston_surface *surface, > double d) > weston_matrix_init(&shsurf->workspace_transform.matrix); > weston_matrix_translate(&shsurf->workspace_transform.matrix, > 0.0, d, 0.0); > - surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(surface); > } > > static void > @@ -670,7 +670,7 @@ workspace_deactivate_transforms(struct workspace *ws) > wl_list_remove(&shsurf->workspace_transform.link); > wl_list_init(&shsurf->workspace_transform.link); > } > - shsurf->surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(surface); > } > } > > @@ -1511,7 +1511,7 @@ set_surface_type(struct shell_surface *shsurf) > if (!wl_list_empty(&shsurf->rotation.transform.link)) { > wl_list_remove(&shsurf->rotation.transform.link); > wl_list_init(&shsurf->rotation.transform.link); > - shsurf->surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(shsurf->surface); > shsurf->saved_rotation_valid = true; > } > break; > @@ -2404,7 +2404,7 @@ surface_opacity_binding(struct wl_seat *seat, > uint32_t time, uint32_t axis, > if (surface->alpha < step) > surface->alpha = step; > > - surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(surface); > weston_surface_damage(surface); > } > > @@ -2498,7 +2498,7 @@ rotate_grab_motion(struct wl_pointer_grab *grab, > r = sqrtf(dx * dx + dy * dy); > > wl_list_remove(&shsurf->rotation.transform.link); > - shsurf->surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(shsurf->surface); > > if (r > 20.0f) { > struct weston_matrix *matrix = > @@ -2789,7 +2789,7 @@ show_input_panels(struct wl_listener *listener, void > *data) > ws = surface->surface; > wl_list_insert(&shell->input_panel_layer.surface_list, > &ws->layer_link); > - ws->geometry.dirty = 1; > + weston_surface_geometry_dirty(ws); > weston_surface_update_transform(ws); > weston_surface_damage(ws); > weston_slide_run(ws, ws->geometry.height, 0, NULL, NULL); > @@ -2903,7 +2903,7 @@ map(struct desktop_shell *shell, struct > weston_surface *surface, > > surface->geometry.width = width; > surface->geometry.height = height; > - surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(surface); > > /* initial positioning, see also configure() */ > switch (surface_type) { > @@ -2997,11 +2997,7 @@ configure(struct desktop_shell *shell, struct > weston_surface *surface, > if (shsurf) > surface_type = shsurf->type; > > - surface->geometry.x = x; > - surface->geometry.y = y; > - surface->geometry.width = width; > - surface->geometry.height = height; > - surface->geometry.dirty = 1; > + weston_surface_configure(surface, x, y, width, height); > > switch (surface_type) { > case SHELL_SURFACE_FULLSCREEN: > @@ -3342,7 +3338,7 @@ switcher_next(struct switcher *switcher) > next = surface; > prev = surface; > surface->alpha = 0.25; > - surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(surface); > weston_surface_damage(surface); > break; > default: > @@ -3351,7 +3347,7 @@ switcher_next(struct switcher *switcher) > > if (is_black_surface(surface, NULL)) { > surface->alpha = 0.25; > - surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(surface); > weston_surface_damage(surface); > } > } > diff --git a/src/util.c b/src/util.c > index 5f8e9c8..bae1bb9 100644 > --- a/src/util.c > +++ b/src/util.c > @@ -116,7 +116,7 @@ weston_surface_animation_destroy(struct > weston_surface_animation *animation) > wl_list_remove(&animation->animation.link); > wl_list_remove(&animation->listener.link); > wl_list_remove(&animation->transform.link); > - animation->surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(animation->surface); > if (animation->done) > animation->done(animation, animation->data); > free(animation); > @@ -153,7 +153,7 @@ weston_surface_animation_frame(struct weston_animation > *base, > if (animation->frame) > animation->frame(animation); > > - animation->surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(animation->surface); > weston_compositor_schedule_repaint(animation->surface->compositor); > } > > diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c > index 303ef15..168c717 100644 > --- a/src/xwayland/window-manager.c > +++ b/src/xwayland/window-manager.c > @@ -757,7 +757,7 @@ weston_wm_window_draw_decoration(void *data) > x - 1, y - 1, > window->width + 2, > window->height + 2); > - window->surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(window->surface); > > pixman_region32_init_rect(&window->surface->input, > t->margin, t->margin, > @@ -778,7 +778,7 @@ weston_wm_window_schedule_repaint(struct > weston_wm_window *window) > > pixman_region32_fini(&window->surface->pending.opaque); > > pixman_region32_init_rect(&window->surface->pending.opaque, 0, 0, > width, height); > - window->surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(window->surface); > } > return; > } > diff --git a/tests/weston-test.c b/tests/weston-test.c > index be635fa..e89f104 100644 > --- a/tests/weston-test.c > +++ b/tests/weston-test.c > @@ -87,7 +87,7 @@ test_surface_configure(struct weston_surface *surface, > int32_t sx, int32_t sy) > surface->geometry.y = test_surface->y; > surface->geometry.width = surface->buffer_ref.buffer->width; > surface->geometry.height = surface->buffer_ref.buffer->height; > - surface->geometry.dirty = 1; > + weston_surface_geometry_dirty(surface); > > if (!weston_surface_is_mapped(surface)) > weston_surface_update_transform(surface); > -- > 1.7.8.6 > > _______________________________________________ > wayland-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/wayland-devel >
_______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
