Add spawn-in window animations
This commit is contained in:
parent
7575f851fe
commit
18ffaef64d
6 changed files with 157 additions and 12 deletions
|
|
@ -15,7 +15,7 @@ use {
|
|||
state::State,
|
||||
theme::{Color, CornerRadius},
|
||||
tree::{
|
||||
ContainerNode, DisplayNode, FloatNode, OutputNode, PlaceholderNode, ToplevelData,
|
||||
ContainerNode, DisplayNode, FloatNode, Node, OutputNode, PlaceholderNode, ToplevelData,
|
||||
ToplevelNode, ToplevelNodeBase, WorkspaceNode, tab_bar::TabBar,
|
||||
},
|
||||
},
|
||||
|
|
@ -207,8 +207,13 @@ impl Renderer<'_> {
|
|||
if stacked.node_visible() {
|
||||
self.base.sync();
|
||||
let pos = stacked.node_absolute_position();
|
||||
if pos.intersects(&opos) {
|
||||
let (x, y) = opos.translate(pos.x1(), pos.y1());
|
||||
let visual = self.state.animations.visual_rect(
|
||||
stacked.node_id(),
|
||||
pos,
|
||||
self.state.now_nsec(),
|
||||
);
|
||||
if visual.intersects(&opos) {
|
||||
let (x, y) = opos.translate(visual.x1(), visual.y1());
|
||||
stacked.node_render(self, x, y, None);
|
||||
}
|
||||
}
|
||||
|
|
@ -983,6 +988,10 @@ impl Renderer<'_> {
|
|||
_ => return,
|
||||
};
|
||||
let pos = floating.position.get();
|
||||
let visual =
|
||||
self.state
|
||||
.animations
|
||||
.visual_rect(floating.node_id(), pos, self.state.now_nsec());
|
||||
let theme = &self.state.theme;
|
||||
let bw = theme.sizes.border_width.get();
|
||||
let bc = if floating.active.get() {
|
||||
|
|
@ -991,16 +1000,26 @@ impl Renderer<'_> {
|
|||
theme.colors.border.get()
|
||||
};
|
||||
let cr = theme.corner_radius.get();
|
||||
let outer = Rect::new_sized_saturating(0, 0, pos.width(), pos.height());
|
||||
let outer = Rect::new_sized_saturating(0, 0, visual.width(), visual.height());
|
||||
self.render_rounded_frame(outer, &bc, cr, bw, x, y);
|
||||
let body =
|
||||
Rect::new_sized_saturating(x + bw, y + bw, pos.width() - 2 * bw, pos.height() - 2 * bw);
|
||||
let body = Rect::new_sized_saturating(
|
||||
x + bw,
|
||||
y + bw,
|
||||
visual.width() - 2 * bw,
|
||||
visual.height() - 2 * bw,
|
||||
);
|
||||
let scissor_body = self.base.scale_rect(body);
|
||||
self.stretch = if pos.width() != visual.width() || pos.height() != visual.height() {
|
||||
Some(self.base.scale_point(body.width(), body.height()))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
if !cr.is_zero() {
|
||||
let inner_cr = self.scale_corner_radius(cr.expanded_by(-(bw as f32)));
|
||||
self.corner_radius = Some(inner_cr);
|
||||
}
|
||||
child.node_render(self, body.x1(), body.y1(), Some(&scissor_body));
|
||||
self.render_child_or_snapshot(&child, body.x1(), body.y1(), Some(&scissor_body));
|
||||
self.stretch = None;
|
||||
self.corner_radius = None;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue