From dd702524ca618dff64e9ac1e035faea791611ac9 Mon Sep 17 00:00:00 2001 From: Harald Date: Sat, 10 Oct 2026 16:12:25 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Ausw=C3=A4hlen,=20Text=20und=20Platz=20s?= =?UTF-8?q?chaffen=20mit=20dem=20Finger=20(Issue=20#26)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ohne „Mit dem Finger zeichnen“ verschob ein Finger immer das Blatt, auch im Auswahlwerkzeug – Objekte ließen sich mit dem Finger weder auswählen noch verschieben. Jetzt nehmen Text und Platz schaffen den Finger immer, das Auswahlwerkzeug, wenn der Finger ein Objekt oder die Auswahl trifft; auf leerer Fläche verschiebt er weiter das Blatt. Halten öffnet dabei kein Kontextmenü. Co-Authored-By: Claude Opus 5.5 --- src/main.rs | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index c2e1b99..61b168a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -596,6 +596,31 @@ fn insert_image_on_page( )); } +/// Trifft ein Finger auf `screen` die Auswahl (Rahmen, Griffe) oder ein Objekt? Dann wählt bzw. +/// verschiebt er, sonst verschiebt er das Blatt. +fn finger_grabs_selection( + screen: (f32, f32), + canvas: &CanvasState, + page: &ink_notes::document::Page, + pixels_per_point: f32, + selection_state: &SelectionState, +) -> bool { + let on_selection = !selection_state.is_empty() + && !matches!( + selection_state.hit_test_handles( + page, + canvas, + Vec2::new(screen.0, screen.1), + pixels_per_point + ), + SelectionHandleHit::None + ); + on_selection + || canvas + .screen_to_page(screen.0, screen.1) + .is_some_and(|p| page.find_stroke_at(p, 25.0).is_some()) +} + /// Auswahlwerkzeug: Druck auf `screen` (physische Pixel) greift einen Griff, die Auswahl /// oder das Objekt darunter oder beginnt einen Auswahlrahmen. Mit `shift` wird die Auswahl /// erweitert. `true`, wenn etwas begonnen wurde. @@ -2820,7 +2845,29 @@ fn main() -> Result<(), Box> { cursor_screen_pos = (tx, ty); current_pressure = pressure; - if !ui_state.touch_draw_enabled { + // Ohne Finger-Zeichnen verschiebt ein Finger das Blatt – außer bei + // Werkzeugen, die nicht zeichnen: Text und Platz schaffen nehmen den + // Finger immer, Auswählen, wenn er ein Objekt oder die Auswahl trifft + // (Issue #26) + let finger_uses_tool = match ui_state.active_tool { + ActiveTool::Text | ActiveTool::Space => true, + ActiveTool::Select => { + focus_page_at!((tx, ty)); + finger_grabs_selection( + (tx, ty), + &canvas, + notebook.current_page(), + egui_ctx.pixels_per_point(), + &selection_state, + ) + } + _ => false, + }; + if finger_uses_tool { + // Halten soll hier kein Kontextmenü öffnen + long_press.cancel(); + } + if !ui_state.touch_draw_enabled && !finger_uses_tool { // Standard: 1 Finger scrollt / verschiebt den Canvas (Pan) is_touch_panning = true; touch_pan_last_pos = (tx, ty);