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);
|
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
|
WL_EXPORT void
|
||||||
weston_view_move_to_plane(struct weston_view *view,
|
weston_view_move_to_plane(struct weston_view *view,
|
||||||
struct weston_plane *plane)
|
struct weston_plane *plane)
|
||||||
|
@ -1033,6 +1033,11 @@ pixman_box32_t
|
|||||||
weston_surface_to_buffer_rect(struct weston_surface *surface,
|
weston_surface_to_buffer_rect(struct weston_surface *surface,
|
||||||
pixman_box32_t rect);
|
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
|
void
|
||||||
weston_spring_init(struct weston_spring *spring,
|
weston_spring_init(struct weston_spring *spring,
|
||||||
double k, double current, double target);
|
double k, double current, double target);
|
||||||
|
Loading…
Reference in New Issue
Block a user