Skip to content

fix: Web-Canvas mit ganzzahligen Pixelmaßen – Füllungen verschwanden bei gebrochener Breite - #368

Merged
S540d merged 2 commits into
testingfrom
fix/web-canvas-fractional-size
Oct 22, 2026
Merged

S540d merged 2 commits into
testingfrom
fix/web-canvas-fractional-size

Conversation

@S540d

@S540d S540d commented Oct 22, 2026

Copy link
Copy Markdown
Owner

Pull Request

Beschreibung

Auf Web verschwanden Füllungen, wenn die Breite oder Höhe der Zeichenfläche nicht ganzzahlig war.

Ursache: Das canvas-Attribut schneidet Nachkommastellen ab. getImageData und floodFillPixels rechneten aber mit der übergebenen, gebrochenen Breite. Dadurch stimmte die Zeilenadressierung im Pixelpuffer nicht mehr, der Flood-Fill lief ins Leere und die Füllung fehlte ohne Fehlermeldung. Der Native-Code umgeht dasselbe Problem schon mit Math.floor in computeNativeFillLayers.

Wann das auftrat:

  • Ergebnis-Screen: ResultPhase.imageSize = screenWidth * 0.44, z. B. 184,8 px bei 420 px Breite
  • Zeichenphase: Dort ist die Breite windowWidth - 48. Auf Geräten mit gebrochener Fensterbreite (z. B. 411,43 px) sind Füllungen auf der Web-Version betroffen.

Fix: width und height werden am Anfang von DrawingCanvas.web.tsx abgerundet. Alles Abgeleitete (Canvas-Attribute, Pixelzugriff, Skalierung, Cache-Schlüssel) verwendet dieselben ganzzahligen Maße. Der sichtbare Unterschied ist weniger als 1 px.

Art der Änderung

  • Bugfix (non-breaking change)
  • Neue Funktion
  • Breaking Change
  • Dokumentation Update

Cross-Platform Kompatibilität

Betrifft dieser PR plattformspezifischen Code? Ja, nur DrawingCanvas.web.tsx. Native ist unverändert und hatte das Problem schon behoben.

Testing Checklist

  • Keine TypeScript Errors, keine ESLint Warnings, Prettier sauber
  • npm run test:ci: 460/460 grün
  • Neuer Regressionstest (gebrochene Maße → ganzzahliges Canvas und getImageData(0, 0, 184, 100)); schlägt gegen den alten Code fehl
  • Im echten Browser bei 420 px Viewport (vorher keine Füllungen im Ergebnis-Screen) geprüft: Füllungen erscheinen jetzt korrekt

Hinweis zur Reihenfolge

Der Komponenten-Code lässt sich mit #367 (Replay-Cache) konfliktfrei zusammenführen. Nur components/__tests__/DrawingCanvas.web.test.tsx kollidiert, weil beide PRs am Dateiende neue Tests ergänzen. Ich löse das nach dem Merge des jeweils ersten PRs auf.


Generated by Claude Code

…ebrochener Breite

Das canvas-Attribut schneidet Nachkommastellen ab, getImageData und
floodFillPixels rechneten aber mit der übergebenen (gebrochenen) Breite.
Bei z. B. screenWidth * 0.44 = 184,8 stimmte die Zeilenadressierung nicht
mehr und Fills verschwanden still (auf dem Ergebnis-Screen und auf Geräten
mit gebrochener Fensterbreite auch in der Zeichenphase).

width/height werden jetzt am Komponentenanfang abgerundet. Regressionstest
prüft ganzzahlige Canvas-Maße und getImageData-Argumente; im Browser bei
420 px Viewport verifiziert (vorher keine Fills im Ergebnis, jetzt sichtbar).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

🔀 Mergeability-Report

✅ Konfliktfrei mergebar (unstable).
✅ Ziel-Branch testing ist policy-konform.

CI-Checks: ✅ keine fehlgeschlagenen Checks

⏳ 🔑 Keystore & Credential Scan
⏳ 🔍 Code Quality & Linting
⏳ 🔐 Docs Privacy Check
⏳ ⚙️ Workflow Linting / actionlint
⏳ 🔧 Platform Compatibility
⏳ 🔒 Security Audit
⏳ mergeability / mergeability
⏳ Analyze (actions)
⏳ Analyze (javascript-typescript)

Merge-Checkliste

  • CI-Checks grün
  • Keine Merge-Konflikte
  • Ziel-Branch korrekt
  • (Optional) tiefes KI-Review via /review aus Claude Code (Pro-Abo, ohne API-Kosten)

Kostenlos generiert von reusable-mergeability.yml · keine API-Kosten · review-gate: success

Konflikt nur in components/__tests__/DrawingCanvas.web.test.tsx (beide PRs
hängen neue describe-Blöcke am Dateiende an): beide Testgruppen behalten.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017fxbsNALrmwMj7LGMDPLw2
@S540d
S540d merged commit 021c0c0 into testing Oct 22, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants