Stop the file tree from centering short folder/file names
ui.add_sized() centers a widget narrower than the box it's given, and Button/SelectableLabel size themselves to their actual text — so a short name in a wide column (a folder with no trailing badges, most visibly) drifted away from its own indent, landing to the right of its own deeper children. Pin main_align to the start so every name sits right after its indent regardless of length. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+38
-6
@@ -415,13 +415,32 @@ impl App {
|
||||
+ if show_tag { tag_w } else { 0.0 };
|
||||
let name_w =
|
||||
(row_width - indent - trailing).max(0.0);
|
||||
// `add_sized` centers a widget
|
||||
// smaller than the box it's given
|
||||
// — fine for a fixed-width badge,
|
||||
// but it let a short folder name
|
||||
// drift away from the indent that
|
||||
// was just drawn for it, and
|
||||
// further than its own deeper
|
||||
// children whose names fill more
|
||||
// of their (narrower) box. Pinning
|
||||
// `main_align` to the start keeps
|
||||
// the name anchored right after
|
||||
// the indent regardless of length.
|
||||
let button_response = ui
|
||||
.add_sized(
|
||||
[name_w, 20.0],
|
||||
.allocate_ui_with_layout(
|
||||
egui::vec2(name_w, 20.0),
|
||||
egui::Layout::left_to_right(egui::Align::Center)
|
||||
.with_main_align(egui::Align::Min),
|
||||
|ui| {
|
||||
ui.add(
|
||||
egui::Button::new(text)
|
||||
.frame(false)
|
||||
.truncate(),
|
||||
)
|
||||
},
|
||||
)
|
||||
.inner
|
||||
.on_hover_text(&row.path);
|
||||
|
||||
if button_response.clicked() {
|
||||
@@ -563,16 +582,29 @@ impl App {
|
||||
// file name simply spills out of the
|
||||
// panel. The wrap mode is what it
|
||||
// actually reads.
|
||||
//
|
||||
// `add_sized` also *centers* a
|
||||
// widget narrower than the box
|
||||
// it's given, which drifted short
|
||||
// file names away from the indent
|
||||
// just like folder names did —
|
||||
// `with_main_align(Min)` pins it
|
||||
// to the start instead.
|
||||
let mut label = ui
|
||||
.scope(|ui| {
|
||||
ui.style_mut().wrap_mode =
|
||||
Some(egui::TextWrapMode::Truncate);
|
||||
ui.add_sized(
|
||||
[label_w, 20.0],
|
||||
egui::SelectableLabel::new(
|
||||
ui.allocate_ui_with_layout(
|
||||
egui::vec2(label_w, 20.0),
|
||||
egui::Layout::left_to_right(egui::Align::Center)
|
||||
.with_main_align(egui::Align::Min),
|
||||
|ui| {
|
||||
ui.add(egui::SelectableLabel::new(
|
||||
selected, text,
|
||||
),
|
||||
))
|
||||
},
|
||||
)
|
||||
.inner
|
||||
})
|
||||
.inner;
|
||||
if let Some(tooltip) = &tooltip {
|
||||
|
||||
Reference in New Issue
Block a user