Add linear tiled window animations
This commit is contained in:
parent
a29937ebe8
commit
3540cdc4be
17 changed files with 913 additions and 64 deletions
|
|
@ -15,7 +15,7 @@ use {
|
|||
theme::{Color, CornerRadius},
|
||||
tree::{
|
||||
ContainerNode, DisplayNode, FloatNode, OutputNode, PlaceholderNode, ToplevelData,
|
||||
ToplevelNodeBase, WorkspaceNode, tab_bar::TabBar,
|
||||
ToplevelNode, ToplevelNodeBase, WorkspaceNode, tab_bar::TabBar,
|
||||
},
|
||||
},
|
||||
std::{ops::Deref, rc::Rc, slice},
|
||||
|
|
@ -453,6 +453,20 @@ impl Renderer<'_> {
|
|||
.fill_boxes2(&rd.border_rects, &c, srgb, perceptual, x, y);
|
||||
}
|
||||
|
||||
fn presentation_child_body(
|
||||
&self,
|
||||
container: &ContainerNode,
|
||||
child: &Rc<dyn ToplevelNode>,
|
||||
body: Rect,
|
||||
) -> Rect {
|
||||
let abs = body.move_(container.abs_x1.get(), container.abs_y1.get());
|
||||
let visual = self
|
||||
.state
|
||||
.animations
|
||||
.visual_rect(child.node_id(), abs, self.state.now_nsec());
|
||||
visual.move_(-container.abs_x1.get(), -container.abs_y1.get())
|
||||
}
|
||||
|
||||
pub fn render_container(&mut self, container: &ContainerNode, x: i32, y: i32) {
|
||||
self.render_container_decorations(container, x, y);
|
||||
|
||||
|
|
@ -465,6 +479,7 @@ impl Renderer<'_> {
|
|||
}
|
||||
}
|
||||
let mb = container.mono_body.get();
|
||||
let visual_mb = self.presentation_child_body(container, &child.node, mb);
|
||||
if self.state.theme.sizes.gap.get() != 0 {
|
||||
let bw = self.state.theme.sizes.border_width.get();
|
||||
let border_color = self.state.theme.colors.border.get();
|
||||
|
|
@ -476,10 +491,10 @@ impl Renderer<'_> {
|
|||
};
|
||||
if !child.node.node_is_container() {
|
||||
let frame = Rect::new_sized_saturating(
|
||||
mb.x1() - bw,
|
||||
mb.y1() - bw,
|
||||
mb.width() + 2 * bw,
|
||||
mb.height() + 2 * bw,
|
||||
visual_mb.x1() - bw,
|
||||
visual_mb.y1() - bw,
|
||||
visual_mb.width() + 2 * bw,
|
||||
visual_mb.height() + 2 * bw,
|
||||
);
|
||||
self.render_rounded_frame(
|
||||
frame,
|
||||
|
|
@ -491,14 +506,18 @@ impl Renderer<'_> {
|
|||
);
|
||||
}
|
||||
}
|
||||
let body = mb.move_(x, y);
|
||||
let body = visual_mb.move_(x, y);
|
||||
let body = self.base.scale_rect(body);
|
||||
let content = container.mono_content.get();
|
||||
self.stretch = if content.width() != mb.width() || content.height() != mb.height() {
|
||||
Some(self.base.scale_point(mb.width(), mb.height()))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let content = container
|
||||
.mono_content
|
||||
.get()
|
||||
.at_point(visual_mb.x1(), visual_mb.y1());
|
||||
self.stretch =
|
||||
if content.width() != visual_mb.width() || content.height() != visual_mb.height() {
|
||||
Some(self.base.scale_point(visual_mb.width(), visual_mb.height()))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
if self.state.theme.sizes.gap.get() != 0 && !child.node.node_is_container() {
|
||||
let cr = self.state.theme.corner_radius.get();
|
||||
if !cr.is_zero() {
|
||||
|
|
@ -524,10 +543,13 @@ impl Renderer<'_> {
|
|||
};
|
||||
let cr = self.state.theme.corner_radius.get();
|
||||
for child in container.children.iter() {
|
||||
let body = child.body.get();
|
||||
if body.x1() >= container.width.get() || body.y1() >= container.height.get() {
|
||||
let layout_body = child.body.get();
|
||||
if layout_body.x1() >= container.width.get()
|
||||
|| layout_body.y1() >= container.height.get()
|
||||
{
|
||||
break;
|
||||
}
|
||||
let body = self.presentation_child_body(container, &child.node, layout_body);
|
||||
if gap != 0 {
|
||||
let c = if child.border_color_is_focused.get() {
|
||||
&focused_border_color
|
||||
|
|
@ -544,7 +566,7 @@ impl Renderer<'_> {
|
|||
self.render_rounded_frame(frame, c, cr, bw, x, y);
|
||||
}
|
||||
}
|
||||
let content = child.content.get();
|
||||
let content = child.content.get().at_point(body.x1(), body.y1());
|
||||
self.stretch =
|
||||
if content.width() != body.width() || content.height() != body.height() {
|
||||
Some(self.base.scale_point(body.width(), body.height()))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue