Skip to content

refactor: „Zeichnung in Box einpassen“-Logik ist 4× kopiert #359

Open

Description

@S540d

Problem

Die Bounding-Box- und Skalierungslogik (Bounding Box der Nicht-Fill-Pfade, daraus scale, offsetX und offsetY) steht viermal fast identisch im Code:

  • components/DrawingCanvas.web.tsx (Redraw-Effekt)
  • components/DrawingCanvas.native.tsx (getScaledPaths)
  • services/ShareService.ts (der Kommentar dort nennt die Kopie selbst: „same logic as DrawingCanvas.web.tsx“)
  • services/ShareService.native.ts (computeScaleOffset)

Unterschiede gibt es nur beim Padding: 10 bei den Canvases, 40 beim Share-Export. Jede Korrektur an Padding, Bounds oder Randfällen muss deshalb viermal gemacht werden. Die Varianten unterscheiden sich schon jetzt leicht: Wenn alle Pfade Fills sind, landet die Web-Version über NaN im Fallback scale = 1.

Eng verwandt: Web- und Native-Canvas deklarieren dieselben Props mit denselben Defaults (height = 400, strokeColor = '#000000', strokeWidth = 3, tool = 'brush') sowie dieselbe Breitenregel windowWidth - 48 jeweils selbst. Ein neuer Prop in nur einer der beiden Dateien fällt deshalb nicht auf.

Vorschlag

  • computeScaleOffset(paths, width, height, padding) in components/DrawingCanvas.shared.ts (oder einem kleinen services/-Helper) anlegen und in allen vier Dateien verwenden. Randfälle (nur Fills, Breite oder Höhe 0) einheitlich mit { scale: 1, offsetX: 0, offsetY: 0 } behandeln.
  • Optional: DrawingCanvasProps, die Defaults und resolveCanvasWidth() ebenfalls nach DrawingCanvas.shared.ts verschieben.
  • Unit-Tests für den Helper schreiben (normal, nur Fills, Einzelpunkt, große Zeichnung).

Kontext

Gefunden im Simplify-Audit (#356). Dort ausgelassen, weil vier Dateien betroffen sind und das Verhalten an den Randfällen leicht abweicht.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions