Snap-to-grid for moving/resizing canvas objects, plus a per-sheet grid size

Sheet.gridSize (4-200px, default 24, configurable in Settings -> Blatt)
now doubles as both the visible dot-grid's spacing and the snap
increment while dragging to move any canvas object, or free/viewport-
resizing a chart/text/button/fixed-viewport table. An "Automatisch"
table's resize is left unsnapped on top of this -- it already
discretizes to row/col boundaries by construction.

Also fixes the visible grid not actually lining up with real snap
positions once zoomed: the dot pattern's background-size now scales
with zoom like the objects themselves already did, instead of staying a
fixed screen-pixel size regardless of zoom level.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
wkh
2026-09-09 23:33:39 +02:00
co-authored by Claude Sonnet 5
parent 5f75b9c298
commit d0500fcaf5
8 changed files with 101 additions and 14 deletions
+13 -2
View File
@@ -632,8 +632,8 @@ wichtigen Punkte:
- Textfeld → Name, Text, Schriftgröße, Fett/Kursiv, Ausrichtung, **Textfarbe**,
**Hintergrund**, Größe, Position.
- **Blatt**: Name, Zahlenformat, **Hintergrundfarbe**, **Schriftfarbe**,
**Raster ein-/ausblenden** (`↺` setzt eine Farbe auf den Theme-Wert zurück),
neues Blatt, Blatt löschen.
**Raster ein-/ausblenden**, **Rasterweite** (`↺` setzt eine Farbe auf den
Theme-Wert zurück), neues Blatt, Blatt löschen.
- **Ansicht**: Zoom-Regler (**pro Blatt** gespeichert).
- **Dokument**: Erscheinungsbild (Auto/Hell/Dunkel), Zahlenformat
(Ländereinstellung), CSV-Standard-Trennzeichen, „Auf Beispiel zurücksetzen".
@@ -646,6 +646,17 @@ das **Punkt-Raster** ein- oder ausblenden. Die Farben überschreiben die
Theme-Variablen `--bg` / `--text` nur für dieses Blatt; ohne Wert gilt das
Theme. Der Canvas-**Zoom** wird ebenfalls pro Blatt gemerkt.
Die **Rasterweite** (`Sheet.gridSize`, 4–200 px, Standard 24) ist ebenfalls
pro Blatt einstellbar (Einstellungen → Blatt) und dient **doppelt**: sie
bestimmt sowohl den Abstand des sichtbaren Punkt-Rasters (skaliert mit dem
Zoom, damit die Punkte immer exakt dort liegen, wo ein Objekt tatsächlich
einrastet) als auch die **Schrittweite beim Einrasten** (Snapping), wenn ein
Tabellen-, Diagramm-, Text- oder Button-Objekt per Maus **verschoben** oder
(bei „Feste Größe"/Diagramm/Text/Button) **frei skaliert** wird. Eine
„Automatisch"-Tabelle rastet beim Skalieren stattdessen bereits durch ihre
Zeilen-/Spaltengrenzen selbst ein und wird nicht zusätzlich pixelweise
gerastert.
Alle diese Einstellungen sind Teil des Dokuments (`DocumentState` /
`Sheet`) und werden damit in **localStorage gespeichert und in `.json`
exportiert** – Round-Trip verlustfrei, ungültige Werte werden beim Import