rotateSelection method

void rotateSelection({
  1. required bool clockwise,
  2. 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()},
    );
  }
}