mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-29 16:05:59 +01:00
surface: introduce wlr_surface_get_buffer_source_box
This helper allows compositors to retrieve the buffer source box in buffer-local coordinates.
This commit is contained in:
parent
eb22ae97b0
commit
c618a76540
2 changed files with 34 additions and 0 deletions
|
@ -262,4 +262,15 @@ void wlr_surface_for_each_surface(struct wlr_surface *surface,
|
||||||
void wlr_surface_get_effective_damage(struct wlr_surface *surface,
|
void wlr_surface_get_effective_damage(struct wlr_surface *surface,
|
||||||
pixman_region32_t *damage);
|
pixman_region32_t *damage);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the source rectangle describing the region of the buffer that needs to
|
||||||
|
* be sampled to render this surface's current state. The box is in
|
||||||
|
* buffer-local coordinates.
|
||||||
|
*
|
||||||
|
* If the viewport's source rectangle is unset, the position is zero and the
|
||||||
|
* size is the buffer's.
|
||||||
|
*/
|
||||||
|
void wlr_surface_get_buffer_source_box(struct wlr_surface *surface,
|
||||||
|
struct wlr_fbox *box);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1226,3 +1226,26 @@ void wlr_surface_get_effective_damage(struct wlr_surface *surface,
|
||||||
surface->previous.width, surface->previous.height);
|
surface->previous.width, surface->previous.height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wlr_surface_get_buffer_source_box(struct wlr_surface *surface,
|
||||||
|
struct wlr_fbox *box) {
|
||||||
|
box->x = box->y = 0;
|
||||||
|
box->width = surface->current.buffer_width;
|
||||||
|
box->height = surface->current.buffer_height;
|
||||||
|
|
||||||
|
if (surface->current.viewport.has_src) {
|
||||||
|
box->x = surface->current.viewport.src.x * surface->current.scale;
|
||||||
|
box->y = surface->current.viewport.src.y * surface->current.scale;
|
||||||
|
box->width = surface->current.viewport.src.width * surface->current.scale;
|
||||||
|
box->height = surface->current.viewport.src.height * surface->current.scale;
|
||||||
|
if ((surface->current.transform & WL_OUTPUT_TRANSFORM_90) != 0) {
|
||||||
|
double tmp = box->x;
|
||||||
|
box->x = box->y;
|
||||||
|
box->y = tmp;
|
||||||
|
|
||||||
|
tmp = box->width;
|
||||||
|
box->width = box->height;
|
||||||
|
box->height = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue