pub struct PanelWindow { /* private fields */ }Expand description
A bar: a layer-shell surface on one output with one child.
This is a description; Window::new builds it. By default it takes
no keyboard focus. Every property takes a value or a closure.
use crabshell_ui::{Edge, Output, PanelWindow, Text};
let output = Output::new("DP-1");
let bar = PanelWindow::new(&output)
.anchors(Edge::Top | Edge::Left | Edge::Right)
.height(30)
.child(Text::new("hello"));Implementations§
Source§impl PanelWindow
impl PanelWindow
Sourcepub fn new(output: &Output) -> PanelWindow
pub fn new(output: &Output) -> PanelWindow
A window on output, anchored to no edge, in the top layer.
Sourcepub fn anchors(self, anchors: impl IntoProp<Anchors>) -> PanelWindow
pub fn anchors(self, anchors: impl IntoProp<Anchors>) -> PanelWindow
Sets the edges the window is anchored to.
Sourcepub fn width(self, width: impl IntoProp<u32>) -> PanelWindow
pub fn width(self, width: impl IntoProp<u32>) -> PanelWindow
Sets the width in logical pixels. 0, the default, lets the compositor choose, which it does when the window is anchored left and right.
Sourcepub fn height(self, height: impl IntoProp<u32>) -> PanelWindow
pub fn height(self, height: impl IntoProp<u32>) -> PanelWindow
Sets the height in logical pixels. 0, the default, lets the compositor choose, which it does when the window is anchored top and bottom.
Sourcepub fn exclusive_zone(self, zone: impl IntoProp<i32>) -> PanelWindow
pub fn exclusive_zone(self, zone: impl IntoProp<i32>) -> PanelWindow
Sets how much space, in logical pixels, other windows keep clear along the anchored edge. The default is the window’s height for a top or bottom bar and its width for a left or right one. wlroots compositors add the margin on that edge to the zone. 0 keeps clear of other windows’ zones without reserving any; -1 ignores them and covers them.
Sourcepub fn layer(self, layer: impl IntoProp<Layer>) -> PanelWindow
pub fn layer(self, layer: impl IntoProp<Layer>) -> PanelWindow
Sets the layer.
Sourcepub fn margins(self, margins: impl IntoProp<Margins>) -> PanelWindow
pub fn margins(self, margins: impl IntoProp<Margins>) -> PanelWindow
Sets the space between the window and the edges it is anchored to.
Sourcepub fn keyboard_focus(self, focus: impl IntoProp<KeyboardFocus>) -> PanelWindow
pub fn keyboard_focus(self, focus: impl IntoProp<KeyboardFocus>) -> PanelWindow
Sets whether the window takes the keyboard. The default is never.
Sourcepub fn namespace(self, namespace: impl IntoProp<String>) -> PanelWindow
pub fn namespace(self, namespace: impl IntoProp<String>) -> PanelWindow
Sets the layer-shell namespace, which compositors use to tell
windows apart, as in Sway’s layer_effects. The default is
"crabshell", which also replaces a name holding a NUL byte.
Compositors read it once, so a change after the window is shown
applies only when it is shown again, as on a new output.
Sourcepub fn mask(self, mask: impl IntoProp<Option<Region>>) -> PanelWindow
pub fn mask(self, mask: impl IntoProp<Option<Region>>) -> PanelWindow
Sets the part of the window that takes pointer input; clicks outside
it reach whatever is below. None, the default, is the whole window,
and Region::empty lets every click through.
Sourcepub fn blur(self, region: impl IntoProp<Option<Region>>) -> PanelWindow
pub fn blur(self, region: impl IntoProp<Option<Region>>) -> PanelWindow
Asks the compositor to blur what is behind this part of the window,
so a translucent background looks frosted. None, the default,
blurs nothing. It needs ext-background-effect-v1; a compositor
without it shows the window unblurred, and the shell logs that once.
use crabshell_ui::{Output, PanelWindow, Region};
// The whole of a 30 pixel bar, however wide the output.
let bar = PanelWindow::new(&Output::new("DP-1"))
.height(30)
.blur(Some(Region::rect(0, 0, u32::MAX, 30)));Sourcepub fn inhibit_idle(self, inhibit: impl IntoProp<bool>) -> PanelWindow
pub fn inhibit_idle(self, inhibit: impl IntoProp<bool>) -> PanelWindow
Keeps the screen from blanking or locking for idleness while true
and the window is shown, as a video player does. It needs
idle-inhibit-unstable-v1; without it, that is logged once.
Sourcepub fn inhibit_shortcuts(self, inhibit: impl IntoProp<bool>) -> PanelWindow
pub fn inhibit_shortcuts(self, inhibit: impl IntoProp<bool>) -> PanelWindow
While true and the window has the keyboard, the compositor’s own
shortcuts, such as Sway’s bindsyms, go to the window as keys
instead, as a remote desktop or a game wants. The compositor may
keep some, such as one that takes them back. It needs
keyboard-shortcuts-inhibit-unstable-v1; without it, that is logged
once.
Sourcepub fn shortcuts_inhibited(self, signal: Signal<bool>) -> PanelWindow
pub fn shortcuts_inhibited(self, signal: Signal<bool>) -> PanelWindow
The compositor writes true to signal while it honors
inhibit_shortcuts, and false once it
stops, as when the user takes its shortcuts back, or the window
stops asking or goes. Give each window a signal of its own.
Sourcepub fn focus_grab(self, signal: Signal<bool>) -> PanelWindow
pub fn focus_grab(self, signal: Signal<bool>) -> PanelWindow
While signal is true, this window and the shown windows given
the same signal, with the popups they open, hold the keyboard and
pointer focus: a click anywhere else ends the grab, and the
compositor writes false to signal, as it does when every one of
them hides. Writing false ends the grab, and true asks again. It
needs Hyprland’s hyprland-focus-grab-v1; without it, that is
logged once and signal is left as it is.
Sourcepub fn compositor_opacity(self, opacity: impl IntoProp<f32>) -> PanelWindow
pub fn compositor_opacity(self, opacity: impl IntoProp<f32>) -> PanelWindow
Sets the opacity the compositor shows the whole window at, from 0.0,
unseen, to 1.0, the default. It fades the blur behind the window
along with its pixels. A style’s opacity is different: Crabshell
paints that into the window’s pixels, and a blur behind them stays
as strong. A value outside 0.0 to 1.0 is clamped and NaN reads as
1.0, logged once with the window’s path. It needs Hyprland’s
hyprland-surface-v1, from Hyprland 0.47; without it, that is
logged once and the window shows as painted.
Sourcepub fn visible_mask(self, region: impl IntoProp<Option<Region>>) -> PanelWindow
pub fn visible_mask(self, region: impl IntoProp<Option<Region>>) -> PanelWindow
Tells the compositor which part of the window holds anything to
see, so it can skip drawing the rest, which helps most when the
window is blurred. It is only a hint, and it must cover every pixel
that isn’t fully transparent: what it leaves out may not show.
None, the default, is the whole window, and so is a region with
nothing inside the window. It needs version 2 of Hyprland’s
hyprland-surface-v1; without it, that is logged once.
Sourcepub fn on_key(
self,
handler: impl Fn(&Cx, &KeyEvent) -> bool + 'static,
) -> PanelWindow
pub fn on_key( self, handler: impl Fn(&Cx, &KeyEvent) -> bool + 'static, ) -> PanelWindow
Runs handler for each key the window gets that its focused button
didn’t use. It returns true when it used the key; otherwise Tab,
Enter and Space do what they do by default. The window gets keys
only with a keyboard_focus.
Sourcepub fn style(self, style: impl IntoProp<Style>) -> PanelWindow
pub fn style(self, style: impl IntoProp<Style>) -> PanelWindow
Sets the window’s style. Its color and font are inherited by every
Text in the window that doesn’t set its own.
Sourcepub fn child(self, child: impl Widget) -> PanelWindow
pub fn child(self, child: impl Widget) -> PanelWindow
Sets the window’s one child, which fills the window.