aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-08-20 11:43:32 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-08-22 14:15:04 +0300
commit618fa08aa5649e867c24db5ae941ca7f5064eeca (patch)
tree085dbbd37c3069c258c33f819fcfcd5ea3868a8a
parenta40e7b44707692335910532c33e41cad0023844e (diff)
downloadniri-618fa08aa5649e867c24db5ae941ca7f5064eeca.tar.gz
niri-618fa08aa5649e867c24db5ae941ca7f5064eeca.tar.bz2
niri-618fa08aa5649e867c24db5ae941ca7f5064eeca.zip
Update Smithay (apply state in post commit)
-rw-r--r--Cargo.lock4
-rw-r--r--niri-config/src/lib.rs5
-rw-r--r--niri-visual-tests/src/smithay_view.rs4
-rw-r--r--src/layout/tile.rs4
-rw-r--r--src/niri.rs3
-rw-r--r--src/render_helpers/mod.rs4
-rw-r--r--src/render_helpers/solid_color.rs33
-rw-r--r--src/window/mapped.rs4
8 files changed, 32 insertions, 29 deletions
diff --git a/Cargo.lock b/Cargo.lock
index b2e84d69..38a5ca68 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3479,7 +3479,7 @@ checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c"
[[package]]
name = "smithay"
version = "0.3.0"
-source = "git+https://github.com/Smithay/smithay.git#c4844428f8de024222a44cd906060f2af77f4ba1"
+source = "git+https://github.com/Smithay/smithay.git#e97bff13dd404bf350f3872de726803d7aed8b85"
dependencies = [
"appendlist",
"bitflags 2.6.0",
@@ -3553,7 +3553,7 @@ dependencies = [
[[package]]
name = "smithay-drm-extras"
version = "0.1.0"
-source = "git+https://github.com/Smithay/smithay.git#c4844428f8de024222a44cd906060f2af77f4ba1"
+source = "git+https://github.com/Smithay/smithay.git#e97bff13dd404bf350f3872de726803d7aed8b85"
dependencies = [
"drm",
"edid-rs",
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs
index b9edf4ce..7afb4fc0 100644
--- a/niri-config/src/lib.rs
+++ b/niri-config/src/lib.rs
@@ -13,6 +13,7 @@ use knuffel::Decode as _;
use miette::{miette, Context, IntoDiagnostic, NarratableReportHandler};
use niri_ipc::{ConfiguredMode, LayoutSwitchTarget, SizeChange, Transform, WorkspaceReferenceArg};
use regex::Regex;
+use smithay::backend::renderer::Color32F;
use smithay::input::keyboard::keysyms::KEY_NoSymbol;
use smithay::input::keyboard::xkb::{keysym_from_name, KEYSYM_CASE_INSENSITIVE};
use smithay::input::keyboard::{Keysym, XkbConfig};
@@ -580,6 +581,10 @@ impl Color {
Self { r, g, b, a }
}
+ pub fn from_color32f(color: Color32F) -> Self {
+ Self::from_array_premul(color.components())
+ }
+
pub fn to_array_unpremul(self) -> [f32; 4] {
[self.r, self.g, self.b, self.a]
}
diff --git a/niri-visual-tests/src/smithay_view.rs b/niri-visual-tests/src/smithay_view.rs
index 60eed79d..df514df1 100644
--- a/niri-visual-tests/src/smithay_view.rs
+++ b/niri-visual-tests/src/smithay_view.rs
@@ -16,7 +16,7 @@ mod imp {
use smithay::backend::egl::ffi::egl;
use smithay::backend::egl::EGLContext;
use smithay::backend::renderer::gles::GlesRenderer;
- use smithay::backend::renderer::{Frame, Renderer, Unbind};
+ use smithay::backend::renderer::{Color32F, Frame, Renderer, Unbind};
use smithay::utils::{Physical, Rectangle, Scale, Transform};
use super::*;
@@ -147,7 +147,7 @@ mod imp {
.context("error creating frame")?;
frame
- .clear([0.3, 0.3, 0.3, 1.], &[rect])
+ .clear(Color32F::from([0.3, 0.3, 0.3, 1.]), &[rect])
.context("error clearing")?;
for element in elements.iter().rev() {
diff --git a/src/layout/tile.rs b/src/layout/tile.rs
index 167ff2c6..a701e96f 100644
--- a/src/layout/tile.rs
+++ b/src/layout/tile.rs
@@ -758,8 +758,8 @@ impl<W: LayoutElement> Tile<W> {
geo.size,
Rectangle::from_loc_and_size((0., 0.), geo.size),
GradientInterpolation::default(),
- Color::from_array_premul(elem.color()),
- Color::from_array_premul(elem.color()),
+ Color::from_color32f(elem.color()),
+ Color::from_color32f(elem.color()),
0.,
Rectangle::from_loc_and_size((0., 0.), geo.size),
0.,
diff --git a/src/niri.rs b/src/niri.rs
index 7a79c0f4..33ca7d6d 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -32,7 +32,7 @@ use smithay::backend::renderer::element::{
};
use smithay::backend::renderer::gles::GlesRenderer;
use smithay::backend::renderer::sync::SyncPoint;
-use smithay::backend::renderer::Unbind;
+use smithay::backend::renderer::{Color32F, Unbind};
use smithay::desktop::utils::{
bbox_from_surface_tree, output_update, send_dmabuf_feedback_surface_tree,
send_frames_surface_tree, surface_presentation_feedback_flags_from_states,
@@ -1137,6 +1137,7 @@ impl State {
.unwrap_or(DEFAULT_BACKGROUND_COLOR)
.to_array_unpremul();
background_color[3] = 1.;
+ let background_color = Color32F::from(background_color);
if let Some(state) = self.niri.output_state.get_mut(output) {
if state.background_buffer.color() != background_color {
diff --git a/src/render_helpers/mod.rs b/src/render_helpers/mod.rs
index f69eec05..1af6aeab 100644
--- a/src/render_helpers/mod.rs
+++ b/src/render_helpers/mod.rs
@@ -8,7 +8,7 @@ use smithay::backend::renderer::element::utils::{Relocate, RelocateRenderElement
use smithay::backend::renderer::element::{Kind, RenderElement};
use smithay::backend::renderer::gles::{GlesMapping, GlesRenderer, GlesTexture};
use smithay::backend::renderer::sync::SyncPoint;
-use smithay::backend::renderer::{Bind, ExportMem, Frame, Offscreen, Renderer};
+use smithay::backend::renderer::{Bind, Color32F, ExportMem, Frame, Offscreen, Renderer};
use smithay::reexports::wayland_server::protocol::wl_buffer::WlBuffer;
use smithay::reexports::wayland_server::protocol::wl_shm;
use smithay::utils::{Logical, Physical, Point, Rectangle, Scale, Size, Transform};
@@ -302,7 +302,7 @@ fn render_elements(
.context("error starting frame")?;
frame
- .clear([0., 0., 0., 0.], &[output_rect])
+ .clear(Color32F::TRANSPARENT, &[output_rect])
.context("error clearing")?;
for element in elements {
diff --git a/src/render_helpers/solid_color.rs b/src/render_helpers/solid_color.rs
index 5ce29f47..cdda19c8 100644
--- a/src/render_helpers/solid_color.rs
+++ b/src/render_helpers/solid_color.rs
@@ -1,6 +1,6 @@
use smithay::backend::renderer::element::{Element, Id, Kind, RenderElement, UnderlyingStorage};
use smithay::backend::renderer::utils::{CommitCounter, OpaqueRegions};
-use smithay::backend::renderer::{Frame as _, Renderer};
+use smithay::backend::renderer::{Color32F, Frame as _, Renderer};
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size};
/// Smithay's solid color buffer, but with fractional scale.
@@ -9,7 +9,7 @@ pub struct SolidColorBuffer {
id: Id,
size: Size<f64, Logical>,
commit: CommitCounter,
- color: [f32; 4],
+ color: Color32F,
}
/// Render element for a [`SolidColorBuffer`].
@@ -18,7 +18,7 @@ pub struct SolidColorRenderElement {
id: Id,
geometry: Rectangle<f64, Logical>,
commit: CommitCounter,
- color: [f32; 4],
+ color: Color32F,
kind: Kind,
}
@@ -34,10 +34,10 @@ impl Default for SolidColorBuffer {
}
impl SolidColorBuffer {
- pub fn new(size: impl Into<Size<f64, Logical>>, color: [f32; 4]) -> Self {
+ pub fn new(size: impl Into<Size<f64, Logical>>, color: impl Into<Color32F>) -> Self {
SolidColorBuffer {
id: Id::new(),
- color,
+ color: color.into(),
commit: CommitCounter::default(),
size: size.into(),
}
@@ -51,15 +51,17 @@ impl SolidColorBuffer {
}
}
- pub fn set_color(&mut self, color: [f32; 4]) {
+ pub fn set_color(&mut self, color: impl Into<Color32F>) {
+ let color = color.into();
if color != self.color {
self.color = color;
self.commit.increment();
}
}
- pub fn update(&mut self, size: impl Into<Size<f64, Logical>>, color: [f32; 4]) {
+ pub fn update(&mut self, size: impl Into<Size<f64, Logical>>, color: impl Into<Color32F>) {
let size = size.into();
+ let color = color.into();
if size != self.size || color != self.color {
self.size = size;
self.color = color;
@@ -67,7 +69,7 @@ impl SolidColorBuffer {
}
}
- pub fn color(&self) -> [f32; 4] {
+ pub fn color(&self) -> Color32F {
self.color
}
@@ -84,12 +86,7 @@ impl SolidColorRenderElement {
kind: Kind,
) -> Self {
let geo = Rectangle::from_loc_and_size(location, buffer.size());
- let color = [
- buffer.color[0] * alpha,
- buffer.color[1] * alpha,
- buffer.color[2] * alpha,
- buffer.color[3] * alpha,
- ];
+ let color = buffer.color * alpha;
Self::new(buffer.id.clone(), geo, buffer.commit, color, kind)
}
@@ -97,7 +94,7 @@ impl SolidColorRenderElement {
id: Id,
geometry: Rectangle<f64, Logical>,
commit: CommitCounter,
- color: [f32; 4],
+ color: Color32F,
kind: Kind,
) -> Self {
SolidColorRenderElement {
@@ -109,7 +106,7 @@ impl SolidColorRenderElement {
}
}
- pub fn color(&self) -> [f32; 4] {
+ pub fn color(&self) -> Color32F {
self.color
}
@@ -136,7 +133,7 @@ impl Element for SolidColorRenderElement {
}
fn opaque_regions(&self, scale: Scale<f64>) -> OpaqueRegions<i32, Physical> {
- if self.color[3] == 1f32 {
+ if self.color.is_opaque() {
let rect = Rectangle::from_loc_and_size((0., 0.), self.geometry.size)
.to_physical_precise_down(scale);
OpaqueRegions::from_slice(&[rect])
@@ -146,7 +143,7 @@ impl Element for SolidColorRenderElement {
}
fn alpha(&self) -> f32 {
- self.color[3]
+ self.color.a()
}
fn kind(&self) -> Kind {
diff --git a/src/window/mapped.rs b/src/window/mapped.rs
index 9963d7b6..727473b9 100644
--- a/src/window/mapped.rs
+++ b/src/window/mapped.rs
@@ -290,8 +290,8 @@ impl Mapped {
geo.size,
Rectangle::from_loc_and_size((0., 0.), geo.size),
GradientInterpolation::default(),
- Color::from_array_premul(elem.color()),
- Color::from_array_premul(elem.color()),
+ Color::from_color32f(elem.color()),
+ Color::from_color32f(elem.color()),
0.,
Rectangle::from_loc_and_size((0., 0.), geo.size),
0.,