Format Rust sources at 100 columns
This commit is contained in:
1 parent
4661f595f8
commit
610478f8c7
336 files changed
+23497
-7892
No files matched your search
@@ -75,7 +75,11 @@ fn panel_preview_stays_visible_while_the_items_editor_scrolls() {
|
||||
.unwrap();
|
||||
let mut app = App::init(
|
||||
Core::default(),
|
||||
("/unused/editor.kdl".into(), Snapshot::parse(String::new()), None),
|
||||
(
|
||||
"/unused/editor.kdl".into(),
|
||||
Snapshot::parse(String::new()),
|
||||
None,
|
||||
),
|
||||
)
|
||||
.0;
|
||||
app.page = Page::Bar;
|
||||
@@ -95,7 +99,10 @@ fn panel_preview_stays_visible_while_the_items_editor_scrolls() {
|
||||
.operate(&mut tree, Layout::new(&node), &renderer, &mut before);
|
||||
let mut scroll = cosmic::iced::advanced::widget::operation::scrollable::scroll_to::<()>(
|
||||
widget::Id::new("settings-content"),
|
||||
cosmic::iced::widget::scrollable::AbsoluteOffset { x: None, y: Some(200.) },
|
||||
cosmic::iced::widget::scrollable::AbsoluteOffset {
|
||||
x: None,
|
||||
y: Some(200.),
|
||||
},
|
||||
);
|
||||
view.as_widget_mut()
|
||||
.operate(&mut tree, Layout::new(&node), &renderer, &mut scroll);
|
||||
@@ -129,7 +136,11 @@ fn appearance_scroll_preserves_progress_and_settles_visibility() {
|
||||
fn text(&mut self, _: Option<&widget::Id>, bounds: Rectangle, text: &str) {
|
||||
if matches!(
|
||||
text,
|
||||
"Shell corner radius" | "Shell opacity" | "Background blur" | "Interface font" | "Focus border"
|
||||
"Shell corner radius"
|
||||
| "Shell opacity"
|
||||
| "Background blur"
|
||||
| "Interface font"
|
||||
| "Focus border"
|
||||
) {
|
||||
self.labels.push(bounds);
|
||||
}
|
||||
@@ -169,7 +180,11 @@ fn appearance_scroll_preserves_progress_and_settles_visibility() {
|
||||
let source = format!("theme {{ split #{split}; family \"ferese-blue\"; }}");
|
||||
let mut app = App::init(
|
||||
Core::default(),
|
||||
(PathBuf::from("/unused/scroll-test.kdl"), Snapshot::parse(source), None),
|
||||
(
|
||||
PathBuf::from("/unused/scroll-test.kdl"),
|
||||
Snapshot::parse(source),
|
||||
None,
|
||||
),
|
||||
)
|
||||
.0;
|
||||
app.page = Page::Appearance;
|
||||
@@ -188,9 +203,11 @@ fn appearance_scroll_preserves_progress_and_settles_visibility() {
|
||||
let mut view = app.page_view();
|
||||
let tree = tree.get_or_insert_with(|| Tree::new(view.as_widget()));
|
||||
tree.diff(view.as_widget_mut());
|
||||
let node =
|
||||
view.as_widget_mut()
|
||||
.layout(tree, &renderer, &layout::Limits::new(Size::ZERO, bounds.size()));
|
||||
let node = view.as_widget_mut().layout(
|
||||
tree,
|
||||
&renderer,
|
||||
&layout::Limits::new(Size::ZERO, bounds.size()),
|
||||
);
|
||||
let event = if !(4..52).contains(&frame) {
|
||||
Event::Window(window::Event::RedrawRequested(std::time::Instant::now()))
|
||||
} else {
|
||||
@@ -233,7 +250,8 @@ fn appearance_scroll_preserves_progress_and_settles_visibility() {
|
||||
if (4..28).contains(&frame) {
|
||||
assert!(
|
||||
position.offset > previous
|
||||
|| position.offset >= position.content_height - position.viewport_height - 0.5,
|
||||
|| position.offset
|
||||
>= position.content_height - position.viewport_height - 0.5,
|
||||
"scroll stopped at {position:?}"
|
||||
);
|
||||
}
|
||||
@@ -264,23 +282,35 @@ fn appearance_scroll_preserves_progress_and_settles_visibility() {
|
||||
view.as_widget_mut()
|
||||
.operate(tree, Layout::new(&node), &renderer, &mut labels);
|
||||
let started = std::time::Instant::now();
|
||||
let pixels = Headless::screenshot(&mut renderer, physical, scale, theme.cosmic().bg_color().into());
|
||||
let pixels = Headless::screenshot(
|
||||
&mut renderer,
|
||||
physical,
|
||||
scale,
|
||||
theme.cosmic().bg_color().into(),
|
||||
);
|
||||
if (4..52).contains(&frame) {
|
||||
render_times.push(started.elapsed().as_micros());
|
||||
}
|
||||
if let Some(viewport) = labels.viewport {
|
||||
for bounds in labels.labels {
|
||||
let bounds = bounds - labels.translation;
|
||||
if bounds.y < viewport.y + 2. || bounds.y + bounds.height > viewport.y + viewport.height - 2. {
|
||||
if bounds.y < viewport.y + 2.
|
||||
|| bounds.y + bounds.height > viewport.y + viewport.height - 2.
|
||||
{
|
||||
continue;
|
||||
}
|
||||
let mut ink = 0;
|
||||
for y in (bounds.y * scale).ceil() as u32..((bounds.y + bounds.height) * scale).floor() as u32 {
|
||||
for x in
|
||||
(bounds.x * scale).ceil() as u32..((bounds.x + bounds.width) * scale).floor() as u32
|
||||
for y in (bounds.y * scale).ceil() as u32
|
||||
..((bounds.y + bounds.height) * scale).floor() as u32
|
||||
{
|
||||
for x in (bounds.x * scale).ceil() as u32
|
||||
..((bounds.x + bounds.width) * scale).floor() as u32
|
||||
{
|
||||
let index = ((y * physical.width + x) * 4) as usize;
|
||||
if pixels[index..index + 3].iter().any(|channel| *channel > 140) {
|
||||
if pixels[index..index + 3]
|
||||
.iter()
|
||||
.any(|channel| *channel > 140)
|
||||
{
|
||||
ink += 1;
|
||||
}
|
||||
}
|
||||
@@ -297,7 +327,10 @@ fn appearance_scroll_preserves_progress_and_settles_visibility() {
|
||||
for message in messages {
|
||||
if matches!(message, Message::RowVisibility(..)) {
|
||||
visibility_messages += 1;
|
||||
assert!(frame < 56, "visibility kept changing after scrolling stopped");
|
||||
assert!(
|
||||
frame < 56,
|
||||
"visibility kept changing after scrolling stopped"
|
||||
);
|
||||
}
|
||||
|
||||
let _ = app.update(message);
|
||||
@@ -305,7 +338,10 @@ fn appearance_scroll_preserves_progress_and_settles_visibility() {
|
||||
}
|
||||
|
||||
render_times.sort_unstable();
|
||||
assert!(checked_labels > 20, "scroll check must include visible field labels");
|
||||
assert!(
|
||||
checked_labels > 20,
|
||||
"scroll check must include visible field labels"
|
||||
);
|
||||
eprintln!(
|
||||
"backend={backend} split={split} render_median_us={} p95_us={} visibility_messages={visibility_messages}",
|
||||
render_times[render_times.len() / 2],
|
||||
@@ -323,7 +359,9 @@ fn gpu_panel_text_survives_preview_clipping_and_scrolling() {
|
||||
.expect("rendering tests require fontconfig");
|
||||
assert!(matched.status.success());
|
||||
let matched = String::from_utf8(matched.stdout).unwrap();
|
||||
let (family, path) = matched.split_once('\n').expect("rendering tests require a system font");
|
||||
let (family, path) = matched
|
||||
.split_once('\n')
|
||||
.expect("rendering tests require a system font");
|
||||
let font = ferese_theme::font(Some(family.split(',').next().unwrap()));
|
||||
cosmic::iced::advanced::graphics::text::font_system()
|
||||
.write()
|
||||
@@ -393,7 +431,9 @@ fn gpu_panel_text_survives_preview_clipping_and_scrolling() {
|
||||
for (_, bounds, clip) in &mut self.labels[self.traversal_start..] {
|
||||
*bounds = *bounds - translation;
|
||||
*clip = Some(clip.map_or(viewport, |clip| {
|
||||
(clip - translation).intersection(&viewport).unwrap_or_default()
|
||||
(clip - translation)
|
||||
.intersection(&viewport)
|
||||
.unwrap_or_default()
|
||||
}));
|
||||
}
|
||||
}
|
||||
@@ -438,28 +478,37 @@ fn gpu_panel_text_survives_preview_clipping_and_scrolling() {
|
||||
} else {
|
||||
panel_controls::PanelPage::Arrange
|
||||
};
|
||||
app.panel_selection = (selection == "battery").then(|| ferese_panel::ItemId("battery".into()));
|
||||
app.panel_group_selection = (selection == "status").then(|| ferese_panel::GroupId("status".into()));
|
||||
app.panel_selection =
|
||||
(selection == "battery").then(|| ferese_panel::ItemId("battery".into()));
|
||||
app.panel_group_selection =
|
||||
(selection == "status").then(|| ferese_panel::GroupId("status".into()));
|
||||
let bounds = Rectangle::with_size(Size::new(width, 650.));
|
||||
let physical = Size::new((width * scale) as u32, (650. * scale) as u32);
|
||||
let theme = app.native_palette.native_theme();
|
||||
let mut view = app.page_view();
|
||||
let mut tree = Tree::new(&view);
|
||||
let node =
|
||||
view.as_widget_mut()
|
||||
.layout(&mut tree, &renderer, &layout::Limits::new(Size::ZERO, bounds.size()));
|
||||
let node = view.as_widget_mut().layout(
|
||||
&mut tree,
|
||||
&renderer,
|
||||
&layout::Limits::new(Size::ZERO, bounds.size()),
|
||||
);
|
||||
let mut checked = 0;
|
||||
for offset in [0., 180., 400.] {
|
||||
for id in ["settings-content", "panel-inspector-scroll"] {
|
||||
let mut scroll = cosmic::iced::advanced::widget::operation::scrollable::scroll_to::<()>(
|
||||
widget::Id::new(id),
|
||||
cosmic::iced::widget::scrollable::AbsoluteOffset {
|
||||
x: None,
|
||||
y: Some(offset),
|
||||
},
|
||||
let mut scroll =
|
||||
cosmic::iced::advanced::widget::operation::scrollable::scroll_to::<()>(
|
||||
widget::Id::new(id),
|
||||
cosmic::iced::widget::scrollable::AbsoluteOffset {
|
||||
x: None,
|
||||
y: Some(offset),
|
||||
},
|
||||
);
|
||||
view.as_widget_mut().operate(
|
||||
&mut tree,
|
||||
Layout::new(&node),
|
||||
&renderer,
|
||||
&mut scroll,
|
||||
);
|
||||
view.as_widget_mut()
|
||||
.operate(&mut tree, Layout::new(&node), &renderer, &mut scroll);
|
||||
}
|
||||
renderer.reset(bounds);
|
||||
view.as_widget().draw(
|
||||
@@ -475,10 +524,13 @@ fn gpu_panel_text_survives_preview_clipping_and_scrolling() {
|
||||
mouse::Cursor::Unavailable,
|
||||
&bounds,
|
||||
);
|
||||
if let Some(mut overlay) =
|
||||
view.as_widget_mut()
|
||||
.overlay(&mut tree, Layout::new(&node), &renderer, &bounds, Vector::ZERO)
|
||||
{
|
||||
if let Some(mut overlay) = view.as_widget_mut().overlay(
|
||||
&mut tree,
|
||||
Layout::new(&node),
|
||||
&renderer,
|
||||
&bounds,
|
||||
Vector::ZERO,
|
||||
) {
|
||||
let overlay = overlay.as_overlay_mut();
|
||||
let node = overlay.layout(&renderer, bounds.size());
|
||||
renderer.with_layer(bounds, |renderer| {
|
||||
@@ -496,9 +548,18 @@ fn gpu_panel_text_survives_preview_clipping_and_scrolling() {
|
||||
});
|
||||
}
|
||||
let mut labels = Labels::default();
|
||||
view.as_widget_mut()
|
||||
.operate(&mut tree, Layout::new(&node), &renderer, &mut labels);
|
||||
let pixels = Headless::screenshot(&mut renderer, physical, scale, theme.cosmic().bg_color().into());
|
||||
view.as_widget_mut().operate(
|
||||
&mut tree,
|
||||
Layout::new(&node),
|
||||
&renderer,
|
||||
&mut labels,
|
||||
);
|
||||
let pixels = Headless::screenshot(
|
||||
&mut renderer,
|
||||
physical,
|
||||
scale,
|
||||
theme.cosmic().bg_color().into(),
|
||||
);
|
||||
for (label, rect, clip) in labels.labels {
|
||||
let clip = clip.unwrap_or(bounds);
|
||||
if rect.width <= 0.
|
||||
@@ -511,10 +572,17 @@ fn gpu_panel_text_survives_preview_clipping_and_scrolling() {
|
||||
continue;
|
||||
}
|
||||
let mut ink = 0;
|
||||
for y in (rect.y * scale).ceil() as u32..((rect.y + rect.height) * scale).floor() as u32 {
|
||||
for x in (rect.x * scale).ceil() as u32..((rect.x + rect.width) * scale).floor() as u32 {
|
||||
for y in (rect.y * scale).ceil() as u32
|
||||
..((rect.y + rect.height) * scale).floor() as u32
|
||||
{
|
||||
for x in (rect.x * scale).ceil() as u32
|
||||
..((rect.x + rect.width) * scale).floor() as u32
|
||||
{
|
||||
let index = ((y * physical.width + x) * 4) as usize;
|
||||
if pixels[index..index + 3].iter().any(|channel| *channel > 140) {
|
||||
if pixels[index..index + 3]
|
||||
.iter()
|
||||
.any(|channel| *channel > 140)
|
||||
{
|
||||
ink += 1;
|
||||
}
|
||||
}
|
||||
@@ -526,7 +594,10 @@ fn gpu_panel_text_survives_preview_clipping_and_scrolling() {
|
||||
checked += 1;
|
||||
}
|
||||
}
|
||||
assert!(checked >= 6, "state={selection} must exercise visible panel labels");
|
||||
assert!(
|
||||
checked >= 6,
|
||||
"state={selection} must exercise visible panel labels"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -576,7 +647,12 @@ fn render_panel_review_states() {
|
||||
app.native_palette = visuals::Palette::from_resolved(&app.resolved.presented);
|
||||
for (name, tab, item, group) in [
|
||||
("panels", panel_controls::PanelPage::Panels, None, None),
|
||||
("floating-groups", panel_controls::PanelPage::Panels, None, None),
|
||||
(
|
||||
"floating-groups",
|
||||
panel_controls::PanelPage::Panels,
|
||||
None,
|
||||
None,
|
||||
),
|
||||
(
|
||||
"group-spacing-inspector",
|
||||
panel_controls::PanelPage::Arrange,
|
||||
@@ -585,7 +661,12 @@ fn render_panel_review_states() {
|
||||
),
|
||||
("corners", panel_controls::PanelPage::Panels, None, None),
|
||||
("morph", panel_controls::PanelPage::Panels, None, None),
|
||||
("preview-hover", panel_controls::PanelPage::Panels, None, None),
|
||||
(
|
||||
"preview-hover",
|
||||
panel_controls::PanelPage::Panels,
|
||||
None,
|
||||
None,
|
||||
),
|
||||
("navigation", panel_controls::PanelPage::Arrange, None, None),
|
||||
("shortcuts", panel_controls::PanelPage::Panels, None, None),
|
||||
("motion", panel_controls::PanelPage::Panels, None, None),
|
||||
@@ -616,10 +697,14 @@ fn render_panel_review_states() {
|
||||
};
|
||||
app.draft = Snapshot::parse(String::new()).unwrap();
|
||||
if matches!(name, "floating-groups" | "group-spacing-inspector") {
|
||||
let mut panel = ferese_panel::Panel::from_preset(ferese_panel::PanelStyle::Floating);
|
||||
let mut panel =
|
||||
ferese_panel::Panel::from_preset(ferese_panel::PanelStyle::Floating);
|
||||
panel.geometry.edge_margin = Some(6);
|
||||
app.draft
|
||||
.edit(&crate::store::set("panels", serde_json::to_value(vec![panel]).unwrap()))
|
||||
.edit(&crate::store::set(
|
||||
"panels",
|
||||
serde_json::to_value(vec![panel]).unwrap(),
|
||||
))
|
||||
.unwrap();
|
||||
}
|
||||
if name == "morph" {
|
||||
@@ -652,9 +737,11 @@ fn render_panel_review_states() {
|
||||
let theme = app.native_palette.native_theme();
|
||||
let mut view = app.page_view();
|
||||
let mut tree = Tree::new(&view);
|
||||
let node =
|
||||
view.as_widget_mut()
|
||||
.layout(&mut tree, &renderer, &layout::Limits::new(Size::ZERO, bounds.size()));
|
||||
let node = view.as_widget_mut().layout(
|
||||
&mut tree,
|
||||
&renderer,
|
||||
&layout::Limits::new(Size::ZERO, bounds.size()),
|
||||
);
|
||||
#[derive(Default)]
|
||||
struct HoverTarget(Option<Rectangle>);
|
||||
impl Operation for HoverTarget {
|
||||
@@ -669,9 +756,18 @@ fn render_panel_review_states() {
|
||||
}
|
||||
let cursor = if name == "preview-hover" {
|
||||
let mut target = HoverTarget::default();
|
||||
view.as_widget_mut()
|
||||
.operate(&mut tree, Layout::new(&node), &renderer, &mut target);
|
||||
mouse::Cursor::Available(target.0.expect("battery is visible in the review preview").center())
|
||||
view.as_widget_mut().operate(
|
||||
&mut tree,
|
||||
Layout::new(&node),
|
||||
&renderer,
|
||||
&mut target,
|
||||
);
|
||||
mouse::Cursor::Available(
|
||||
target
|
||||
.0
|
||||
.expect("battery is visible in the review preview")
|
||||
.center(),
|
||||
)
|
||||
} else {
|
||||
mouse::Cursor::Unavailable
|
||||
};
|
||||
@@ -690,10 +786,13 @@ fn render_panel_review_states() {
|
||||
cursor,
|
||||
&bounds,
|
||||
);
|
||||
if let Some(mut overlay) =
|
||||
view.as_widget_mut()
|
||||
.overlay(&mut tree, Layout::new(&node), &renderer, &bounds, Vector::ZERO)
|
||||
{
|
||||
if let Some(mut overlay) = view.as_widget_mut().overlay(
|
||||
&mut tree,
|
||||
Layout::new(&node),
|
||||
&renderer,
|
||||
&bounds,
|
||||
Vector::ZERO,
|
||||
) {
|
||||
let overlay = overlay.as_overlay_mut();
|
||||
let layout = overlay.layout(&renderer, bounds.size());
|
||||
renderer.with_layer(bounds, |renderer| {
|
||||
@@ -784,7 +883,9 @@ fn selecting_panel_items_preserves_editor_scroll_and_pane_bounds() {
|
||||
for selection in [
|
||||
None,
|
||||
Some(Message::PanelSelect(ferese_panel::ItemId("battery".into()))),
|
||||
Some(Message::PanelGroupSelect(ferese_panel::GroupId("status".into()))),
|
||||
Some(Message::PanelGroupSelect(ferese_panel::GroupId(
|
||||
"status".into(),
|
||||
))),
|
||||
Some(Message::PanelClearSelection),
|
||||
] {
|
||||
if let Some(selection) = selection {
|
||||
@@ -799,10 +900,14 @@ fn selecting_panel_items_preserves_editor_scroll_and_pane_bounds() {
|
||||
&layout::Limits::new(Size::ZERO, Size::new(width, 650.)),
|
||||
);
|
||||
if initial.is_none() {
|
||||
let mut scroll = cosmic::iced::advanced::widget::operation::scrollable::scroll_to::<()>(
|
||||
widget::Id::new("settings-content"),
|
||||
cosmic::iced::widget::scrollable::AbsoluteOffset { x: None, y: Some(180.) },
|
||||
);
|
||||
let mut scroll =
|
||||
cosmic::iced::advanced::widget::operation::scrollable::scroll_to::<()>(
|
||||
widget::Id::new("settings-content"),
|
||||
cosmic::iced::widget::scrollable::AbsoluteOffset {
|
||||
x: None,
|
||||
y: Some(180.),
|
||||
},
|
||||
);
|
||||
view.as_widget_mut()
|
||||
.operate(tree, Layout::new(&node), &renderer, &mut scroll);
|
||||
}
|
||||
@@ -816,7 +921,10 @@ fn selecting_panel_items_preserves_editor_scroll_and_pane_bounds() {
|
||||
let editor = panes.editor.unwrap();
|
||||
let inspector = panes.inspector.unwrap();
|
||||
assert!(editor.x + editor.width < inspector.x, "panes overlap");
|
||||
assert!(inspector.x + inspector.width <= width, "inspector leaves window");
|
||||
assert!(
|
||||
inspector.x + inspector.width <= width,
|
||||
"inspector leaves window"
|
||||
);
|
||||
assert!(editor.height > 100. && inspector.height > 100.);
|
||||
if let Some(initial) = &initial {
|
||||
assert_eq!(&panes, initial);
|
||||
@@ -890,22 +998,31 @@ fn sidebar_collapses_at_the_breakpoint_and_compact_navigation_dismisses() {
|
||||
assert_eq!(bounds.sidebar.is_none(), compact);
|
||||
assert_eq!(bounds.toggle.is_some(), compact);
|
||||
assert_eq!(bounds.page.unwrap().x, if compact { 0. } else { 204. });
|
||||
assert_eq!(bounds.page.unwrap().width, if compact { width } else { width - 204. });
|
||||
assert_eq!(
|
||||
bounds.page.unwrap().width,
|
||||
if compact { width } else { width - 204. }
|
||||
);
|
||||
}
|
||||
let _ = app.update(Message::Sidebar(true));
|
||||
assert!(app.sidebar_open);
|
||||
let mut view = app.page_view();
|
||||
let mut tree = Tree::new(&view);
|
||||
let size = Size::new(740., 650.);
|
||||
let node = view
|
||||
.as_widget_mut()
|
||||
.layout(&mut tree, &renderer, &layout::Limits::new(Size::ZERO, size));
|
||||
let node =
|
||||
view.as_widget_mut()
|
||||
.layout(&mut tree, &renderer, &layout::Limits::new(Size::ZERO, size));
|
||||
let mut messages = Vec::new();
|
||||
{
|
||||
let viewport = Rectangle::with_size(size);
|
||||
let mut overlay = view
|
||||
.as_widget_mut()
|
||||
.overlay(&mut tree, Layout::new(&node), &renderer, &viewport, Vector::ZERO)
|
||||
.overlay(
|
||||
&mut tree,
|
||||
Layout::new(&node),
|
||||
&renderer,
|
||||
&viewport,
|
||||
Vector::ZERO,
|
||||
)
|
||||
.expect("compact navigation overlay");
|
||||
let overlay = overlay.as_overlay_mut();
|
||||
let layout = overlay.layout(&renderer, size);
|
||||
@@ -937,6 +1054,9 @@ fn sidebar_collapses_at_the_breakpoint_and_compact_navigation_dismisses() {
|
||||
assert!(!app.sidebar_open);
|
||||
let _ = app.update(Message::Sidebar(true));
|
||||
let _ = app.update(Message::Page(Page::Bar));
|
||||
assert!(!app.sidebar_open, "reselecting the current page closes navigation too");
|
||||
assert!(
|
||||
!app.sidebar_open,
|
||||
"reselecting the current page closes navigation too"
|
||||
);
|
||||
assert!(app.pending.is_empty() && !app.saving);
|
||||
}
|
||||
Reference in new issue
Block a user