Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8a7675f8d | ||
|
|
0992b9bc0e |
No files matched your search
Generated
+1
-1
@@ -1393,7 +1393,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ink-notes"
|
name = "ink-notes"
|
||||||
version = "0.34.0"
|
version = "0.34.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ab_glyph",
|
"ab_glyph",
|
||||||
"arboard",
|
"arboard",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ink-notes"
|
name = "ink-notes"
|
||||||
version = "0.34.0"
|
version = "0.34.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Notizbuch-App für Stift, Touch und Maus unter Linux"
|
description = "Notizbuch-App für Stift, Touch und Maus unter Linux"
|
||||||
repository = "https://gitea.pansi.eu/harald/ink-notes"
|
repository = "https://gitea.pansi.eu/harald/ink-notes"
|
||||||
|
|||||||
@@ -84,6 +84,11 @@
|
|||||||
</branding>
|
</branding>
|
||||||
<content_rating type="oars-1.1" />
|
<content_rating type="oars-1.1" />
|
||||||
<releases>
|
<releases>
|
||||||
|
<release version="0.34.1" date="2026-10-25">
|
||||||
|
<description>
|
||||||
|
<p>A finger swipe is measured reliably again for gliding, also when the view touches the edge of the notebook. The fling diagnostics log more details.</p>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
<release version="0.34.0" date="2026-10-23">
|
<release version="0.34.0" date="2026-10-23">
|
||||||
<description>
|
<description>
|
||||||
<p>The eraser size is set in a menu like the pens, with presets and a slider. Corners of snapped shapes stay pointed. Slides get flat tiles in the page overview.</p>
|
<p>The eraser size is set in a menu like the pens, with presets and a slider. Corners of snapped shapes stay pointed. Slides get flat tiles in the page overview.</p>
|
||||||
|
|||||||
@@ -84,6 +84,11 @@
|
|||||||
</branding>
|
</branding>
|
||||||
<content_rating type="oars-1.1" />
|
<content_rating type="oars-1.1" />
|
||||||
<releases>
|
<releases>
|
||||||
|
<release version="0.34.1" date="2026-10-25">
|
||||||
|
<description>
|
||||||
|
<p>A finger swipe is measured reliably again for gliding, also when the view touches the edge of the notebook. The fling diagnostics log more details.</p>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
<release version="0.34.0" date="2026-10-23">
|
<release version="0.34.0" date="2026-10-23">
|
||||||
<description>
|
<description>
|
||||||
<p>The eraser size is set in a menu like the pens, with presets and a slider. Corners of snapped shapes stay pointed. Slides get flat tiles in the page overview.</p>
|
<p>The eraser size is set in a menu like the pens, with presets and a slider. Corners of snapped shapes stay pointed. Slides get flat tiles in the page overview.</p>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
Notebook app for pen, touch and mouse on Linux (tested on Zorin OS 18 / Ubuntu 24.04).
|
Notebook app for pen, touch and mouse on Linux (tested on Zorin OS 18 / Ubuntu 24.04).
|
||||||
|
|
||||||
### Highlights:
|
### Highlights:
|
||||||
|
- **Fling fix**: A finger swipe is no longer lost when the view touches the edge of the notebook, so the page glides on after a fast swipe; the fling diagnostics (`INK_NOTES_DEBUG_FLING=1`) log moves, distance and timing
|
||||||
- **Feedback round**: The eraser size is set in a menu like the pens (four presets and a slider); corners of snapped triangles and polygons stay pointed; slides (landscape PDFs) get flat tiles in the page overview without an empty strip
|
- **Feedback round**: The eraser size is set in a menu like the pens (four presets and a slider); corners of snapped triangles and polygons stay pointed; slides (landscape PDFs) get flat tiles in the page overview without an empty strip
|
||||||
- **Palm rejection & more feedback**: A hand resting on the screen while the pen is near is ignored (also on the title bar, no more accidental paste menu or window moving); the eraser has four sizes (button below the eraser modes, remembered); the page overview shows imported PDF pages; snapped triangles, rectangles and polygons have the same width on every side; a selection made with the pen's select button can be moved with the bare pen
|
- **Palm rejection & more feedback**: A hand resting on the screen while the pen is near is ignored (also on the title bar, no more accidental paste menu or window moving); the eraser has four sizes (button below the eraser modes, remembered); the page overview shows imported PDF pages; snapped triangles, rectangles and polygons have the same width on every side; a selection made with the pen's select button can be moved with the bare pen
|
||||||
- **Feedback round**: The endless canvas starts at the top left and only grows to the right and down; new text fields start short and grow with the text; toolbar buttons are larger again on small screens; on Wayland the title bar buttons (close, minimize, maximize) and moving the window work with a finger
|
- **Feedback round**: The endless canvas starts at the top left and only grows to the right and down; new text fields start short and grow with the text; toolbar buttons are larger again on small screens; on Wayland the title bar buttons (close, minimize, maximize) and moving the window work with a finger
|
||||||
|
|||||||
+14
-5
@@ -1428,6 +1428,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
// Langes Drücken mit einem Finger öffnet das Kontextmenü
|
// Langes Drücken mit einem Finger öffnet das Kontextmenü
|
||||||
let mut long_press = ui::LongPress::default();
|
let mut long_press = ui::LongPress::default();
|
||||||
let mut touch_pan_last_pos = (0.0_f32, 0.0_f32);
|
let mut touch_pan_last_pos = (0.0_f32, 0.0_f32);
|
||||||
|
// Diagnostics for the fling: moves, path length (px) and time of the last move of this swipe
|
||||||
|
let mut touch_pan_trace: (u32, f32, Option<Instant>) = (0, 0.0, None);
|
||||||
// Nachgleiten nach schnellem Wischen mit dem Finger (Issue #28)
|
// Nachgleiten nach schnellem Wischen mit dem Finger (Issue #28)
|
||||||
let mut fling = ink_notes::viewport::Fling::default();
|
let mut fling = ink_notes::viewport::Fling::default();
|
||||||
// Diagnosis for Issue #28: log every finger lift and the swipe speed
|
// Diagnosis for Issue #28: log every finger lift and the swipe speed
|
||||||
@@ -3047,6 +3049,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
// Standard: 1 Finger scrollt / verschiebt den Canvas (Pan)
|
// Standard: 1 Finger scrollt / verschiebt den Canvas (Pan)
|
||||||
is_touch_panning = true;
|
is_touch_panning = true;
|
||||||
touch_pan_last_pos = (tx, ty);
|
touch_pan_last_pos = (tx, ty);
|
||||||
|
touch_pan_trace = (0, 0.0, None);
|
||||||
} else {
|
} else {
|
||||||
// Modus Finger-Zeichnen aktiv
|
// Modus Finger-Zeichnen aktiv
|
||||||
focus_page_at!((tx, ty));
|
focus_page_at!((tx, ty));
|
||||||
@@ -3123,6 +3126,9 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
touch_pan_last_pos = (tx, ty);
|
touch_pan_last_pos = (tx, ty);
|
||||||
canvas.pan(dx, dy);
|
canvas.pan(dx, dy);
|
||||||
fling.track(Vec2::new(dx, dy), Instant::now());
|
fling.track(Vec2::new(dx, dy), Instant::now());
|
||||||
|
touch_pan_trace.0 += 1;
|
||||||
|
touch_pan_trace.1 += Vec2::new(dx, dy).length();
|
||||||
|
touch_pan_trace.2 = Some(Instant::now());
|
||||||
window.request_redraw();
|
window.request_redraw();
|
||||||
} else if is_touch_drawing {
|
} else if is_touch_drawing {
|
||||||
current_pressure = pressure;
|
current_pressure = pressure;
|
||||||
@@ -3184,10 +3190,12 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
fling.track(Vec2::new(dx, dy), Instant::now());
|
fling.track(Vec2::new(dx, dy), Instant::now());
|
||||||
let velocity = fling.release(Instant::now());
|
let velocity = fling.release(Instant::now());
|
||||||
if debug_fling {
|
if debug_fling {
|
||||||
|
let (moves, path, last_move) = touch_pan_trace;
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"[Nachgleiten] {:.0} px/s beim Abheben, gleitet: {}",
|
"[Nachgleiten] {:.0} px/s beim Abheben, gleitet: {} ({moves} Bewegungen, {path:.0} px, letzte vor {} ms)",
|
||||||
velocity.length(),
|
velocity.length(),
|
||||||
fling.is_active()
|
fling.is_active(),
|
||||||
|
last_move.map_or(-1, |t| t.elapsed().as_millis() as i64)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
window.request_redraw();
|
window.request_redraw();
|
||||||
@@ -3255,13 +3263,14 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
// schreibt, bleibt dort, bis wieder gescrollt wird (Undo betrifft sie).
|
// schreibt, bleibt dort, bis wieder gescrollt wird (Undo betrifft sie).
|
||||||
canvas.set_fit_box(notebook.fit_box());
|
canvas.set_fit_box(notebook.fit_box());
|
||||||
if notebook.is_endless() {
|
if notebook.is_endless() {
|
||||||
if canvas.clamp_endless(notebook.current_page().endless_scroll_limit()) {
|
if canvas.clamp_endless(notebook.current_page().endless_scroll_limit()) && fling.is_active() {
|
||||||
fling.stop();
|
fling.stop();
|
||||||
}
|
}
|
||||||
} else if ui_state.continuous_scroll {
|
} else if ui_state.continuous_scroll {
|
||||||
let stack = notebook.page_stack();
|
let stack = notebook.page_stack();
|
||||||
if canvas.clamp_scroll(&stack) {
|
if canvas.clamp_scroll(&stack) && fling.is_active() {
|
||||||
// Am Anfang oder Ende des Notizbuchs angekommen
|
// Am Anfang oder Ende des Notizbuchs angekommen (only a glide stops
|
||||||
|
// here; a finger still on the screen keeps its measured swipe)
|
||||||
fling.stop();
|
fling.stop();
|
||||||
}
|
}
|
||||||
// Unabhängig von der Bezugsseite: Lage bezogen auf die erste Seite
|
// Unabhängig von der Bezugsseite: Lage bezogen auf die erste Seite
|
||||||
|
|||||||
Reference in new issue
Block a user