cargo fmt: the Retired, F6 and appearance commits left four files unformatted, failing CI's crate job
This commit is contained in:
1 parent
69265b4fd4
commit
cbf63c6945
5 files changed
+47
-11
No files matched your search
@@ -3,8 +3,8 @@ use std::{rc::Rc, time::Duration};
|
|||||||
use gpui::{
|
use gpui::{
|
||||||
Anchor, Animation, AnimationExt, AnyElement, App, ClickEvent, Context, ElementId, Entity,
|
Anchor, Animation, AnimationExt, AnyElement, App, ClickEvent, Context, ElementId, Entity,
|
||||||
FontWeight, HoverListenerMode, InteractiveElement, IntoElement, ParentElement, Pixels,
|
FontWeight, HoverListenerMode, InteractiveElement, IntoElement, ParentElement, Pixels,
|
||||||
RenderOnce, Role, SharedString, StatefulInteractiveElement, Styled, Task, Window, anchored, canvas,
|
RenderOnce, Role, SharedString, StatefulInteractiveElement, Styled, Task, Window, anchored,
|
||||||
div, point, prelude::*, relative,
|
canvas, div, point, prelude::*, relative,
|
||||||
};
|
};
|
||||||
use web_time::Instant;
|
use web_time::Instant;
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,10 @@ impl Retired {
|
|||||||
/// Frees images no one else holds; call while painting.
|
/// Frees images no one else holds; call while painting.
|
||||||
pub fn release(&mut self, window: &mut Window) {
|
pub fn release(&mut self, window: &mut Window) {
|
||||||
// A shared image may still be drawn; it waits.
|
// A shared image may still be drawn; it waits.
|
||||||
let (free, held): (Vec<_>, Vec<_>) = self.0.drain(..).partition(|image| Arc::strong_count(image) == 1);
|
let (free, held): (Vec<_>, Vec<_>) = self
|
||||||
|
.0
|
||||||
|
.drain(..)
|
||||||
|
.partition(|image| Arc::strong_count(image) == 1);
|
||||||
self.0 = held;
|
self.0 = held;
|
||||||
for image in free {
|
for image in free {
|
||||||
if let Err(error) = window.drop_image(image) {
|
if let Err(error) = window.drop_image(image) {
|
||||||
|
|||||||
+27
-7
@@ -191,7 +191,9 @@ impl Render for Kept {
|
|||||||
.key_context("HostField")
|
.key_context("HostField")
|
||||||
.track_focus(&self.field)
|
.track_focus(&self.field)
|
||||||
.size(px(100.0))
|
.size(px(100.0))
|
||||||
.on_action(move |_: &Indent, _, cx| view.update(cx, |kept, _| kept.indents += 1)),
|
.on_action(move |_: &Indent, _, cx| {
|
||||||
|
view.update(cx, |kept, _| kept.indents += 1)
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
.child(div().track_focus(&self.after).size(px(100.0)))
|
.child(div().track_focus(&self.after).size(px(100.0)))
|
||||||
}
|
}
|
||||||
@@ -216,7 +218,11 @@ fn f6_leaves_a_field_that_keeps_tab(cx: &mut TestAppContext) {
|
|||||||
cx.simulate_keystrokes("tab");
|
cx.simulate_keystrokes("tab");
|
||||||
let after = view.read_with(cx, |kept, _| kept.after.clone());
|
let after = view.read_with(cx, |kept, _| kept.after.clone());
|
||||||
cx.simulate_keystrokes("f6");
|
cx.simulate_keystrokes("f6");
|
||||||
assert_eq!(view.read_with(cx, |kept, _| kept.indents), 1, "Tab stayed in the field");
|
assert_eq!(
|
||||||
|
view.read_with(cx, |kept, _| kept.indents),
|
||||||
|
1,
|
||||||
|
"Tab stayed in the field"
|
||||||
|
);
|
||||||
cx.update(|window, _| assert!(after.is_focused(window), "F6 moved on"));
|
cx.update(|window, _| assert!(after.is_focused(window), "F6 moved on"));
|
||||||
cx.simulate_keystrokes("shift-f6");
|
cx.simulate_keystrokes("shift-f6");
|
||||||
let field = view.read_with(cx, |kept, _| kept.field.clone());
|
let field = view.read_with(cx, |kept, _| kept.field.clone());
|
||||||
@@ -238,7 +244,9 @@ impl Render for Painted {
|
|||||||
view.update(cx, |painted, _| {
|
view.update(cx, |painted, _| {
|
||||||
painted.retired.release(window);
|
painted.retired.release(window);
|
||||||
if let Some(image) = painted.image.clone() {
|
if let Some(image) = painted.image.clone() {
|
||||||
window.paint_image(bounds, bounds, Default::default(), image, 0, false).expect("paints");
|
window
|
||||||
|
.paint_image(bounds, bounds, Default::default(), image, 0, false)
|
||||||
|
.expect("paints");
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@@ -252,7 +260,10 @@ fn a_retired_image_is_freed_at_the_next_paint(cx: &mut TestAppContext) {
|
|||||||
cx.update(Theme::init);
|
cx.update(Theme::init);
|
||||||
let pixels = image::RgbaImage::from_pixel(2, 2, image::Rgba([1, 2, 3, 255]));
|
let pixels = image::RgbaImage::from_pixel(2, 2, image::Rgba([1, 2, 3, 255]));
|
||||||
let image = std::sync::Arc::new(gpui::RenderImage::new([image::Frame::new(pixels)]));
|
let image = std::sync::Arc::new(gpui::RenderImage::new([image::Frame::new(pixels)]));
|
||||||
let (view, cx) = cx.add_window_view(|_, _| Painted { image: Some(image), retired: super::Retired::default() });
|
let (view, cx) = cx.add_window_view(|_, _| Painted {
|
||||||
|
image: Some(image),
|
||||||
|
retired: super::Retired::default(),
|
||||||
|
});
|
||||||
cx.run_until_parked();
|
cx.run_until_parked();
|
||||||
view.update(cx, |painted, cx| {
|
view.update(cx, |painted, cx| {
|
||||||
let old = painted.image.take().expect("painted");
|
let old = painted.image.take().expect("painted");
|
||||||
@@ -260,7 +271,10 @@ fn a_retired_image_is_freed_at_the_next_paint(cx: &mut TestAppContext) {
|
|||||||
cx.notify();
|
cx.notify();
|
||||||
});
|
});
|
||||||
cx.run_until_parked();
|
cx.run_until_parked();
|
||||||
assert!(view.read_with(cx, |painted, _| painted.retired.is_empty()), "the old image was freed");
|
assert!(
|
||||||
|
view.read_with(cx, |painted, _| painted.retired.is_empty()),
|
||||||
|
"the old image was freed"
|
||||||
|
);
|
||||||
// One still held elsewhere waits until it is let go.
|
// One still held elsewhere waits until it is let go.
|
||||||
let pixels = image::RgbaImage::from_pixel(2, 2, image::Rgba([4, 5, 6, 255]));
|
let pixels = image::RgbaImage::from_pixel(2, 2, image::Rgba([4, 5, 6, 255]));
|
||||||
let shared = std::sync::Arc::new(gpui::RenderImage::new([image::Frame::new(pixels)]));
|
let shared = std::sync::Arc::new(gpui::RenderImage::new([image::Frame::new(pixels)]));
|
||||||
@@ -269,9 +283,15 @@ fn a_retired_image_is_freed_at_the_next_paint(cx: &mut TestAppContext) {
|
|||||||
cx.notify();
|
cx.notify();
|
||||||
});
|
});
|
||||||
cx.run_until_parked();
|
cx.run_until_parked();
|
||||||
assert!(!view.read_with(cx, |painted, _| painted.retired.is_empty()), "a held image waits");
|
assert!(
|
||||||
|
!view.read_with(cx, |painted, _| painted.retired.is_empty()),
|
||||||
|
"a held image waits"
|
||||||
|
);
|
||||||
drop(shared);
|
drop(shared);
|
||||||
view.update(cx, |_, cx| cx.notify());
|
view.update(cx, |_, cx| cx.notify());
|
||||||
cx.run_until_parked();
|
cx.run_until_parked();
|
||||||
assert!(view.read_with(cx, |painted, _| painted.retired.is_empty()), "then it is freed");
|
assert!(
|
||||||
|
view.read_with(cx, |painted, _| painted.retired.is_empty()),
|
||||||
|
"then it is freed"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
@@ -75,7 +75,9 @@ impl RenderOnce for ThemeSelector {
|
|||||||
.iter()
|
.iter()
|
||||||
.fold(
|
.fold(
|
||||||
SegmentedControl::new(self.id, *words),
|
SegmentedControl::new(self.id, *words),
|
||||||
|control, (_, words, icon)| control.segment(*words, i18n::text(cx, words, &[]), Some(*icon)),
|
|control, (_, words, icon)| {
|
||||||
|
control.segment(*words, i18n::text(cx, words, &[]), Some(*icon))
|
||||||
|
},
|
||||||
)
|
)
|
||||||
.on_change(move |value, window, cx| {
|
.on_change(move |value, window, cx| {
|
||||||
let (chosen, _, _) = Appearance::ALL
|
let (chosen, _, _) = Appearance::ALL
|
||||||
|
|||||||
@@ -12,3 +12,14 @@
|
|||||||
- [x] G7 Issue #6: `shell::ColumnShell`, a sidebar that runs to the window's top with the traffic lights, beside one or two panes that bring their own headers; tested
|
- [x] G7 Issue #6: `shell::ColumnShell`, a sidebar that runs to the window's top with the traffic lights, beside one or two panes that bring their own headers; tested
|
||||||
- [x] G8 Issue #6: a Layout story, `stories.json`, AGENTS.md and the PRD line; the story runs live on the site
|
- [x] G8 Issue #6: a Layout story, `stories.json`, AGENTS.md and the PRD line; the story runs live on the site
|
||||||
- [x] G9 Push, deploy, reply on #6 and #7, close #6
|
- [x] G9 Push, deploy, reply on #6 and #7, close #6
|
||||||
|
|
||||||
|
# GitHub round, 2026-10-08
|
||||||
|
|
||||||
|
- [x] G10 CI: `cargo fmt` on the files the last commits left unformatted
|
||||||
|
- [ ] G11 Issue #7: a caret is a whole number of device pixels wide at a device pixel, so it never shows thin then thick; tested
|
||||||
|
- [ ] G12 Issue #7: an IME asks for its candidate box past the laid-out text; the box clamps to the last layout, as `bounds_for` does; tested
|
||||||
|
- [ ] G13 Issue #12: a floating option list occludes, so the wheel scrolls the list and not the page under it; tested
|
||||||
|
- [ ] G14 Issue #7: BlockEditor scrolls in its own `ScrollArea` with its scrollbar and keeps the caret in view as blocks are added; tested
|
||||||
|
- [ ] G15 Issue #7: BlockEditor turns into Markdown and back; tested
|
||||||
|
- [ ] G16 Issue #7: a selection across blocks: drag or Shift-press selects, copy, cut, delete and typing act on it, undo restores; tested
|
||||||
|
- [ ] G17 Push, reply on #7 and #12
|
||||||
Reference in new issue
Block a user