rotateSelection method
void
rotateSelection(
{ - required bool clockwise,
- int? timestampMs,
})
Implementation
void rotateSelection({required bool clockwise, int? timestampMs}) {
var affected = 0;
Transform2D? delta;
final movedIds = <NodeId>[];
_core.write<void>((writer) {
final nodes = selectedTransformableNodesInSceneOrder(
writer.scene,
writer.selectedNodeIds,
).where((node) => !node.isLocked).toList(growable: false);
if (nodes.isEmpty) return;
final center = centerWorldForNodes(nodes);
final pivot = Transform2D.translation(center);
final unpivot = Transform2D.translation(Offset(-center.dx, -center.dy));
final rotation = Transform2D.rotationDeg(clockwise ? 90 : -90);
delta = pivot.multiply(rotation).multiply(unpivot);
affected = writer.writeSelectionTransform(delta!);
if (affected > 0) {
movedIds.addAll(nodes.map((n) => n.id));
}
});
if (affected > 0 && delta != null) {
_events.emitAction(
ActionType.transform,
movedIds,
_resolveTimestampMs(timestampMs),
payload: <String, Object?>{'delta': delta!.toJsonMap()},
);
}
}