mirror of
https://github.com/swaywm/sway.git
synced 2024-11-16 05:03:17 +00:00
Update surface fractional scale on output change
Closes: https://github.com/swaywm/sway/issues/7464
This commit is contained in:
parent
633d409b88
commit
7a6c7d60d5
|
@ -15,6 +15,7 @@ struct sway_surface {
|
||||||
struct wl_event_source *frame_done_timer;
|
struct wl_event_source *frame_done_timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void surface_update_outputs(struct wlr_surface *surface);
|
||||||
void surface_enter_output(struct wlr_surface *surface,
|
void surface_enter_output(struct wlr_surface *surface,
|
||||||
struct sway_output *output);
|
struct sway_output *output);
|
||||||
void surface_leave_output(struct wlr_surface *surface,
|
void surface_leave_output(struct wlr_surface *surface,
|
||||||
|
|
|
@ -859,6 +859,12 @@ static void update_textures(struct sway_container *con, void *data) {
|
||||||
container_update_marks_textures(con);
|
container_update_marks_textures(con);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void update_output_scale_iterator(struct sway_output *output,
|
||||||
|
struct sway_view *view, struct wlr_surface *surface,
|
||||||
|
struct wlr_box *box, void *user_data) {
|
||||||
|
surface_update_outputs(surface);
|
||||||
|
}
|
||||||
|
|
||||||
static void handle_commit(struct wl_listener *listener, void *data) {
|
static void handle_commit(struct wl_listener *listener, void *data) {
|
||||||
struct sway_output *output = wl_container_of(listener, output, commit);
|
struct sway_output *output = wl_container_of(listener, output, commit);
|
||||||
struct wlr_output_event_commit *event = data;
|
struct wlr_output_event_commit *event = data;
|
||||||
|
@ -873,6 +879,7 @@ static void handle_commit(struct wl_listener *listener, void *data) {
|
||||||
|
|
||||||
if (event->committed & WLR_OUTPUT_STATE_SCALE) {
|
if (event->committed & WLR_OUTPUT_STATE_SCALE) {
|
||||||
output_for_each_container(output, update_textures, NULL);
|
output_for_each_container(output, update_textures, NULL);
|
||||||
|
output_for_each_surface(output, update_output_scale_iterator, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->committed & (WLR_OUTPUT_STATE_TRANSFORM | WLR_OUTPUT_STATE_SCALE)) {
|
if (event->committed & (WLR_OUTPUT_STATE_TRANSFORM | WLR_OUTPUT_STATE_SCALE)) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ void handle_compositor_new_surface(struct wl_listener *listener, void *data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void surface_update_outputs(struct wlr_surface *surface) {
|
void surface_update_outputs(struct wlr_surface *surface) {
|
||||||
float scale = 1;
|
float scale = 1;
|
||||||
struct wlr_surface_output *surface_output;
|
struct wlr_surface_output *surface_output;
|
||||||
wl_list_for_each(surface_output, &surface->current_outputs, link) {
|
wl_list_for_each(surface_output, &surface->current_outputs, link) {
|
||||||
|
|
Loading…
Reference in a new issue