diff options
author | Alexander Orzechowski <alex@ozal.ski> | 2024-03-07 18:03:40 -0500 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2024-03-09 11:47:42 +0100 |
commit | 2e951163c5a5f24fe9cf7ee348e56b09719a99a9 (patch) | |
tree | 4280fd944e8e77d0e5ee20eb54be2b45a094328b /sway/desktop/output.c | |
parent | config/output: drop enabling flag (diff) | |
download | sway-2e951163c5a5f24fe9cf7ee348e56b09719a99a9.tar.gz sway-2e951163c5a5f24fe9cf7ee348e56b09719a99a9.tar.zst sway-2e951163c5a5f24fe9cf7ee348e56b09719a99a9.zip |
Force bilinear scaling when scaling down
Diffstat (limited to 'sway/desktop/output.c')
-rw-r--r-- | sway/desktop/output.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 600423bc..b8f2d32d 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c | |||
@@ -183,7 +183,15 @@ static void send_frame_done_iterator(struct wlr_scene_buffer *buffer, | |||
183 | } | 183 | } |
184 | } | 184 | } |
185 | 185 | ||
186 | static enum wlr_scale_filter_mode get_scale_filter(struct sway_output *output) { | 186 | static enum wlr_scale_filter_mode get_scale_filter(struct sway_output *output, |
187 | struct wlr_scene_buffer *buffer) { | ||
188 | // if we are scaling down, we should always choose linear | ||
189 | if (buffer->dst_width > 0 && buffer->dst_height > 0 && ( | ||
190 | buffer->dst_width < buffer->buffer_width || | ||
191 | buffer->dst_height < buffer->buffer_height)) { | ||
192 | return WLR_SCALE_FILTER_BILINEAR; | ||
193 | } | ||
194 | |||
187 | switch (output->scale_filter) { | 195 | switch (output->scale_filter) { |
188 | case SCALE_FILTER_LINEAR: | 196 | case SCALE_FILTER_LINEAR: |
189 | return WLR_SCALE_FILTER_BILINEAR; | 197 | return WLR_SCALE_FILTER_BILINEAR; |
@@ -212,7 +220,7 @@ static void output_configure_scene(struct sway_output *output, | |||
212 | // hack: don't call the scene setter because that will damage all outputs | 220 | // hack: don't call the scene setter because that will damage all outputs |
213 | // We don't want to damage outputs that aren't our current output that | 221 | // We don't want to damage outputs that aren't our current output that |
214 | // we're configuring | 222 | // we're configuring |
215 | buffer->filter_mode = get_scale_filter(output); | 223 | buffer->filter_mode = get_scale_filter(output, buffer); |
216 | 224 | ||
217 | wlr_scene_buffer_set_opacity(buffer, opacity); | 225 | wlr_scene_buffer_set_opacity(buffer, opacity); |
218 | } else if (node->type == WLR_SCENE_NODE_TREE) { | 226 | } else if (node->type == WLR_SCENE_NODE_TREE) { |