recalculateLayerPosition method
void
recalculateLayerPosition({
- required List<
EditorStateHistory> history, - required ResizeEvent resizeEvent,
Recalculates the position and scale of layers based on the temporary decoded image size.
Implementation
void recalculateLayerPosition({
required List<EditorStateHistory> history,
required ResizeEvent resizeEvent,
}) {
Size getCropImageSize({
required TransformConfigs transformConfigs,
required Size drawSize,
}) {
double ratio = transformConfigs.originalSize.isInfinite
? decodedImageSize.aspectRatio
: transformConfigs.cropRect.size.aspectRatio;
double convertedRatio =
transformConfigs.is90DegRotated ? 1 / ratio : ratio;
if (convertedRatio < drawSize.aspectRatio) {
return Size(drawSize.height * convertedRatio, drawSize.height);
} else {
return Size(drawSize.width, drawSize.width / convertedRatio);
}
}
for (var el in history) {
Size oldSize = getCropImageSize(
transformConfigs: el.transformConfigs,
drawSize: resizeEvent.oldContentSize,
);
Size newSize = getCropImageSize(
transformConfigs: el.transformConfigs,
drawSize: resizeEvent.newContentSize,
);
double scaleFactor = min(
oldSize.width / newSize.width,
oldSize.height / newSize.height,
);
if (scaleFactor != 0) {
for (var layer in el.layers) {
layer.scale /= scaleFactor;
layer.offset = Offset(
layer.offset.dx / scaleFactor,
layer.offset.dy / scaleFactor,
);
}
}
}
}