autocommit 2022-02-01 23:33:59 CET
This commit is contained in:
parent
41c5f8cf89
commit
2dbe3ba732
21 changed files with 814 additions and 86 deletions
|
|
@ -35,7 +35,7 @@ const BOTTOM_RIGHT: u32 = 8;
|
|||
|
||||
bitflags::bitflags! {
|
||||
#[derive(Default)]
|
||||
pub struct Square: u32 {
|
||||
pub struct Edge: u32 {
|
||||
const TOP = 1 << 0;
|
||||
const BOTTOM = 1 << 1;
|
||||
const LEFT = 1 << 2;
|
||||
|
|
@ -43,18 +43,18 @@ bitflags::bitflags! {
|
|||
}
|
||||
}
|
||||
|
||||
impl Square {
|
||||
impl Edge {
|
||||
fn from_enum(e: u32) -> Option<Self> {
|
||||
let s = match e {
|
||||
NONE => Square::empty(),
|
||||
TOP => Square::TOP,
|
||||
BOTTOM => Square::BOTTOM,
|
||||
LEFT => Square::LEFT,
|
||||
RIGHT => Square::RIGHT,
|
||||
TOP_LEFT => Square::TOP | Square::LEFT,
|
||||
BOTTOM_LEFT => Square::BOTTOM | Square::LEFT,
|
||||
TOP_RIGHT => Square::TOP | Square::RIGHT,
|
||||
BOTTOM_RIGHT => Square::BOTTOM | Square::RIGHT,
|
||||
NONE => Edge::empty(),
|
||||
TOP => Edge::TOP,
|
||||
BOTTOM => Edge::BOTTOM,
|
||||
LEFT => Edge::LEFT,
|
||||
RIGHT => Edge::RIGHT,
|
||||
TOP_LEFT => Edge::TOP | Edge::LEFT,
|
||||
BOTTOM_LEFT => Edge::BOTTOM | Edge::LEFT,
|
||||
TOP_RIGHT => Edge::TOP | Edge::RIGHT,
|
||||
BOTTOM_RIGHT => Edge::BOTTOM | Edge::RIGHT,
|
||||
_ => return None,
|
||||
};
|
||||
Some(s)
|
||||
|
|
@ -88,8 +88,8 @@ pub struct XdgPositioned {
|
|||
pub size_width: i32,
|
||||
pub size_height: i32,
|
||||
pub ar: Rect,
|
||||
pub anchor: Square,
|
||||
pub gravity: Square,
|
||||
pub anchor: Edge,
|
||||
pub gravity: Edge,
|
||||
pub ca: CA,
|
||||
pub off_x: i32,
|
||||
pub off_y: i32,
|
||||
|
|
@ -104,35 +104,46 @@ impl XdgPositioned {
|
|||
self.size_height != 0 && self.size_width != 0
|
||||
}
|
||||
|
||||
pub fn get_position(&self) -> Rect {
|
||||
pub fn get_position(&self, flip_x: bool, flip_y: bool) -> Rect {
|
||||
let mut anchor = self.anchor;
|
||||
let mut gravity = self.gravity;
|
||||
if flip_x {
|
||||
anchor ^= Edge::LEFT | Edge::RIGHT;
|
||||
gravity ^= Edge::LEFT | Edge::RIGHT;
|
||||
}
|
||||
if flip_y {
|
||||
anchor ^= Edge::TOP | Edge::BOTTOM;
|
||||
gravity ^= Edge::TOP | Edge::BOTTOM;
|
||||
}
|
||||
|
||||
let mut x1 = self.off_x;
|
||||
let mut y1 = self.off_x;
|
||||
|
||||
if self.anchor.contains(Square::LEFT) {
|
||||
if anchor.contains(Edge::LEFT) {
|
||||
x1 += self.ar.x1();
|
||||
} else if self.anchor.contains(Square::RIGHT) {
|
||||
} else if anchor.contains(Edge::RIGHT) {
|
||||
x1 += self.ar.x2();
|
||||
} else {
|
||||
x1 += self.ar.x1() + self.ar.width() / 2;
|
||||
}
|
||||
|
||||
if self.anchor.contains(Square::TOP) {
|
||||
if anchor.contains(Edge::TOP) {
|
||||
y1 += self.ar.y1();
|
||||
} else if self.anchor.contains(Square::BOTTOM) {
|
||||
} else if anchor.contains(Edge::BOTTOM) {
|
||||
y1 += self.ar.y2();
|
||||
} else {
|
||||
y1 += self.ar.y1() + self.ar.height() / 2;
|
||||
}
|
||||
|
||||
if self.gravity.contains(Square::LEFT) {
|
||||
if gravity.contains(Edge::LEFT) {
|
||||
x1 -= self.size_width;
|
||||
} else if !self.gravity.contains(Square::RIGHT) {
|
||||
} else if !gravity.contains(Edge::RIGHT) {
|
||||
x1 -= self.size_width / 2;
|
||||
}
|
||||
|
||||
if self.gravity.contains(Square::TOP) {
|
||||
if gravity.contains(Edge::TOP) {
|
||||
y1 -= self.size_height;
|
||||
} else if !self.gravity.contains(Square::BOTTOM) {
|
||||
} else if !gravity.contains(Edge::BOTTOM) {
|
||||
y1 -= self.size_height / 2;
|
||||
}
|
||||
|
||||
|
|
@ -193,7 +204,7 @@ impl XdgPositioner {
|
|||
|
||||
fn set_anchor(&self, parser: MsgParser<'_, '_>) -> Result<(), SetAnchorError> {
|
||||
let req: SetAnchor = self.client.parse(self, parser)?;
|
||||
let anchor = match Square::from_enum(req.anchor) {
|
||||
let anchor = match Edge::from_enum(req.anchor) {
|
||||
Some(a) => a,
|
||||
_ => return Err(SetAnchorError::UnknownAnchor(req.anchor)),
|
||||
};
|
||||
|
|
@ -203,7 +214,7 @@ impl XdgPositioner {
|
|||
|
||||
fn set_gravity(&self, parser: MsgParser<'_, '_>) -> Result<(), SetGravityError> {
|
||||
let req: SetGravity = self.client.parse(self, parser)?;
|
||||
let gravity = match Square::from_enum(req.gravity) {
|
||||
let gravity = match Edge::from_enum(req.gravity) {
|
||||
Some(a) => a,
|
||||
_ => return Err(SetGravityError::UnknownGravity(req.gravity)),
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue