compositor: add weston_surface_to_buffer_region()
This will be used by pixman-renderer. v2: Fix doc typo. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-By: Derek Foreman <derekf@osg.samsung.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
8870a23fbd
commit
e54e31c84c
@ -933,6 +933,42 @@ weston_surface_to_buffer_rect(struct weston_surface *surface,
|
||||
rect);
|
||||
}
|
||||
|
||||
/** Transform a region from surface coordinates to buffer coordinates
|
||||
*
|
||||
* \param surface The surface to fetch wl_viewport and buffer transformation
|
||||
* from.
|
||||
* \param surface_region[in] The region in surface coordinates.
|
||||
* \param buffer_region[out] The region converted to buffer coordinates.
|
||||
*
|
||||
* Buffer_region must be init'd, but will be completely overwritten.
|
||||
*
|
||||
* Viewport and buffer transformations can only do translation, scaling,
|
||||
* and rotations in 90-degree steps. Therefore the only loss in the
|
||||
* conversion is coordinate flooring (rounding).
|
||||
*/
|
||||
WL_EXPORT void
|
||||
weston_surface_to_buffer_region(struct weston_surface *surface,
|
||||
pixman_region32_t *surface_region,
|
||||
pixman_region32_t *buffer_region)
|
||||
{
|
||||
pixman_box32_t *src_rects, *dest_rects;
|
||||
int nrects, i;
|
||||
|
||||
src_rects = pixman_region32_rectangles(surface_region, &nrects);
|
||||
dest_rects = malloc(nrects * sizeof(*dest_rects));
|
||||
if (!dest_rects)
|
||||
return;
|
||||
|
||||
for (i = 0; i < nrects; i++) {
|
||||
dest_rects[i] = weston_surface_to_buffer_rect(surface,
|
||||
src_rects[i]);
|
||||
}
|
||||
|
||||
pixman_region32_fini(buffer_region);
|
||||
pixman_region32_init_rects(buffer_region, dest_rects, nrects);
|
||||
free(dest_rects);
|
||||
}
|
||||
|
||||
WL_EXPORT void
|
||||
weston_view_move_to_plane(struct weston_view *view,
|
||||
struct weston_plane *plane)
|
||||
|
@ -1033,6 +1033,11 @@ pixman_box32_t
|
||||
weston_surface_to_buffer_rect(struct weston_surface *surface,
|
||||
pixman_box32_t rect);
|
||||
|
||||
void
|
||||
weston_surface_to_buffer_region(struct weston_surface *surface,
|
||||
pixman_region32_t *surface_region,
|
||||
pixman_region32_t *buffer_region);
|
||||
|
||||
void
|
||||
weston_spring_init(struct weston_spring *spring,
|
||||
double k, double current, double target);
|
||||
|
Loading…
Reference in New Issue
Block a user