mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-04-17 06:46:39 -04:00
wlr_output: Make wlr_output_transformed_resolution take a state
This commit is contained in:
parent
f59706ecc0
commit
c3b5e710f4
5 changed files with 21 additions and 15 deletions
|
|
@ -1179,7 +1179,7 @@ static bool drm_connector_move_cursor(struct wlr_output *output,
|
||||||
struct wlr_box box = { .x = x, .y = y };
|
struct wlr_box box = { .x = x, .y = y };
|
||||||
|
|
||||||
int width, height;
|
int width, height;
|
||||||
wlr_output_transformed_resolution(output, &width, &height);
|
wlr_output_transformed_resolution(output, NULL, &width, &height);
|
||||||
|
|
||||||
enum wl_output_transform transform =
|
enum wl_output_transform transform =
|
||||||
wlr_output_transform_invert(output->transform);
|
wlr_output_transform_invert(output->transform);
|
||||||
|
|
|
||||||
|
|
@ -339,7 +339,7 @@ void wlr_output_destroy(struct wlr_output *output);
|
||||||
* Computes the transformed output resolution.
|
* Computes the transformed output resolution.
|
||||||
*/
|
*/
|
||||||
void wlr_output_transformed_resolution(struct wlr_output *output,
|
void wlr_output_transformed_resolution(struct wlr_output *output,
|
||||||
int *width, int *height);
|
const struct wlr_output_state *state, int *width, int *height);
|
||||||
/**
|
/**
|
||||||
* Computes the transformed and scaled output resolution.
|
* Computes the transformed and scaled output resolution.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -89,8 +89,9 @@ static void output_cursor_get_box(struct wlr_output_cursor *cursor,
|
||||||
|
|
||||||
void wlr_output_add_software_cursors_to_render_pass(struct wlr_output *output,
|
void wlr_output_add_software_cursors_to_render_pass(struct wlr_output *output,
|
||||||
struct wlr_render_pass *render_pass, const pixman_region32_t *damage) {
|
struct wlr_render_pass *render_pass, const pixman_region32_t *damage) {
|
||||||
|
// TODO: pass output state from caller
|
||||||
int width, height;
|
int width, height;
|
||||||
wlr_output_transformed_resolution(output, &width, &height);
|
wlr_output_transformed_resolution(output, NULL, &width, &height);
|
||||||
|
|
||||||
struct wlr_output_cursor *cursor;
|
struct wlr_output_cursor *cursor;
|
||||||
wl_list_for_each(cursor, &output->cursors, link) {
|
wl_list_for_each(cursor, &output->cursors, link) {
|
||||||
|
|
@ -158,7 +159,7 @@ static void output_cursor_reset(struct wlr_output_cursor *cursor) {
|
||||||
static void output_cursor_update_visible(struct wlr_output_cursor *cursor) {
|
static void output_cursor_update_visible(struct wlr_output_cursor *cursor) {
|
||||||
struct wlr_box output_box;
|
struct wlr_box output_box;
|
||||||
output_box.x = output_box.y = 0;
|
output_box.x = output_box.y = 0;
|
||||||
wlr_output_transformed_resolution(cursor->output, &output_box.width,
|
wlr_output_transformed_resolution(cursor->output, NULL, &output_box.width,
|
||||||
&output_box.height);
|
&output_box.height);
|
||||||
|
|
||||||
struct wlr_box cursor_box;
|
struct wlr_box cursor_box;
|
||||||
|
|
|
||||||
|
|
@ -441,19 +441,24 @@ void wlr_output_destroy(struct wlr_output *output) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void wlr_output_transformed_resolution(struct wlr_output *output,
|
void wlr_output_transformed_resolution(struct wlr_output *output,
|
||||||
int *width, int *height) {
|
const struct wlr_output_state *state, int *width, int *height) {
|
||||||
if (output->transform % 2 == 0) {
|
output_pending_resolution(output, state, width, height);
|
||||||
*width = output->width;
|
|
||||||
*height = output->height;
|
enum wl_output_transform transform = output->transform;
|
||||||
} else {
|
if (state && state->committed & WLR_OUTPUT_STATE_TRANSFORM) {
|
||||||
*width = output->height;
|
transform = state->transform;
|
||||||
*height = output->width;
|
}
|
||||||
|
|
||||||
|
if (transform % 2 != 0) {
|
||||||
|
int tmp = *width;
|
||||||
|
*width = *height;
|
||||||
|
*height = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void wlr_output_effective_resolution(struct wlr_output *output,
|
void wlr_output_effective_resolution(struct wlr_output *output,
|
||||||
int *width, int *height) {
|
int *width, int *height) {
|
||||||
wlr_output_transformed_resolution(output, width, height);
|
wlr_output_transformed_resolution(output, NULL, width, height);
|
||||||
*width /= output->scale;
|
*width /= output->scale;
|
||||||
*height /= output->scale;
|
*height /= output->scale;
|
||||||
}
|
}
|
||||||
|
|
@ -476,7 +481,7 @@ struct wlr_output_mode *wlr_output_preferred_mode(struct wlr_output *output) {
|
||||||
|
|
||||||
void output_pending_resolution(struct wlr_output *output,
|
void output_pending_resolution(struct wlr_output *output,
|
||||||
const struct wlr_output_state *state, int *width, int *height) {
|
const struct wlr_output_state *state, int *width, int *height) {
|
||||||
if (state->committed & WLR_OUTPUT_STATE_MODE) {
|
if (state && state->committed & WLR_OUTPUT_STATE_MODE) {
|
||||||
switch (state->mode_type) {
|
switch (state->mode_type) {
|
||||||
case WLR_OUTPUT_STATE_MODE_FIXED:
|
case WLR_OUTPUT_STATE_MODE_FIXED:
|
||||||
*width = state->mode->width;
|
*width = state->mode->width;
|
||||||
|
|
|
||||||
|
|
@ -339,7 +339,7 @@ static void logical_to_buffer_coords(pixman_region32_t *damage, const struct ren
|
||||||
|
|
||||||
static void output_to_buffer_coords(pixman_region32_t *damage, struct wlr_output *output) {
|
static void output_to_buffer_coords(pixman_region32_t *damage, struct wlr_output *output) {
|
||||||
int width, height;
|
int width, height;
|
||||||
wlr_output_transformed_resolution(output, &width, &height);
|
wlr_output_transformed_resolution(output, NULL, &width, &height);
|
||||||
|
|
||||||
wlr_region_transform(damage, damage,
|
wlr_region_transform(damage, damage,
|
||||||
wlr_output_transform_invert(output->transform), width, height);
|
wlr_output_transform_invert(output->transform), width, height);
|
||||||
|
|
@ -1579,7 +1579,7 @@ static void scene_output_handle_damage(struct wl_listener *listener, void *data)
|
||||||
struct wlr_output_event_damage *event = data;
|
struct wlr_output_event_damage *event = data;
|
||||||
|
|
||||||
int width, height;
|
int width, height;
|
||||||
wlr_output_transformed_resolution(output, &width, &height);
|
wlr_output_transformed_resolution(output, NULL, &width, &height);
|
||||||
|
|
||||||
pixman_region32_t damage;
|
pixman_region32_t damage;
|
||||||
pixman_region32_init(&damage);
|
pixman_region32_init(&damage);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue