ui: register theme card focus upfront and assert TwoUp continuous preservation

This commit is contained in:
Combiler01 committed 2026-11-02 11:24:53 +05:30
1 parent dac706f3b2
commit 6aa88171d3
2 files changed
+25 -21

No files matched your search

+22 -20
View File
@@ -86,30 +86,32 @@ fn preview(ui: &mut egui::Ui, kind: ThemeKind, width: f32) {
fn card(ui: &mut egui::Ui, t: &Tokens, title: &str, active: bool, themes: &[(ThemeKind, &str)]) -> bool {
let mut card_clicked = false;
let frame_stroke = if active { Stroke::new(1.5, t.accent) } else { Stroke::new(1.0, t.border) };
let inner = egui::Frame::new().fill(t.card).stroke(frame_stroke).corner_radius(CornerRadius::same(6)).inner_margin(egui::Margin::same(8)).show(
ui,
|ui| {
ui.set_width(ui.available_width());
ui.horizontal(|ui| {
let font = theme::semibold(12.5);
let galley = crate::bidi::layout_ui(ui, title.to_owned(), font, t.text);
let (title_rect, _) = ui.allocate_exact_size(galley.size(), egui::Sense::hover());
ui.painter().galley(title_rect.min, galley, t.text);
if active {
ui.label(RichText::new(tl!("Active")).color(t.accent_text).small());
}
});
ui.add_space(4.0);
let shown = themes.first().map_or(ThemeKind::Light, |(kind, _)| *kind);
preview(ui, shown, ui.available_width());
},
);
let scope_res = ui.scope_builder(egui::UiBuilder::new().id_salt(title).sense(egui::Sense::click()), |ui| {
egui::Frame::new().fill(t.card).stroke(frame_stroke).corner_radius(CornerRadius::same(6)).inner_margin(egui::Margin::same(8)).show(
ui,
|ui| {
ui.set_width(ui.available_width());
ui.horizontal(|ui| {
let font = theme::semibold(12.5);
let galley = crate::bidi::layout_ui(ui, title.to_owned(), font, t.text);
let (title_rect, _) = ui.allocate_exact_size(galley.size(), egui::Sense::hover());
ui.painter().galley(title_rect.min, galley, t.text);
if active {
ui.label(RichText::new(tl!("Active")).color(t.accent_text).small());
}
});
ui.add_space(4.0);
let shown = themes.first().map_or(ThemeKind::Light, |(kind, _)| *kind);
preview(ui, shown, ui.available_width());
},
);
});
let resp = ui.interact(inner.response.rect, inner.response.id, egui::Sense::click());
let resp = scope_res.response;
resp.widget_info(|| egui::WidgetInfo::selected(egui::Role::RadioButton, true, active, title));
if resp.has_focus() {
ui.painter().rect_stroke(inner.response.rect, CornerRadius::same(6), Stroke::new(2.0, t.accent_text), egui::StrokeKind::Outside);
ui.painter().rect_stroke(resp.rect, CornerRadius::same(6), Stroke::new(2.0, t.accent_text), egui::StrokeKind::Outside);
}
let resp = theme::hand(resp);
@@ -113,15 +113,17 @@ fn segmented_pill_controls_switch_modes_and_layouts() {
h.run_steps(2);
assert_eq!(h.state().default_mode, pdfcraft_ui_egui::Mode::Convert);
let continuous_before = h.state().view_defaults.continuous;
// Switch page layout via segmented pill
h.get_by_label("Two-page view").scroll_to_me();
h.run_steps(3);
h.get_by_label("Two-page view").click();
h.run_steps(2);
assert_eq!(h.state().view_defaults.layout, pdfcraft_ui_egui::canvas::PageLayout::TwoUp);
assert_eq!(h.state().view_defaults.continuous, continuous_before, "Two-page view retains continuous scrolling");
// Switch continuous scrolling pill (can be combined with Two-page view)
let continuous_before = h.state().view_defaults.continuous;
h.get_by_label("Continuous scrolling").click();
h.run_steps(2);
assert_eq!(h.state().view_defaults.continuous, !continuous_before);