mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-21 02:01:55 +07:00
Extract rules.apply_{min,max}_size()
This commit is contained in:
+4
-27
@@ -1,5 +1,4 @@
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::cmp::{max, min};
|
||||
use std::time::Duration;
|
||||
|
||||
use niri_config::{Color, CornerRadius, GradientInterpolation, WindowRule};
|
||||
@@ -535,43 +534,21 @@ impl LayoutElement for Mapped {
|
||||
}
|
||||
|
||||
fn min_size(&self) -> Size<i32, Logical> {
|
||||
let mut size = with_states(self.toplevel().wl_surface(), |state| {
|
||||
let min_size = with_states(self.toplevel().wl_surface(), |state| {
|
||||
let mut guard = state.cached_state.get::<SurfaceCachedState>();
|
||||
guard.current().min_size
|
||||
});
|
||||
|
||||
if let Some(x) = self.rules.min_width {
|
||||
size.w = max(size.w, i32::from(x));
|
||||
}
|
||||
if let Some(x) = self.rules.min_height {
|
||||
size.h = max(size.h, i32::from(x));
|
||||
}
|
||||
|
||||
size
|
||||
self.rules.apply_min_size(min_size)
|
||||
}
|
||||
|
||||
fn max_size(&self) -> Size<i32, Logical> {
|
||||
let mut size = with_states(self.toplevel().wl_surface(), |state| {
|
||||
let max_size = with_states(self.toplevel().wl_surface(), |state| {
|
||||
let mut guard = state.cached_state.get::<SurfaceCachedState>();
|
||||
guard.current().max_size
|
||||
});
|
||||
|
||||
if let Some(x) = self.rules.max_width {
|
||||
if size.w == 0 {
|
||||
size.w = i32::from(x);
|
||||
} else if x > 0 {
|
||||
size.w = min(size.w, i32::from(x));
|
||||
}
|
||||
}
|
||||
if let Some(x) = self.rules.max_height {
|
||||
if size.h == 0 {
|
||||
size.h = i32::from(x);
|
||||
} else if x > 0 {
|
||||
size.h = min(size.h, i32::from(x));
|
||||
}
|
||||
}
|
||||
|
||||
size
|
||||
self.rules.apply_max_size(max_size)
|
||||
}
|
||||
|
||||
fn is_wl_surface(&self, wl_surface: &WlSurface) -> bool {
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
use std::cmp::{max, min};
|
||||
|
||||
use niri_config::{BlockOutFrom, BorderRule, CornerRadius, Match, WindowRule};
|
||||
use smithay::reexports::wayland_protocols::xdg::shell::server::xdg_toplevel;
|
||||
use smithay::utils::{Logical, Size};
|
||||
use smithay::wayland::shell::xdg::{ToplevelSurface, XdgToplevelSurfaceRoleAttributes};
|
||||
|
||||
use crate::layout::scrolling::ColumnWidth;
|
||||
@@ -236,6 +239,40 @@ impl ResolvedWindowRules {
|
||||
|
||||
resolved
|
||||
}
|
||||
|
||||
pub fn apply_min_size(&self, min_size: Size<i32, Logical>) -> Size<i32, Logical> {
|
||||
let mut size = min_size;
|
||||
|
||||
if let Some(x) = self.min_width {
|
||||
size.w = max(size.w, i32::from(x));
|
||||
}
|
||||
if let Some(x) = self.min_height {
|
||||
size.h = max(size.h, i32::from(x));
|
||||
}
|
||||
|
||||
size
|
||||
}
|
||||
|
||||
pub fn apply_max_size(&self, max_size: Size<i32, Logical>) -> Size<i32, Logical> {
|
||||
let mut size = max_size;
|
||||
|
||||
if let Some(x) = self.max_width {
|
||||
if size.w == 0 {
|
||||
size.w = i32::from(x);
|
||||
} else if x > 0 {
|
||||
size.w = min(size.w, i32::from(x));
|
||||
}
|
||||
}
|
||||
if let Some(x) = self.max_height {
|
||||
if size.h == 0 {
|
||||
size.h = i32::from(x);
|
||||
} else if x > 0 {
|
||||
size.h = min(size.h, i32::from(x));
|
||||
}
|
||||
}
|
||||
|
||||
size
|
||||
}
|
||||
}
|
||||
|
||||
fn window_matches(window: WindowRef, role: &XdgToplevelSurfaceRoleAttributes, m: &Match) -> bool {
|
||||
|
||||
Reference in New Issue
Block a user