mirror of
https://github.com/immich-app/immich
synced 2026-08-15 13:03:57 +00:00
48 lines
1.7 KiB
Dart
48 lines
1.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
|
|
part 'aspect_ratios.freezed.dart';
|
|
|
|
@freezed
|
|
abstract class CropAspectRatio with _$CropAspectRatio {
|
|
const CropAspectRatio._();
|
|
|
|
const factory CropAspectRatio({int? numerator, int? denominator, String? customLabel, IconData? icon}) =
|
|
_CropAspectRatio;
|
|
|
|
static const free = CropAspectRatio(customLabel: "Free", icon: Icons.crop_free);
|
|
static const original = CropAspectRatio(customLabel: "Original", icon: Icons.crop_original);
|
|
|
|
String get label {
|
|
return customLabel ?? (numerator != null && denominator != null ? '$numerator:$denominator' : 'Free');
|
|
}
|
|
|
|
bool get hasFlippedVariant => numerator != denominator;
|
|
double? get ratio => (numerator != null && denominator != null) ? numerator! / denominator! : null;
|
|
|
|
CropAspectRatio get flipped {
|
|
return CropAspectRatio(numerator: denominator, denominator: numerator, customLabel: customLabel, icon: icon);
|
|
}
|
|
}
|
|
|
|
const aspectRatioFree = CropAspectRatio.free;
|
|
const aspectRatioOriginal = CropAspectRatio.original;
|
|
|
|
final aspectRatioPresets = [
|
|
CropAspectRatio.free,
|
|
CropAspectRatio.original,
|
|
|
|
const CropAspectRatio(numerator: 1, denominator: 1),
|
|
|
|
// lanscape
|
|
const CropAspectRatio(numerator: 16, denominator: 9),
|
|
const CropAspectRatio(numerator: 3, denominator: 2),
|
|
const CropAspectRatio(numerator: 7, denominator: 5),
|
|
const CropAspectRatio(numerator: 4, denominator: 3),
|
|
|
|
// portrait
|
|
const CropAspectRatio(numerator: 16, denominator: 9).flipped,
|
|
const CropAspectRatio(numerator: 3, denominator: 2).flipped,
|
|
const CropAspectRatio(numerator: 7, denominator: 5).flipped,
|
|
const CropAspectRatio(numerator: 4, denominator: 3).flipped,
|
|
];
|