- crop_to_image(): Non-destructive crop returning DynamicImage - extract_meta(): Extract BasicMeta and EXIF metadata - Completes migration of RasterDocument features from app/ to domain/ Refs: Migration Step 1.2
5.4 KiB
5.4 KiB
Feature-Vergleich: app/document vs domain/document/types
Ziel: Identifizieren welche Features von src/app/document/ nach src/domain/document/types/ portiert werden müssen.
RasterDocument
Struct-Felder
| Feld | app/ | domain/ | Status |
|---|---|---|---|
document: DynamicImage |
✅ | ✅ | OK |
native_width: u32 |
✅ | ✅ | OK |
native_height: u32 |
✅ | ✅ | OK |
transform: TransformState |
✅ | ✅ | OK |
handle: ImageHandle |
✅ pub | ✅ private | ⚠️ domain: public machen oder getter |
fine_rotation_angle: f32 |
❌ | ✅ | ℹ️ Extra feature in domain |
interpolation_quality |
❌ | ✅ | ℹ️ Extra feature in domain |
Entscheidung: Domain-Version hat mehr Features → Domain behalten, handle public machen
Methoden-Vergleich
| Methode | app/ | domain/ | Aktion |
|---|---|---|---|
| Core Operations | |||
open() |
✅ | ✅ | ✅ OK |
render() |
✅ | ✅ | ✅ OK |
save() |
✅ | ✅ | ✅ OK |
| Transformations (Trait) | |||
rotate() |
✅ | ✅ | ✅ OK |
flip() |
✅ | ✅ | ✅ OK |
transform_state() |
✅ | ✅ | ✅ OK |
| Renderable (Trait) | |||
info() |
✅ | ✅ | ✅ OK |
| Dimensions | |||
dimensions() |
✅ | ✅ | ✅ OK (beide haben es!) |
native_dimensions() |
❌ | ✅ | ℹ️ Extra in domain |
| Crop | |||
crop() |
✅ | ✅ | ✅ OK (beide haben es!) |
crop_to_image() |
✅ | ❌ | 📋 Portieren nach domain/ |
| Handle/Image Access | |||
handle (field pub) |
✅ | ❌ | 📋 Public machen oder getter |
handle() (getter) |
❌ | ✅ | ✅ OK (domain hat getter) |
image() |
❌ | ✅ | ℹ️ Extra in domain |
get_rendered_image() |
❌ | ✅ | ℹ️ Extra in domain |
| Metadata | |||
extract_meta() |
✅ | ❌ | 📋 Portieren nach domain/ |
| Internal Helpers | |||
refresh_handle() |
✅ private | ❌ | ℹ️ Evtl. bereits integriert |
apply_rotation() |
❌ | ✅ | ℹ️ Extra in domain |
apply_flip() |
❌ | ✅ | ℹ️ Extra in domain |
create_image_handle_from_image() |
❌ | ✅ | ℹ️ Extra in domain |
| Extra Features (domain) | |||
rotate_fine() |
❌ | ✅ | ℹ️ Feature in domain |
reset_fine_rotation() |
❌ | ✅ | ℹ️ Feature in domain |
set_interpolation_quality() |
❌ | ✅ | ℹ️ Feature in domain |
resize_to_format() |
❌ | ✅ | ℹ️ Feature in domain |
Zusammenfassung RasterDocument
Domain-Version ist fortgeschrittener ✅
- Mehr Features (fine rotation, interpolation quality, resize)
- Bessere API (getter statt public fields)
- Saubere Helper-Funktionen
Aus app/ portieren:
- ✅
crop_to_image()- Nicht-destruktives Crop - ✅
extract_meta()- Metadaten-Extraktion - ✅
handlepublic machen ODER getterhandle()nutzen (bereits vorhanden!)
Entscheidung: Domain-Version als Basis, nur 2 Methoden fehlen
VectorDocument
Methoden-Vergleich
| Methode | app/ | domain/ | Aktion |
|---|---|---|---|
open() |
✅ | ✅ | ✅ OK |
render() |
✅ | ✅ | ✅ OK |
dimensions() |
✅ | ❌ | 📋 Portieren |
handle (pub field) |
✅ | ❌ private | 📋 Public machen oder getter |
extract_meta() |
✅ | ❌ | 📋 Portieren |
crop() |
❌ | ❌ | 📋 Neu implementieren (Design-Entscheidung) |
Aus app/ portieren:
dimensions()extract_meta()handle()getter oder public- NEU:
crop()implementieren (render-based)
PortableDocument
Methoden-Vergleich
| Methode | app/ | domain/ | Aktion |
|---|---|---|---|
open() |
✅ | ✅ | ✅ OK |
render() |
✅ | ✅ | ✅ OK |
dimensions() |
✅ | ❌ | 📋 Portieren |
handle (pub field) |
✅ | ❌ private | 📋 Public machen oder getter |
extract_meta() |
✅ | ❌ | 📋 Portieren |
crop() |
❌ | ❌ | 📋 Neu implementieren (Design-Entscheidung) |
| Thumbnails | ✅ | ✅ | ℹ️ Prüfen ob identisch |
Aus app/ portieren:
dimensions()extract_meta()handle()getter oder public- NEU:
crop()implementieren (render-based)
Action Items für Schritt 1.2-1.4
Schritt 1.2: RasterDocument (60 Min)
crop()- Bereits vorhanden! ✅dimensions()- Bereits vorhanden! ✅crop_to_image()hinzufügen ✅extract_meta()hinzufügen ✅ (oder in core/metadata.rs)handle()getter - Bereits vorhanden! ✅
Schritt 1.3: VectorDocument (45 Min)
dimensions()implementierenhandle()getter hinzufügenextract_meta()implementierencrop()implementieren (render-based, neu!)
Schritt 1.4: PortableDocument (45 Min)
dimensions()implementierenhandle()getter hinzufügenextract_meta()implementierencrop()implementieren (render-based, neu!)
Überraschende Erkenntnisse
- Domain hat bereits crop() für Raster! ✅
- Domain hat bereits dimensions()! ✅
- Domain hat bereits handle() getter! ✅
- Domain hat MEHR Features (fine rotation, interpolation) ✅
→ Domain-Implementierung ist besser! Nur 2-3 Methoden fehlen pro Type.
Status: Vergleich abgeschlossen
Nächster Schritt: 1.2 - RasterDocument ergänzen