aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnant Sharma <anantsh.88@gmail.com>2024-07-25 23:41:33 +0530
committerIvan Molodetskikh <yalterz@gmail.com>2024-07-26 11:51:29 +0300
commit689338f05960f75082f71d213666978ebc431b40 (patch)
treefe36dadeaa0e5749e0bbb95305baa906fc26ebfc /src
parenteee770514fb8dc1a2825d21070c7c54373d1aa05 (diff)
downloadniri-689338f05960f75082f71d213666978ebc431b40.tar.gz
niri-689338f05960f75082f71d213666978ebc431b40.tar.bz2
niri-689338f05960f75082f71d213666978ebc431b40.zip
Add background color option for output
Diffstat (limited to 'src')
-rw-r--r--src/niri.rs31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/niri.rs b/src/niri.rs
index 664aea67..aaf2ef7f 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -13,6 +13,7 @@ use anyhow::{ensure, Context};
use calloop::futures::Scheduler;
use niri_config::{
Config, FloatOrInt, Key, Modifiers, PreviewRender, TrackLayout, WorkspaceReference,
+ DEFAULT_BACKGROUND_COLOR,
};
use niri_ipc::Workspace;
use smithay::backend::allocator::Fourcc;
@@ -141,7 +142,6 @@ use crate::utils::{
use crate::window::{InitialConfigureState, Mapped, ResolvedWindowRules, Unmapped, WindowRef};
use crate::{animation, niri_render_elements};
-const CLEAR_COLOR: [f32; 4] = [0.2, 0.2, 0.2, 1.];
const CLEAR_COLOR_LOCKED: [f32; 4] = [0.3, 0.1, 0.1, 1.];
// We'll try to send frame callbacks at least once a second. We'll make a timer that fires once a
@@ -1085,6 +1085,8 @@ impl State {
pub fn reload_output_config(&mut self) {
let mut resized_outputs = vec![];
+ let mut recolored_outputs = vec![];
+
for output in self.niri.global_space.outputs() {
let name = output.name();
let config = self.niri.config.borrow_mut();
@@ -1120,11 +1122,29 @@ impl State {
self.niri.ipc_outputs_changed = true;
resized_outputs.push(output.clone());
}
+
+ let mut background_color = config
+ .map(|c| c.background_color)
+ .unwrap_or(DEFAULT_BACKGROUND_COLOR)
+ .to_array_unpremul();
+ background_color[3] = 1.;
+
+ if let Some(state) = self.niri.output_state.get_mut(output) {
+ if state.background_buffer.color() != background_color {
+ state.background_buffer.set_color(background_color);
+ recolored_outputs.push(output.clone());
+ }
+ }
}
+
for output in resized_outputs {
self.niri.output_resized(&output);
}
+ for output in recolored_outputs {
+ self.niri.queue_redraw(&output);
+ }
+
self.backend.on_output_config_changed(&mut self.niri);
self.niri.reposition_outputs(None);
@@ -1935,6 +1955,13 @@ impl Niri {
let mut transform = c
.map(|c| ipc_transform_to_smithay(c.transform))
.unwrap_or(Transform::Normal);
+
+ let mut background_color = c
+ .map(|c| c.background_color)
+ .unwrap_or(DEFAULT_BACKGROUND_COLOR)
+ .to_array_unpremul();
+ background_color[3] = 1.;
+
// FIXME: fix winit damage on other transforms.
if name == "winit" {
transform = Transform::Flipped180;
@@ -1966,7 +1993,7 @@ impl Niri {
frame_clock: FrameClock::new(refresh_interval, vrr),
last_drm_sequence: None,
frame_callback_sequence: 0,
- background_buffer: SolidColorBuffer::new(size, CLEAR_COLOR),
+ background_buffer: SolidColorBuffer::new(size, background_color),
lock_render_state,
lock_surface: None,
lock_color_buffer: SolidColorBuffer::new(size, CLEAR_COLOR_LOCKED),