Seit 0.27 kopierte die Prüfung des Seitenverhältnis-Schlosses bei jedem
Bild alle ausgewählten Striche und suchte jeden davon quadratisch in der
Seite. Zusammen mit dem Kopieren beim Ziehen lastete das bei großen
Auswahlen den Prozessor aus, das Verschieben kam kaum noch hinterher.
- Schloss und Auswahlrahmen ohne Kopien bestimmen
- Striche beim Ziehen an ihrer Stelle aus dem Ausgangszustand umformen
statt die Auswahl zweimal zu kopieren; Suche über eine ID-Tabelle
- Stiftbewegungen der Auswahl nur einmal je Bild anwenden
- Endlose Fläche: Mausrad scrollt (Strg+Mausrad zoomt)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ein endloses Notizbuch hat eine einzige Seite von 10 × 10 m; Eingabe,
Treffertests, Undo und Speichern bleiben dadurch unverändert. Die
Ansicht zeigt bei 100 % einen DIN-A4-Rahmen in der Mitte, Bilder und
Textfelder richten sich nach A4. Wählbar beim Anlegen und im ☰-Menü,
umschalten nur bei einer Seite ohne PDF bzw. zurück, solange alles im
Startausschnitt liegt. Seiten-Knöpfe sind auf der endlosen Fläche aus.
Der Export enthält nur den beschriebenen Bereich mit 10 mm Rand, auf
das Musterraster gelegt; Bilder einer Auswahl rastern nur noch den
Ausschnitt statt der ganzen Seite. Formatversion 9.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ob ein Notizbuch Seite für Seite oder durchgehend angezeigt wird, steht
jetzt im Manifest (`layout`). Beim Anlegen ist „Feste Seiten“
vorgewählt; im ☰-Menü lässt sich die Anordnung des offenen Notizbuchs
umschalten. Notizbücher ohne Angabe behalten die frühere globale
Einstellung, ältere App-Versionen ignorieren das Feld.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Statt eines dünnen Strichs auf grauem Papier zeigt jeder Stift jetzt
einen schräg liegenden Stift, dessen Schaft und Mine in seiner Farbe
gefüllt sind. Eine helle Kontur hält dunkle Farben auf der dunklen
Leiste sichtbar; die Stärke steht weiter im Tooltip.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Im Tablet-Betrieb gibt es keine Umschalttaste. Beim Auswahlwerkzeug
steht unter den Stiftfarben jetzt ein Schloss: 🔒 skaliert gleichmäßig,
🔓 frei. Vorgabe ist gesperrt, sobald ein Bild ausgewählt ist, sonst
frei. Das Umschalten gilt für die aktuelle Auswahl; eine neue Auswahl
beginnt wieder mit der Vorgabe. Shift sperrt am Rechner zusätzlich.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Enthält die Auswahl ein Bild, skaliert der Eckgriff gleichmäßig, das
Seitenverhältnis bleibt erhalten. Mit gedrückter Umschalttaste gilt das
auch für Striche und Formen. Der Faktor ist die Projektion der
Zugposition auf die Diagonale der Auswahl.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Für die Community-Standards auf GitHub (Spiegel) und für Gitea:
- CODE_OF_CONDUCT.md: Contributor Covenant 2.1, Kontakt harald@pansi.eu
- CONTRIBUTING.md (Deutsch/Englisch): Gitea als Hauptrepository,
Prüfungen wie in der CI, Tests, Dateiformat, Übersetzungen
- SECURITY.md: unterstützt wird die neueste Version, Meldungen
vertraulich per E-Mail
- Issue-Vorlagen für Fehler und Ideen, Kontakt-Links (auf GitHub mit
Verweis auf Gitea), Pull-Request-Vorlage
- README: Abschnitt „Mitmachen“
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Beim schnellen Scrollen durch ein großes PDF hat der Render-Thread jede
vorbeigezogene Seite der Reihe nach gerendert; die gerade sichtbare
Seite musste warten.
- Gemeinsame Warteschlange (Mutex + Condvar) statt Kanal: Der
Render-Thread nimmt den wichtigsten wartenden Auftrag zuerst.
- Je Bild meldet der Event-Loop zwischen begin_frame und end_frame die
benötigten Seiten an (die aktuelle zuerst); end_frame verwirft
wartende Aufträge und fertige Ergebnisse für Seiten, die nicht mehr
gebraucht werden. Die vorab gerenderte nächste Seite bleibt erhalten.
Gemessen (Xvfb, Debug-Build, PDF mit 60 Seiten, 400 Mausrad-Schritte):
die letzte Seite erscheint nach 0,12–0,16 s statt 0,63–1,56 s.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Beim Scrollen durch große PDFs stockte die Anzeige bei jeder neu
gerenderten Seite: Der Haupt-Thread erzeugte die Mipmaps, bei 2560 px
etwa 100–200 ms, beim Hineinzoomen (5120 px) bis zu 1 s.
- Der PDF-Render-Thread liefert die fertigen Mipmap-Stufen mit; der
Haupt-Thread lädt sie nur noch hoch (TextureSource::ReadyMips).
- mip_chain halbiert mit einem 2×2-Mittelwert statt imageops::resize:
etwa 7-mal schneller (2560 px: ~15 ms statt ~100–200 ms).
- Belegter Grafikspeicher wird aus den tatsächlichen Stufen berechnet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- packaging/screenshots/notes.png: Notizen mit Textmarker, Handschrift
und Textfeldern
- packaging/screenshots/shapes.png: erkannte Formen (Achsenkreuz,
Dreieck, Kreis, Oktaeder, Sechseck, Ellipse)
- Metainfo: Screenshots mit englischer und deutscher Beschriftung
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- packaging/flatpak/eu.pansi.ink-notes.yml: Runtime freedesktop 26.08,
Rust aus rust-stable, Abhängigkeiten offline aus cargo-sources.json.
Rechte: Wayland/X11, GPU, Lesen von Bildern/Downloads/Schreibtisch,
Schreiben in den Dokumente-Ordner (kein Zugriff auf den ganzen
Home-Ordner).
- Im Flatpak sucht und installiert ink-notes keine Updates selbst
(Vorgabe von Flathub); der Update-Dialog verweist auf die
Software-Verwaltung.
- Export-Ordner aus user-dirs.dirs (z. B. ~/Dokumente) statt fest
~/Documents; nur dieser Ordner ist im Flatpak beschreibbar.
- Metainfo und Desktop-Datei auf Englisch mit deutscher Übersetzung,
Release-Einträge, unterstützte Eingabegeräte.
- Test: cargo-sources.json deckt Cargo.lock ab.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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 <noreply@anthropic.com>
Beim Halten am Strichende durfte sich die Position nur um 3 physische
Pixel ändern, sonst begann die Wartezeit neu. Ruhende Stifte zittern um
einige Pixel, auf HiDPI-Bildschirmen umso mehr; jetzt sind 6 logische
Pixel erlaubt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Alle Oberflächentexte und Fehlermeldungen stehen in t!("…"); der deutsche
Text ist zugleich der Schlüssel für die englische Fassung in
src/i18n/en.rs (430 Einträge). Platzhalter heißen {name}. ink-notes folgt
der Systemsprache (Deutsch bei de…, sonst Englisch); im ☰-Menü lässt sie
sich unter „Sprache / Language“ auf System, Deutsch oder English
festlegen, gespeichert in ui.json.
Ein Test prüft, dass jeder markierte Text übersetzt ist, keine
Übersetzung verwaist und die Platzhalter übereinstimmen.
Konsolenausgaben bleiben deutsch.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kreuzt eine eingerastete Gerade (Halten oder Formen-Werkzeug) den
vorigen Strich, und ist dieser ebenfalls eine Gerade (eingerastet oder
freihändig gerade gezogen), werden beide zum Achsenkreuz mit Pfeilspitzen
an allen vier Enden. Eine Gerade muss waagerecht, die andere senkrecht
sein (je höchstens 25° schief), und jeder Arm reicht mindestens ein
Fünftel seiner Achse über den Schnittpunkt hinaus. Beim Halten zeigt die
Vorschau schon das Achsenkreuz; Rückgängig stellt die erste Gerade wieder
her. Ein T oder L bleibt zwei Geraden.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GNOME blendet die Bildschirmtastatur erst ein, wenn ein bereits aktives
Textfeld zwp_text_input_v3.enable erneut meldet (wie GTK beim Antippen).
winit meldet enable nur einmal. Ein eigenes text-input-Objekt auf
derselben Wayland-Verbindung schickt das zweite enable, wenn ein Textfeld
den Fokus bekommt oder erneut angetippt wird.
- Zeichen der Bildschirmtastatur kommen als IME-Text ohne Vorschau; egui
0.27 fügte davon nur das erste ein. Sie werden jetzt als normaler Text
übergeben.
- Die Rücktaste löscht über delete_surrounding_text; dafür meldet das
eigene Objekt einen Platzhalter-Umgebungstext und übersetzt das Löschen
in Tastendrücke.
- Ein Fingertipp ging verloren, wenn GNOME beim Antippen den Mauszeiger
ausblendet (CursorLeft bei aufliegendem Finger); das Ereignis erreicht
egui in dem Fall nicht mehr.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Fenster meldet die App-Kennung eu.pansi.ink-notes (Wayland: app_id, X11:
WM_CLASS), passend zur .desktop-Datei (StartupWMClass): Dock und Taskleiste
zeigen das ink-notes-Symbol statt eines allgemeinen Symbols
- Unter X11 zusätzlich das eingebaute Symbol als Fenstersymbol (64 × 64)
- Fenstertitel ohne Werbezusatz
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Neues Werkzeug ↕: aufs Blatt tippen und ziehen; alles unterhalb der
Ansatzhöhe rutscht mit, auch der Inhalt der folgenden Seiten (bis vor die
nächste PDF-Seite)
- Was über ein Seitenende rutschen würde, beginnt auf der nächsten Seite
(10 mm Abstand), alles danach rutscht weiter; fehlende Seiten werden angehängt
- Nach oben wird nur leerer Platz geschlossen
- Vorschau beim Ziehen (Band mit Millimeterangabe); mit Maus, Stift und Finger
- Ein Schritt für Rückgängig/Wiederholen über alle beteiligten Seiten
- Nachbarseiten werden neu gezeichnet, wenn sich ihr Inhalt bei gleicher
Strichzahl ändert
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Formerkennung (Halten oder Formen-Werkzeug): Ein „+“ in einem Strich wird zum
Achsenkreuz – waagerechte und senkrechte Achse, Pfeilspitzen an allen vier
Enden; die Arme dürfen unterschiedlich lang sein
- Gespeichert als Koordinatensystem mit dem neuen optionalen Feld
negative_ends: ältere Versionen zeigen es als L-Koordinatensystem, kein neues
Dateiformat nötig
- Auch im PDF-, PNG- und SVG-Export mit vier Pfeilspitzen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
octotablet meldet das Aufsetzen des Stifts vor der Position desselben Frames.
Bis dahin galt die alte Position – nähert man den Stift und tippt sofort,
lag sie bei der vorherigen Stelle: Der Druck ging an den alten Ort, beim
Loslassen hatte sich der Zeiger „bewegt“, egui wertete das nicht als Klick
und zeigte nur den Tooltip. Erst das zweite Tippen traf. Auf dem Blatt
konnte ein Strich so mit einer Linie von der alten Stelle beginnen.
Jetzt wird das Aufsetzen erst nach der Position seines Frames verarbeitet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Im ☰-Menü unter Eingabe → „Tasten am Stift“: je Taste Radieren (Standard),
Auswählen, Textmarker, Stift oder Nichts; gilt, solange die Taste gedrückt ist
- Tasten werden beim ersten Drücken gelernt und in ui.json gemerkt; die gerade
gedrückte leuchtet im Menü grün
- Mit einer Werkzeug-Taste geschriebene Striche benutzen dieses Werkzeug, danach
ist wieder das gewählte Werkzeug aktiv
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 📂 auch bei Ordnern: verschiebt den Ordner samt Unterordnern und
Notizbüchern in einen anderen Ordner oder auf die oberste Ebene
- Nicht in sich selbst oder einen eigenen Unterordner; gibt es am Ziel schon
einen gleichnamigen Ordner, kommt eine Meldung statt einer Zusammenlegung
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Beliebig verschachtelte Ordner (z. B. 3. Semester › Mathe) im
Dokumenten-Manager: Pfadleiste zum Navigieren, Ordner anlegen, umbenennen,
löschen (Inhalt rückt eine Ebene nach oben) und Notizbücher mit 📂 verschieben
- Neue Notizbücher landen im angezeigten Ordner, importierte PDFs neben dem
geöffneten Notizbuch; der Manager öffnet im Ordner des aktuellen Notizbuchs
- Ordner sind logisch (library.json im Notizbuch-Basisordner), Notizbuch-
Dateien werden nie verschoben; fehlt die Datei, liegt alles oben
- Die ganze Titelfläche einer Zeile öffnet Notizbuch bzw. Ordner
- Ein ganz neues Standard-Notizbuch wird sofort gespeichert (erschien sonst
bis zur ersten Änderung als „beschädigt“)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Ein Finger, der eine halbe Sekunde still auf dem Blatt liegt, öffnet ein
Kontextmenü mit „Einfügen“ und „Bild aus Datei …“ (wie in Rnote)
- Bild, Text oder kopierte Objekte aus der Zwischenablage landen an der
gedrückten Stelle (Strg+V weiterhin in der Mitte)
- Meldung, wenn die Zwischenablage leer ist
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Jede Farbe der Werkzeugleiste (Stifte, Textmarker, Text) lässt sich anpassen:
gewählte Farbe erneut antippen, Vorgabe oder mit 🎨 frei wählen (Farbwähler
direkt im Popover). Die Leiste merkt sich die Farben (ui.json).
- Tintenfarben sind sRGB-Werte wie im Export: Gezeichnet wird ohne
sRGB-Umrechnung der GPU, Papier und Muster rechnet der Shader um. Schwarz ist
am Bildschirm jetzt schwarz statt grau, der Textmarker mischt wie im PDF.
- PDF-Export: Musterfarbe wird nach sRGB umgerechnet (war zu dunkel).
- Auswahl wird in die Farben der Stifte umgefärbt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- #15: Koordinatensystem ohne Kerbe am Ursprung (Achsen beginnen eine halbe
Linienbreite hinter dem Ursprung; im PDF ein Linienzug mit spitzer Ecke)
- #17: Jeder Strich deckt ein Pixel nur einmal (Stencil-Puffer), der
Textmarker wird innerhalb eines Strichs nicht dunkler. Im PDF-Export ist der
Textmarker jetzt halbtransparent statt deckend.
- #11: ➕ in der Werkzeugleiste fügt nach der aktuellen Seite eine Seite ein
- #12: Seite löschen im ☰-Menü mit Rückfrage, in der Sitzung wiederherstellbar
- #14: Seiten liegen lückenlos untereinander, eine dunkle Linie markiert die Grenze
- #19: Vier Stifte mit eigener Farbe und Stärke, die sich Änderungen merken
(ui.json); Blätterpfeile nur noch in der Einzelseitenansicht
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Karo, Linien und Punkte waren Dreiecke mit 0,15 mm breiten Linien –
schmaler als ein Bildschirmpixel. Je nach Lage auf dem Pixelraster
erschienen sie stärker, schwächer oder versetzt, die Abstände wirkten
unregelmäßig. Jetzt berechnet ein Fragment-Shader das Muster für jedes
Pixel aus der Seitenkoordinate: Linien und Punkte sind mindestens ein
Pixel breit, kantengeglättet und gleichmäßig; bei sehr kleinen Abständen
(weit herausgezoomt) blendet das Muster aus. Gemessen: Karo-Abstand
13,5 ± 0,04 Pixel bei gleicher Linienstärke.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Klickfläche zum Öffnen lag über der ganzen Zeile und wurde nach den
Knöpfen angelegt; egui gibt Klicks dem zuletzt angelegten Element, die
Knöpfe ✏ und 🗑 bekamen daher nie einen Klick. Jetzt öffnet nur der
Titelbereich das Notizbuch.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Zeichenfläche wird mit 4× Multisampling gezeichnet und in die
Fensterfläche aufgelöst; Strichkanten, Formen und Bildränder sind damit
kantengeglättet (ohne Unterstützung des Formats wie bisher). Runde
Strichenden und Punkte sind feiner unterteilt (10 statt 4 Schritte je
Viertelkreis, 20 statt 8 für Punkte) und wirken auch stark vergrößert rund.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Der fertige Strich entsteht jetzt aus den ungefilterten Eingabepunkten mit
einer symmetrischen 3-Punkt-Glättung (ohne Verzögerung); der 1€-Filter
dient nur der Anzeige während des Schreibens. Der Filter arbeitet mit der
Geschwindigkeit in der Ebene statt je Achse und reagiert schneller. Ecken
werden nur zwischen Abschnitten ab 0,6 mm getrennt. Ein „o“ mit 0,8 mm
Radius behielt bisher im Mittel 6,1 mm/10 statt 8 und bekam zwei Zacken,
jetzt 7,8 ohne Zacken.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
README, ARCHITECTURE.md und FILE_FORMAT.md beschreiben jetzt alle
Funktionen bis v0.11 (Text, Bilder, PDF-Import, Seitenformate, Lineal,
durchgehendes Scrollen, Musterfarben, Dateiformat-Version 8). Werbliche
Formulierungen durch überprüfbare Angaben ersetzt, auch in Paket-
beschreibung, Desktop-Datei, AppStream-Metadaten und Release-Notizen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Im ☰-Menü unter „Karos, Linien und Punkte“: hell (bisher), mittel,
kräftig, blau oder grün – passend zur gewählten Papierfarbe. Die Wahl
wird gespeichert und gilt auch für PDF-, PNG- und SVG-Export (Issue #6).
Punkte des Punktrasters sind am Bildschirm jetzt 0,4 mm groß wie im
Export (bisher 0,25 mm, beim Herauszoomen kaum sichtbar).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Seiten haben jetzt eine eigene Größe. Beim PDF-Import bleiben Hochformat-
Seiten DIN A4; Querformat-Seiten wie PowerPoint-Folien bekommen eine
Querformat-Seite (297 mm breit, Höhe nach Seitenverhältnis) ohne leeren
Streifen darunter (Issue #4). Eingefügte und angehängte Seiten übernehmen
das Format der aktuellen Seite.
Anzeige: Maßstab aus dem Rahmen aller Seiten, die durchgehende Ansicht
stapelt verschieden große Seiten zentriert untereinander. Export (PDF,
PNG, SVG) in der jeweiligen Seitengröße. Dateiformat-Version 8 (Größe in
Seite und Manifest; A4-Seiten speichern keine Größe).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
„Neue Seite einfügen“ (☰-Menü und Seitenauswahl) legt die leere Seite
direkt hinter der aktuellen an und wechselt dorthin, statt sie ans Ende
zu hängen – etwa zwischen zwei Folien eines PDFs (Issue #3).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bisher reagierte das Auswahlwerkzeug nur auf Maus und Finger (Issue #2).
Drücken, Ziehen und Loslassen der Auswahl sind jetzt gemeinsame Funktionen
für Maus, Finger und Stift.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Höchster Zoom 1000 % statt 500 % (Issue #1). Importierte PDF-Seiten werden
mit doppelter Auflösung nachgerendert, sobald die Standardauflösung
sichtbar vergrößert würde; bis dahin bleibt sie als Ersatz sichtbar.
Texte werden bis 8 Pixel je Einheit gerastert.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Textfelder per Tastatur (T): normale oder Code-Schrift, 8–36 pt, Farben
der Stiftpalette, Umbruch am rechten Feldrand. Textfelder sind Objekte
mit vier Ecken wie Bilder (verschieben, drehen, skalieren) und werden als
Textur gerastert; im PDF-Export echter, durchsuchbarer Text mit
eingebetteter Schrift. Kopierter Text wird mit Strg+V zum Textfeld.
Dateiformat-Version 7.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Seiten hängen untereinander (8 mm Abstand) und werden mit Mausrad, Finger
oder Touchpad fließend gescrollt; Strg+Mausrad zoomt. Sichtbare Nachbarseiten
werden bei Bedarf geladen und mit eigener Kamera gezeichnet. Die Seite in der
Fenstermitte wird nach dem Scrollen zur aktuellen; Zeichnen, Radieren und
Auswählen auf einer Nachbarseite wechseln zuerst dorthin. Wer im unteren
Fünftel der letzten Seite schreibt, bekommt automatisch eine neue Seite.
Scrollen bleibt auf das Notizbuch begrenzt. Abschaltbar im ☰-Menü (Ansicht).
Nie gespeicherte, angehängte Seiten laden jetzt als leere Seite statt als
schreibgeschützte Fehlerseite.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Lineal ein-/ausblenden über die Werkzeugleiste oder Taste L
(26 cm, mm-/cm-Skala an beiden Kanten, Winkelanzeige)
- Fläche ziehen verschiebt, Griff ⟳ dreht; 15°-Schritte rasten ein
- Striche, die bis 6 mm neben einer Längskante beginnen, folgen bis zum
Abheben exakt der Kante (Stift, Textmarker, Formen); die Tinte liegt
um die halbe Strichbreite neben dem Lineal
- Lineal bleibt beim Blättern an seiner Stelle; nur seine Fläche und
der Griff nehmen Eingaben an, an den Kanten wird gezeichnet
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Radierer-Modus „✂ Teilstrich“: entfernt nur den überstrichenen Teil, der Rest
bleibt in Stücken; ein Radierzug ist ein Undo-Schritt, Formen werden ganz radiert
- ☰ → „Seite als PNG / PNG transparent / SVG“ nach ~/Documents (über den
PDF-Export gerendert: Bilder und importierte PDF-Seiten inklusive)
- Strg+C legt die Auswahl zusätzlich als Bild in die Systemzwischenablage
(für Chat, Mail, Office); in ink-notes fügt Strg+V weiter die Objekte ein
- Seitentitel in der Seitenübersicht, Ansicht „Inhalt“ als Inhaltsverzeichnis,
Lesezeichen-Ecke an benannten Seiten, Titel im Fenstertitel und als
PDF-Lesezeichen (Umlaute als UTF-16)
- Dateiformat-Version 6 (Seitentitel)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mit rust-version 1.92 meldet Clippy is_none_or statt map_or(true, …) und
as_chunks statt chunks_exact mit fester Größe; die CI bricht bei Warnungen ab.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ☰ → „PDF importieren …“ oder PDF ins Fenster ziehen: neues Notizbuch
mit einer Seite je PDF-Seite, die Originalseite als Hintergrund
- Querformat-Folien liegen oben auf dem A4-Blatt, darunter ist Platz für
Notizen; gedrehte Seiten (/Rotate) erscheinen wie im PDF-Betrachter
- Anzeige mit hayro (reines Rust) im Hintergrund-Thread, nächste Seite
wird vorab gerendert
- PDF-Export legt die Originalseiten als Vektorgrafik (Form-XObject via
lopdf) unter Bilder und Tinte; nicht übernehmbare Seiten (z. B.
verschlüsselt) werden als Bild mit 200 dpi eingebettet
- Dateiformat-Version 5 (pdf_background an der Seite)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Bilder per ☰ → „Bild einfügen …“ (Strg+I, eingebaute Dateiauswahl),
Strg+V aus der Systemzwischenablage oder durch Ziehen ins Fenster
- Bilder sind Objekte mit vier Ecken: verschieben, drehen, skalieren,
kopieren, löschen und Undo über die bestehende Auswahl
- Gespeichert einmalig unter ihrer Prüfsumme in <Notizbuch>/assets
(JPEG unverändert, sonst PNG); Dateiformat-Version 4
- GPU-Darstellung mit Mipmaps unter der Tinte; Radierer und Umfärben
lassen Bilder unberührt, Tinte auf Bildern hat beim Antippen Vorrang
- PDF-Export: JPEG verlustfrei eingebettet, sonst bis 300 dpi
- Strg+V: die jüngste Kopie gewinnt (Systembild oder interne Objekte);
Bilder werden beim Einfügen in ein anderes Notizbuch mitkopiert
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Radierer: Modus „Nur Textmarker“ (gilt auch für Stiftrückseite und Seitentaste)
- Striche speichern jetzt ihr Werkzeug; bisher wurde jeder Strich als "pen"
gespeichert. Ältere Textmarker werden an der Halbtransparenz erkannt.
- Papierfarben Weiß/Creme/Dunkelgrau/Schwarz (nur Anzeige); auf dunklem Papier
hellt der Shader dunkle Tinte auf (HSL-Helligkeit gespiegelt)
- Einstellbare Druckkurve (weich/hart, Mindestdruck) mit Vorschau
- Einstellungen in ui.json; ☰-Menü scrollt bei kleinen Fenstern
- Test prüft den WGSL-Shader mit naga
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ellipse
- Achsen aus der Hauptkomponentenanalyse des gleichmäßig abgetasteten Strichs,
Halbachsen aus der Ausdehnung (2.–98. Perzentil); fast runde Formen
(Achsenverhältnis ≥ 0,85) bleiben Kreise; leicht schiefe werden gerade
- konkurriert im Formvergleich mit Kreis, Rechteck, Dreieck, Raute, Vieleck
Pfeil / Doppelpfeil
- in einem Zug gezeichnet: langer Schaft, an einem oder beiden Enden
Widerhaken auf beiden Seiten (10°–80° schräg nach hinten); T-Enden und
Zickzack sind keine Pfeile
- Schaft wird über fast gerade weiterlaufende Punkte verlängert (die
Vereinfachung teilt ihn sonst kurz vor der Spitze)
- Spitzen über die gemeinsame arrow_head-Geometrie, Schaft endet an der Basis
Außerdem: Drehen/Skalieren/Verschieben, PDF-Export, Namen für die
Einrast-Meldung; Dateiformat-Version 3, damit ältere App-Versionen das
Notizbuch sauber ablehnen statt Seiten mit neuen Formen für beschädigt zu
halten.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Achsenlinien liefen in voller Strichbreite bis zur Spitze und überdeckten
sie; zudem war die Spitze klein und breit (~67° Öffnung).
- Gemeinsame Pfeilspitzen-Geometrie (arrow_head) für Bildschirm und PDF:
~4 mm lang (dicke Linien länger, höchstens 1/5 der Achse), ~40° Öffnung
- Achsen enden an der Basis der Spitze
- PDF-Export nutzt dieselben Maße (vorher eigene, abweichende Werte)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Unter WSLg trennt der Wayland-Compositor die Verbindung, kurz nachdem die App
ein Bild über Vulkan übergibt ("Connection reset by peer", ExitFailure). Über
X11 (Xwayland) läuft die App stabil – deshalb funktionierte sie als root, wo
der Wayland-Socket nicht gefunden wird und winit auf X11 ausweicht.
- WSL-Erkennung (WSL_DISTRO_NAME/WSL_INTEROP, /proc/sys/kernel/osrelease)
- Unter WSL mit gesetztem DISPLAY wird die Ereignisschleife mit X11 erzeugt
- INK_NOTES_DISPLAY=x11|wayland übersteuert die Wahl
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ohne Zugriff auf die Grafikkarte (z. B. Benutzer nicht in der Gruppe render)
lieferte EGL/Zink zunächst Darstellungsmodi, später eine leere Liste; die
nächste Neueinrichtung der Surface ließ wgpu abstürzen ("Requested present
mode Mailbox is not in the list of supported present modes: []").
- Adapter der Reihe nach prüfen (GPU, dann Software-Renderer); nur Adapter
mit Formaten und Darstellungsmodi für das Fenster werden genommen
- Darstellungsmodus: Mailbox, sonst Fifo, sonst der erste angebotene
- Bei Größenänderung/verlorener Surface Fähigkeiten neu abfragen statt blind
neu einzurichten; ohne Modi wird nicht eingerichtet (einmalige Meldung)
- Ohne nutzbaren Adapter verständliche Meldung (Gruppe render, /dev/dri,
Software-Renderer, WGPU_BACKEND) statt Panic; WGPU_BACKEND wird beachtet
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Eine erkannte Form ersetzt den Strich nur noch, wenn sie ihn gut beschreibt
(mittlere Abweichung ≤ 4 % der Strichdiagonale, gemessen gegen den
Linienzug der Form). Vorher wurde fast jeder geschlossene Strich umgewandelt
(Herz → Kreis, Stern/Spirale → Oktaeder, Wolke → Dreieck).
- Vielecke verlangen echte Ecken: Die Richtungsänderung muss sich an den Ecken
konzentrieren; glatte Ovale werden so nicht mehr zu Sechs-/Achtecken.
- Vielecke konkurrieren mit Kreis, Dreieck, Rechteck und Raute (gewichtet:
Rechteck vor Raute/Vieleck, Vieleck vor Kreis); überzählige Punkte der
Vereinfachung (Strichende vor dem Start, Punkte auf einer Geraden) entfallen.
- Tests: Freiformen bleiben unverändert, Fünf-/Sechs-/Achtecke, Ovale;
jeder Einzeldetektor-Test prüft zusätzlich die vollständige Erkennung.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Kreis, Dreieck, Rechteck und Raute konkurrieren; gewählt wird die Form,
deren Kontur am besten zu den Punkten passt (RMS-Abweichung). Vorher gewann
der Kreis immer, weil auch Quadrate nur ~10 % Radiusschwankung haben, und
die Dreieckserkennung griff gestreckte Rechtecke ab.
- Rechteckerkennung über das kleinste umschließende Rechteck (alle Drehwinkel,
Ausreißer-robust), Kanten auf den Median der Punkte; verlangt gezeichnete
Ecken und enge Passung, damit Ovale und Kritzeleien keine Rechtecke werden.
Die alte Variante schnitt bei kleinen/zittrigen Strichen die Ecken ab.
- extract_k_corners wählte die geradesten statt der markantesten Punkte
(Sortierung verkehrt herum); betrifft auch Dreieck und Raute.
- Rechteck wird der Raute vorgezogen, wenn es fast so gut passt.
- Oktaeder nur noch, wenn keine geschlossene Form gut passt.
- Tests mit nachgebildeten Freihandstrichen: Rechtecke in vielen Größen,
Seitenverhältnissen und Drehungen, mit runden Ecken, schiefen Kanten und
Überstrich; Kreise, Dreiecke; Ellipsen und Freiformen nie als Rechteck.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Behebt Datenverlust nach Neustart auf einer späteren Seite (v0.2.3 – v0.3.2); Seitenauswahl mit Vorschaubildern.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Kacheln zeigen eine verkleinerte A4-Vorschau jeder Seite (Striche als
Linien, Textmarker halbtransparent, volle Seiten auf ~1500 Punkte
ausgedünnt), Seitenzahl darunter, aktuelle Seite blau umrandet
- Noch nicht geladene Seiten werden bei offener Seitenauswahl nachgeladen
(UiAction::LoadAllPages)
- Kachelgröße über PAGE_TILE (vorher feste Werte)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Beim Start wurde nur die erste Seite geladen. War zuletzt eine spätere Seite
offen, war sie nach dem Neustart ein leerer, ungeladener Platzhalter: Das
Blatt erschien leer, und Zeichnen/Radieren/Hintergrund wechseln speicherte
den Platzhalter und überschrieb den bisherigen Inhalt der Seite.
- load_notebook lädt zusätzlich die aktuelle Seite
- Autosave schreibt nie ungeladene Platzhalter (Schutz ging beim Merge des
Storage-Branches verloren)
- Regressionstests für beide Fälle
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Dialoge (Notizbücher, Updates, Warnfenster) mit gemeinsamem deckendem
Rahmen, ohne doppelte Titelleiste, zentriert neben der Werkzeugleiste;
Schließen-Knopf 36 px, größere Knöpfe, Eingabefelder und Schieberegler
- Seitenauswahl als Popover neben dem Seitenknopf mit Kachelraster
(56 × 48 px) und „Neue Seite anhängen“
- Immer nur ein Dialog oder Popover gleichzeitig offen (close_overlays);
Seitenauswahl schließt bei Tippen daneben
- Stift-/Marker-Popover: Farbtupfer 30 px, Stärke-Vorschau 40 px hoch,
breiterer Schieberegler, deckender Rahmen
- Auswahl-Überlagerung und Griff-Trefferprüfung rechnen mit der
Display-Skalierung (lag bei Skalierung ≠ 1 neben den Strichen);
Trefferradius der Griffe 18 Punkte für Finger
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Regression aus v0.3.0: Die UI-Trefferprüfung (egui layer_id_at) wertete eine
bildschirmfüllende egui-Ebene der Ordnung Background als UI. Dadurch galt jeder
Punkt auf dem Blatt als Oberfläche, und Maus, Stift und Touch zeichneten nicht.
Background-Ebenen zählen jetzt nicht mehr als UI; die Prüfung liegt in ui.rs
und ist durch einen Test abgedeckt (Blattpunkte, Leiste, Skalierung 1 und 2).
Außerdem:
- 25 ungültige vormultiplizierte Farben (RGB > Alpha) auf unmultipliziert
umgestellt: Knöpfe in Dialogen waren weiße Kästen mit unlesbarer Schrift,
die Auswahlfüllung war deckend statt durchscheinend
- Zeichen ohne Glyphe in den egui-Schriften ersetzt (✓ ✕ ● ↑ ↓, Variantenzeichen
U+FE0F hinter ⚠)
- Tests finden künftig ungültige Farben und nicht darstellbare Zeichen in
ui.rs, selection.rs und main.rs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Werkzeugleiste
- Schmale senkrechte Leiste statt ~30 Elemente in einer Zeile; seitlich oben
angedockt (links, im ☰-Menü auf rechts umschaltbar, gespeichert in
~/.config/ink-notes/ui.json)
- Symbol-Knöpfe 40 px, auf niedrigen Fenstern schrittweise bis 28 px; Größe
richtet sich nach dem höchsten Fall, damit Knöpfe beim Werkzeugwechsel
nicht springen (fester Platz für die Farbpalette)
- Selten genutztes (PDF, Hintergrund, Zoom, Finger-Zeichnen, Leistenseite,
Updates, Speicherstatus) im ☰-Menü; Popover öffnen zur Blattseite hin
- Blatt wird im freien Bereich neben der Leiste zentriert
- Symbole ohne Glyphe in den egui-Schriften (🖍 ⌫ ⬚ ◄ ► ● ✕ ▾) ersetzt bzw.
selbst gezeichnet; Hover-Farbe korrigiert (falsch vormultipliziert)
Eingabe
- UI-Trefferprüfung in logischen Punkten (vorher physische Pixel gegen
egui-Koordinaten: bei Skalierung ≠ 1 trafen Stift und Touch die Leiste nicht)
und über egui::Context::layer_id_at für alle egui-Bereiche
- Stift-Ereignisse über egui_input_mut() statt ctx.input_mut() (wurden vom
nächsten Frame verworfen); Stiftbewegungen für Hover/Ziehen weitergereicht,
Stift bleibt vom Aufsetzen bis Abheben bei der UI
- Berührungen, die auf der UI beginnen, bleiben bis zum Abheben bei egui
- egui-Neuzeichenwünsche (repaint_delay) werden beachtet
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>