On Tue, Dec 18, 2012 at 7:24 AM, Scott Moreau <[email protected]> wrote:
> 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? > I see now the whitespace wasn't changed per se, the variable was moved to a different part of the struct. > > >> >> @@ -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
