implementAsBlocking static method

NSDraggingInfo implementAsBlocking({
  1. required NSWindow? draggingDestinationWindow(),
  2. required NSDragOperation draggingSourceOperationMask(),
  3. required CGPoint draggingLocation(),
  4. required CGPoint draggedImageLocation(),
  5. required NSImage? draggedImage(),
  6. required NSPasteboard draggingPasteboard(),
  7. required ObjCObjectBase? draggingSource(),
  8. required int draggingSequenceNumber(),
  9. required void slideDraggedImageTo_(
    1. CGPoint point
    ),
  10. required NSArray? namesOfPromisedFilesDroppedAtDestination_(
    1. NSURL dropDestination
    ),
  11. required NSDraggingFormation draggingFormation(),
  12. required void setDraggingFormation_(
    1. NSDraggingFormation
    ),
  13. required bool animatesToDestination(),
  14. required void setAnimatesToDestination_(
    1. bool restartFlag
    ),
  15. required int numberOfValidItemsForDrop(),
  16. required void setNumberOfValidItemsForDrop_(
    1. DartThreadID threadDeleted
    ),
  17. required void enumerateDraggingItemsWithOptions_forView_classes_searchOptions_usingBlock_(
    1. NSDraggingItemEnumerationOptions,
    2. NSView?,
    3. NSArray,
    4. NSDictionary,
    5. ObjCBlock<Void Function(NSDraggingItem, Long, Pointer<Bool>)>,
    ),
  18. required NSSpringLoadingHighlight springLoadingHighlight(),
  19. required void resetSpringLoading(),
  20. bool $keepIsolateAlive = true,
})

Builds an object that implements the NSDraggingInfo protocol. To implement multiple protocols, use addToBuilder or objc.ObjCProtocolBuilder directly. All methods that can be implemented as blocking listeners will be.

If $keepIsolateAlive is true, this protocol will keep this isolate alive until it is garbage collected by both Dart and ObjC.

Implementation

static NSDraggingInfo implementAsBlocking({
  required NSWindow? Function() draggingDestinationWindow,
  required NSDragOperation Function() draggingSourceOperationMask,
  required NSPoint Function() draggingLocation,
  required NSPoint Function() draggedImageLocation,
  required NSImage? Function() draggedImage,
  required NSPasteboard Function() draggingPasteboard,
  required objc.ObjCObjectBase? Function() draggingSource,
  required DartNSInteger Function() draggingSequenceNumber,
  required void Function(NSPoint) slideDraggedImageTo_,
  required objc.NSArray? Function(objc.NSURL)
  namesOfPromisedFilesDroppedAtDestination_,
  required NSDraggingFormation Function() draggingFormation,
  required void Function(NSDraggingFormation) setDraggingFormation_,
  required bool Function() animatesToDestination,
  required void Function(bool) setAnimatesToDestination_,
  required DartNSInteger Function() numberOfValidItemsForDrop,
  required void Function(DartNSInteger) setNumberOfValidItemsForDrop_,
  required void Function(
    NSDraggingItemEnumerationOptions,
    NSView?,
    objc.NSArray,
    objc.NSDictionary,
    objc.ObjCBlock<
      ffi.Void Function(NSDraggingItem, ffi.Long, ffi.Pointer<ffi.Bool>)
    >,
  )
  enumerateDraggingItemsWithOptions_forView_classes_searchOptions_usingBlock_,
  required NSSpringLoadingHighlight Function() springLoadingHighlight,
  required void Function() resetSpringLoading,
  bool $keepIsolateAlive = true,
}) {
  final builder = objc.ObjCProtocolBuilder(debugName: 'NSDraggingInfo');
  NSDraggingInfo.draggingDestinationWindow.implement(
    builder,
    draggingDestinationWindow,
  );
  NSDraggingInfo.draggingSourceOperationMask.implement(
    builder,
    draggingSourceOperationMask,
  );
  NSDraggingInfo.draggingLocation.implement(builder, draggingLocation);
  NSDraggingInfo.draggedImageLocation.implement(
    builder,
    draggedImageLocation,
  );
  NSDraggingInfo.draggedImage.implement(builder, draggedImage);
  NSDraggingInfo.draggingPasteboard.implement(builder, draggingPasteboard);
  NSDraggingInfo.draggingSource.implement(builder, draggingSource);
  NSDraggingInfo.draggingSequenceNumber.implement(
    builder,
    draggingSequenceNumber,
  );
  NSDraggingInfo.slideDraggedImageTo_.implementAsBlocking(
    builder,
    slideDraggedImageTo_,
  );
  NSDraggingInfo.namesOfPromisedFilesDroppedAtDestination_.implement(
    builder,
    namesOfPromisedFilesDroppedAtDestination_,
  );
  NSDraggingInfo.draggingFormation.implement(builder, draggingFormation);
  NSDraggingInfo.setDraggingFormation_.implementAsBlocking(
    builder,
    setDraggingFormation_,
  );
  NSDraggingInfo.animatesToDestination.implement(
    builder,
    animatesToDestination,
  );
  NSDraggingInfo.setAnimatesToDestination_.implementAsBlocking(
    builder,
    setAnimatesToDestination_,
  );
  NSDraggingInfo.numberOfValidItemsForDrop.implement(
    builder,
    numberOfValidItemsForDrop,
  );
  NSDraggingInfo.setNumberOfValidItemsForDrop_.implementAsBlocking(
    builder,
    setNumberOfValidItemsForDrop_,
  );
  NSDraggingInfo
      .enumerateDraggingItemsWithOptions_forView_classes_searchOptions_usingBlock_
      .implementAsBlocking(
        builder,
        enumerateDraggingItemsWithOptions_forView_classes_searchOptions_usingBlock_,
      );
  NSDraggingInfo.springLoadingHighlight.implement(
    builder,
    springLoadingHighlight,
  );
  NSDraggingInfo.resetSpringLoading.implementAsBlocking(
    builder,
    resetSpringLoading,
  );
  builder.addProtocol($protocol);
  return NSDraggingInfo.castFrom(
    builder.build(keepIsolateAlive: $keepIsolateAlive),
  );
}