From 446c6135ef709570852318ba2c4c1f2a442a38d6 Mon Sep 17 00:00:00 2001 From: Combiler01 Date: Tue, 27 Oct 2026 12:17:20 +0530 Subject: [PATCH] fix(ui): duplicate xobject arrange/delete test and update parity evidence --- crates/ui-egui/src/editing.rs | 1 - .../ui-egui/src/tools/edit_text_ui/image.rs | 2 - crates/ui-egui/tests/it/editing.rs | 40 +++++++++---------- parity/acrobat-features.toml | 2 +- 4 files changed, 21 insertions(+), 24 deletions(-) diff --git a/crates/ui-egui/src/editing.rs b/crates/ui-egui/src/editing.rs index b0fe622ff9..f6e43f8a6e 100644 --- a/crates/ui-egui/src/editing.rs +++ b/crates/ui-egui/src/editing.rs @@ -694,7 +694,6 @@ fn re_resolve_image_selection( .filter(|(_, img)| img.name == target.name && img.object == target.object && rect_matches(img.rect, target.rect)) .map(|(idx, _)| idx) .collect(); - eprintln!("re_resolve: view.image_sel={:?}, target_rect={:?}, exact_matches={:?}, ambiguous_before={ambiguous_before}", view.image_selection.as_ref().map(|s| s.index), target.rect, exact_matches); let new_idx = if !ambiguous_before && exact_matches.len() == 1 { exact_matches.first().copied() } else if !ambiguous_before && exact_matches.is_empty() { diff --git a/crates/ui-egui/src/tools/edit_text_ui/image.rs b/crates/ui-egui/src/tools/edit_text_ui/image.rs index d7ea2e7df1..7d1be61a4d 100644 --- a/crates/ui-egui/src/tools/edit_text_ui/image.rs +++ b/crates/ui-egui/src/tools/edit_text_ui/image.rs @@ -1133,9 +1133,7 @@ pub(crate) fn image_context_menu( } ui.menu_button(tl!("Arrange image"), |ui| { - eprintln!("ARRANGE IMAGE SUBMENU SHOWN"); if ui.button(tl!("Bring to front")).clicked() { - eprintln!("CLICKED BRING TO FRONT!"); view.pending_edit = Some(Edit::EditPageImage { page, index: hit, change: E::Arrange(pdfcraft_engine::ArrangeOrder::BringToFront) }); close(ui); } diff --git a/crates/ui-egui/tests/it/editing.rs b/crates/ui-egui/tests/it/editing.rs index 1d506d598c..a9deb6771a 100644 --- a/crates/ui-egui/tests/it/editing.rs +++ b/crates/ui-egui/tests/it/editing.rs @@ -7997,7 +7997,7 @@ fn a_paragraph_selected_by_its_frame_deletes_with_one_key() { } fn two_image_fixture() -> Vec { - let content = "q 20 0 0 20 20 20 cm /Im0 Do Q q 20 0 0 20 100 100 cm /Im0 Do Q"; + let content = "q 20 0 0 20 100 100 cm /Im0 Do Q q 20 0 0 20 20 20 cm /Im0 Do Q"; let objs: Vec = vec![ "<< /Type /Catalog /Pages 2 0 R >>".into(), "<< /Type /Pages /Kids [3 0 R] /Count 1 >>".into(), @@ -8036,24 +8036,24 @@ fn duplicate_xobject_at_different_rects_arrange_and_delete_keeps_other_instance_ let xf = h.state().views[0].page_xform(0).expect("page 0 xform"); let imgs = h.state().session.get(id).unwrap().page_images(0); - let b1 = pdfcraft_ui_egui::canvas::image_screen_rect(&imgs[1], &xf, &h.state().session.get(id).unwrap().info, 0); - let p1 = b1.center(); - eprintln!("B1: {b1:?}, XF_RECT: {:?}, P1: {p1:?}", xf.rect); + // B is at index 0 [100, 100, 120, 120], in the back + let b0 = pdfcraft_ui_egui::canvas::image_screen_rect(&imgs[0], &xf, &h.state().session.get(id).unwrap().info, 0); + let p_b = b0.center(); - // 1. Select B (image 1) - h.hover_at(p1); + // 1. Select B (image 0) + h.hover_at(p_b); h.run_steps(1); - h.drag_at(p1); + h.drag_at(p_b); h.run_steps(1); - h.drop_at(p1); + h.drop_at(p_b); h.run_steps(2); - assert_eq!(h.state().views[0].image_selection.as_ref().map(|s| s.index), Some(1), "image 1 selected"); + assert_eq!(h.state().views[0].image_selection.as_ref().map(|s| s.index), Some(0), "image 0 (B) selected"); - // 2. Right-click B (image 1) to open context menu - h.hover_at(p1); + // 2. Right-click B (image 0) to open context menu + h.hover_at(p_b); h.run_steps(1); - h.event(egui::Event::PointerButton { pos: p1, button: egui::PointerButton::Secondary, pressed: true, modifiers: Default::default() }); - h.event(egui::Event::PointerButton { pos: p1, button: egui::PointerButton::Secondary, pressed: false, modifiers: Default::default() }); + h.event(egui::Event::PointerButton { pos: p_b, button: egui::PointerButton::Secondary, pressed: true, modifiers: Default::default() }); + h.event(egui::Event::PointerButton { pos: p_b, button: egui::PointerButton::Secondary, pressed: false, modifiers: Default::default() }); h.run_steps(2); // 3. Open "Arrange image" submenu and click "Bring to front" @@ -8062,20 +8062,20 @@ fn duplicate_xobject_at_different_rects_arrange_and_delete_keeps_other_instance_ h.get_by_label("Bring to front").click(); h.run_steps(3); - // 4. Selection must be preserved after arrange + // 4. Selection must be preserved after arrange: B is now at index 1 (in front) let sel = h.state().views[0].image_selection.as_ref().map(|s| s.index); - assert!(sel.is_some(), "selection must be preserved after arrange"); + assert_eq!(sel, Some(1), "selection must track B to index 1 after arrange"); - // 5. Right-click on the selected image again to open context menu + // 5. Right-click on the selected image (B at index 1) again to open context menu let sel_idx = sel.unwrap(); let xf_again = h.state().views[0].page_xform(0).expect("page 0 xform"); let cur_imgs = h.state().session.get(id).unwrap().page_images(0); let b_rect = pdfcraft_ui_egui::canvas::image_screen_rect(&cur_imgs[sel_idx], &xf_again, &h.state().session.get(id).unwrap().info, 0); - let p_b = b_rect.center(); - h.hover_at(p_b); + let p_b2 = b_rect.center(); + h.hover_at(p_b2); h.run_steps(1); - h.event(egui::Event::PointerButton { pos: p_b, button: egui::PointerButton::Secondary, pressed: true, modifiers: Default::default() }); - h.event(egui::Event::PointerButton { pos: p_b, button: egui::PointerButton::Secondary, pressed: false, modifiers: Default::default() }); + h.event(egui::Event::PointerButton { pos: p_b2, button: egui::PointerButton::Secondary, pressed: true, modifiers: Default::default() }); + h.event(egui::Event::PointerButton { pos: p_b2, button: egui::PointerButton::Secondary, pressed: false, modifiers: Default::default() }); h.run_steps(2); // 6. Click "Delete" in context menu diff --git a/parity/acrobat-features.toml b/parity/acrobat-features.toml index 89d097f022..e130707428 100644 --- a/parity/acrobat-features.toml +++ b/parity/acrobat-features.toml @@ -1968,7 +1968,7 @@ milestone = "M7" status = "partial" commands = ["edit.edit_text"] tools = [] -evidence = ["crates/ui-egui/src/edit_text_ui.rs::superscript_and_subscript_conversion"] +evidence = ["crates/ui-egui/src/tools/edit_text_ui.rs::superscript_and_subscript_conversion"] notes = "Toggled in the Format text panel for the selection. Uses Unicode superscript and subscript forms (2 ↔ ²) rather than text rise (Ts) and font scaling, so the font must provide the corresponding glyphs and extracted text contains the Unicode characters." [[feature]]