calculateInteractiveButtonScaleRotate method
dynamic
calculateInteractiveButtonScaleRotate({
- required double editorScaleFactor,
- required Offset editorScaleOffset,
- required ProImageEditorConfigs configs,
- required ScaleUpdateDetails details,
- required Layer activeLayer,
- required Size editorSize,
- required bool configEnabledHitVibration,
- required ThemeLayerInteraction layerTheme,
Calculates scaling and rotation based on user interactions.
Implementation
calculateInteractiveButtonScaleRotate({
required double editorScaleFactor,
required Offset editorScaleOffset,
required ProImageEditorConfigs configs,
required ScaleUpdateDetails details,
required Layer activeLayer,
required Size editorSize,
required bool configEnabledHitVibration,
required ThemeLayerInteraction layerTheme,
}) {
Offset layerOffset = Offset(
activeLayer.offset.dx,
activeLayer.offset.dy,
);
Size activeSize = rotateScaleLayerSizeHelper!;
double realDx =
(details.focalPoint.dx - editorScaleOffset.dx) / editorScaleFactor;
double realDy =
(details.focalPoint.dy - editorScaleOffset.dy) / editorScaleFactor;
Offset touchPositionFromCenter = Offset(
realDx - editorSize.width / 2,
realDy - editorSize.height / 2,
) -
layerOffset;
touchPositionFromCenter = Offset(
touchPositionFromCenter.dx * (activeLayer.flipX ? -1 : 1),
touchPositionFromCenter.dy * (activeLayer.flipY ? -1 : 1),
);
double newDistance = touchPositionFromCenter.distance;
double margin = layerTheme.buttonRadius + layerTheme.strokeWidth * 2;
var realSize = Offset(
activeSize.width / 2 - margin,
activeSize.height / 2 - margin,
) /
rotateScaleLayerScaleHelper!;
activeLayer.scale = newDistance / realSize.distance;
_setMinMaxScaleFactor(configs, activeLayer);
activeLayer.rotation =
touchPositionFromCenter.direction - atan(1 / activeSize.aspectRatio);
if (editorScaleFactor > 1) return;
checkRotationLine(
activeLayer: activeLayer,
editorSize: editorSize,
configEnabledHitVibration: configEnabledHitVibration,
);
}