#2874 on steroids Before you mark this PR as ready for review, make sure that you have: - [ ] Added a solid test coverage and/or screenshots from doing manual testing - [ ] Done a self-review taking into account security and performance aspects - [ ] Aligned any UI changes with the [UI checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) Release Notes: - N/A --------- Co-authored-by: Eric Holk <eric@zed.dev>
84 lines
2.9 KiB
Rust
84 lines
2.9 KiB
Rust
use bitflags::bitflags;
|
|
use thiserror::Error;
|
|
|
|
use crate::Pixels;
|
|
|
|
/// The layer the surface is rendered on. Multiple surfaces can share a layer, and ordering within
|
|
/// a single layer is undefined.
|
|
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
|
|
pub enum Layer {
|
|
/// The background layer, typically used for wallpapers.
|
|
Background,
|
|
|
|
/// The bottom layer.
|
|
Bottom,
|
|
|
|
/// The top layer, typically used for fullscreen windows.
|
|
Top,
|
|
|
|
/// The overlay layer, used for surfaces that should always be on top.
|
|
#[default]
|
|
Overlay,
|
|
}
|
|
|
|
bitflags! {
|
|
/// Screen anchor point for layer_shell surfaces. These can be used in any combination, e.g.
|
|
/// specifying `Anchor::LEFT | Anchor::RIGHT` will stretch the surface across the width of the
|
|
/// screen.
|
|
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
|
|
pub struct Anchor: u32 {
|
|
/// Anchor to the top edge of the screen.
|
|
const TOP = 1;
|
|
/// Anchor to the bottom edge of the screen.
|
|
const BOTTOM = 2;
|
|
/// Anchor to the left edge of the screen.
|
|
const LEFT = 4;
|
|
/// Anchor to the right edge of the screen.
|
|
const RIGHT = 8;
|
|
}
|
|
}
|
|
|
|
/// Keyboard interactivity mode for the layer_shell surfaces.
|
|
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
|
|
pub enum KeyboardInteractivity {
|
|
/// No keyboard inputs will be delivered to the surface and it won't be able to receive
|
|
/// keyboard focus.
|
|
None,
|
|
|
|
/// The surface will receive exclusive keyboard focus as long as it is above the shell surface
|
|
/// layer, and no other layer_shell surfaces are above it.
|
|
Exclusive,
|
|
|
|
/// The surface can be focused similarly to a normal window.
|
|
#[default]
|
|
OnDemand,
|
|
}
|
|
|
|
/// Options for creating a layer_shell window.
|
|
#[derive(Clone, Debug, Default, PartialEq, Eq)]
|
|
pub struct LayerShellOptions {
|
|
/// The namespace for the surface, mostly used by compositors to apply rules, can not be
|
|
/// changed after the surface is created.
|
|
pub namespace: String,
|
|
/// The layer the surface is rendered on.
|
|
pub layer: Layer,
|
|
/// The anchor point of the surface.
|
|
pub anchor: Anchor,
|
|
/// Requests that the compositor avoids occluding an area with other surfaces.
|
|
pub exclusive_zone: Option<Pixels>,
|
|
/// The anchor point of the exclusive zone, will be determined using the anchor if left
|
|
/// unspecified.
|
|
pub exclusive_edge: Option<Anchor>,
|
|
/// Margins between the surface and its anchor point(s).
|
|
/// Specified in CSS order: top, right, bottom, left.
|
|
pub margin: Option<(Pixels, Pixels, Pixels, Pixels)>,
|
|
/// How keyboard events should be delivered to the surface.
|
|
pub keyboard_interactivity: KeyboardInteractivity,
|
|
}
|
|
|
|
/// An error indicating that an action failed because the compositor doesn't support the required
|
|
/// layer_shell protocol.
|
|
#[derive(Debug, Error)]
|
|
#[error("Compositor doesn't support zwlr_layer_shell_v1")]
|
|
pub struct LayerShellNotSupportedError;
|