Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
680fa96f32 | ||
|
|
eb0a801921 | ||
|
|
76ecdac081 |
Generated
+1
-1
@@ -1393,7 +1393,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ink-notes"
|
name = "ink-notes"
|
||||||
version = "0.19.0"
|
version = "0.20.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.19.0"
|
version = "0.20.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"
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
Notizbuch-App für Stift, Touch und Maus unter Linux (getestet mit Zorin OS 18 / Ubuntu 24.04).
|
Notizbuch-App für Stift, Touch und Maus unter Linux (getestet mit Zorin OS 18 / Ubuntu 24.04).
|
||||||
|
|
||||||
### Highlights:
|
### Highlights:
|
||||||
|
- **Fehlerbehebung Stift**: Das erste Antippen mit dem Stift trifft jetzt – Knöpfe und Notizbücher reagieren sofort statt erst beim zweiten Tippen; Striche beginnen nicht mehr mit einer Linie von der vorherigen Stiftposition
|
||||||
|
- **Tasten am Stift belegen**: Im ☰-Menü unter Eingabe jede Stifttaste mit Radieren, Auswählen, Textmarker, Stift oder Nichts belegen (gilt, solange die Taste gedrückt ist); Tasten erscheinen nach dem ersten Drücken und leuchten beim Drücken grün
|
||||||
- **Ordner verschieben**: Ordner lassen sich jetzt wie Notizbücher mit 📂 samt Inhalt in andere Ordner oder auf die oberste Ebene verschieben
|
- **Ordner verschieben**: Ordner lassen sich jetzt wie Notizbücher mit 📂 samt Inhalt in andere Ordner oder auf die oberste Ebene verschieben
|
||||||
- **Ordner für Notizbücher**: Beliebig verschachtelte Ordner (z. B. 3. Semester › Mathe) im Dokumenten-Manager anlegen, umbenennen und löschen, Notizbücher mit 📂 verschieben; neue Notizbücher landen im geöffneten Ordner. Die Notizbuch-Dateien bleiben unverändert (Zuordnung in library.json)
|
- **Ordner für Notizbücher**: Beliebig verschachtelte Ordner (z. B. 3. Semester › Mathe) im Dokumenten-Manager anlegen, umbenennen und löschen, Notizbücher mit 📂 verschieben; neue Notizbücher landen im geöffneten Ordner. Die Notizbuch-Dateien bleiben unverändert (Zuordnung in library.json)
|
||||||
- **Einfügen per Finger**: Lange (½ s) mit dem Finger aufs Blatt drücken öffnet ein Menü „Einfügen“ – Screenshot, kopierter Text oder kopierte Objekte landen genau an dieser Stelle (wie in Rnote)
|
- **Einfügen per Finger**: Lange (½ s) mit dem Finger aufs Blatt drücken öffnet ein Menü „Einfügen“ – Screenshot, kopierter Text oder kopierte Objekte landen genau an dieser Stelle (wie in Rnote)
|
||||||
|
|||||||
@@ -1339,6 +1339,12 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
if let Ok(tablet_events) = mgr.pump() {
|
if let Ok(tablet_events) = mgr.pump() {
|
||||||
let scale = window.scale_factor() as f32;
|
let scale = window.scale_factor() as f32;
|
||||||
let now = start_time.elapsed().as_secs_f64();
|
let now = start_time.elapsed().as_secs_f64();
|
||||||
|
// Aufsetzen erst mit der Position desselben Frames verarbeiten
|
||||||
|
let tablet_events = ink_notes::platform::down_after_pose(
|
||||||
|
tablet_events,
|
||||||
|
|e| matches!(e, octotablet::events::Event::Tool { event: octotablet::events::ToolEvent::Down, .. }),
|
||||||
|
|e| matches!(e, octotablet::events::Event::Tool { event: octotablet::events::ToolEvent::Pose(_), .. }),
|
||||||
|
);
|
||||||
|
|
||||||
for t_event in tablet_events {
|
for t_event in tablet_events {
|
||||||
if let octotablet::events::Event::Tool { tool, event } = t_event {
|
if let octotablet::events::Event::Tool { tool, event } = t_event {
|
||||||
|
|||||||
@@ -58,10 +58,62 @@ pub fn display_backend_from_env() -> DisplayBackend {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Bringt die Ereignisse eines Tablet-Frames in eine brauchbare Reihenfolge: octotablet meldet
|
||||||
|
/// das Aufsetzen des Stifts (`Down`) vor der Position desselben Frames (`Pose`). Bis dahin
|
||||||
|
/// gälte noch die alte Position – kam der Stift schnell heran (Annähern und Aufsetzen im selben
|
||||||
|
/// Frame), läge sie ganz woanders: Ein Tippen auf einen Knopf ginge daneben, ein Strich begänne
|
||||||
|
/// mit einer Linie von der alten Stelle. Hier folgt jedes `Down` auf die nächste `Pose`, spätestens
|
||||||
|
/// vor dem nächsten anderen Ereignis.
|
||||||
|
pub fn down_after_pose<T>(
|
||||||
|
events: impl IntoIterator<Item = T>,
|
||||||
|
is_down: impl Fn(&T) -> bool,
|
||||||
|
is_pose: impl Fn(&T) -> bool,
|
||||||
|
) -> Vec<T> {
|
||||||
|
let mut ordered = Vec::new();
|
||||||
|
let mut deferred = None;
|
||||||
|
for event in events {
|
||||||
|
if is_down(&event) {
|
||||||
|
if let Some(down) = deferred.replace(event) {
|
||||||
|
ordered.push(down);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let pose = is_pose(&event);
|
||||||
|
if !pose {
|
||||||
|
ordered.extend(deferred.take());
|
||||||
|
}
|
||||||
|
ordered.push(event);
|
||||||
|
if pose {
|
||||||
|
ordered.extend(deferred.take());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ordered.extend(deferred);
|
||||||
|
ordered
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_down_follows_pose_of_its_frame() {
|
||||||
|
let order = |events: &str| {
|
||||||
|
down_after_pose(events.chars(), |c| *c == 'D', |c| *c == 'P')
|
||||||
|
.into_iter()
|
||||||
|
.collect::<String>()
|
||||||
|
};
|
||||||
|
// In, Down, Pose, Button, Frame -> Down erst mit der neuen Position
|
||||||
|
assert_eq!(order("IDPBF"), "IPDBF");
|
||||||
|
// Down ohne Pose im Frame: vor dem Frame-Ende
|
||||||
|
assert_eq!(order("DF"), "DF");
|
||||||
|
assert_eq!(order("DBF"), "DBF");
|
||||||
|
// Am Ende ohne weiteres Ereignis
|
||||||
|
assert_eq!(order("PD"), "PD");
|
||||||
|
// Andere Ereignisse bleiben unverändert
|
||||||
|
assert_eq!(order("PFPFUF"), "PFPFUF");
|
||||||
|
assert_eq!(order("IDPFPFUF"), "IPDFPFUF");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_choose_display_backend() {
|
fn test_choose_display_backend() {
|
||||||
// WSL mit X11-Display: X11 (Wayland unter WSLg bricht ab)
|
// WSL mit X11-Display: X11 (Wayland unter WSLg bricht ab)
|
||||||
|
|||||||
Reference in New Issue
Block a user