ReceiveContentListener



A set of callbacks for contentReceiver modifier to get information about certain Drag-and-Drop state changes, as well as receiving the payload carrying TransferableContent.

contentReceiver's drop target behaves a little different compared to the regular dragAndDropTarget modifier. When two contentReceiver modifiers are nested on the composition tree, drop area of the parent node encapsulates drop area of the child node, meaning that they wouldn't be mutually exclusive like the regular dragAndDropTarget nesting. This becomes useful when you want to extend the drop area around a TextField by wrapping the TextField in a larger component with a contentReceiver modifier. We can guarantee that the container won't receive dragExit event when the dragging item moves over to TextField.

Let's assume we have two contentReceiver boxes named A and B where B is a child of A, aligned to bottom end.


| A | | |---| | | B |


When a dragging item moves over to A from left, then over to B, then starts moving up and goes back to A leaving B, then finally leaves them both, the following would be the list of expected ReceiveContentListener calls in order to both nodes.

  • A#onStart

  • B#onStart

  • A#onEnter

  • B#onEnter

  • B#onExit

  • A#onExit

  • B#onEnd

  • A#onEnd

The interesting part in this order of calls is that A does not receive an exit event when the item moves over to B. This is different than what would happen if you were to use dragAndDropTarget modifier because semantically contentReceiver works as a chain of nodes. If the item were to be dropped on B, its onReceive chain would also call A's onReceive with what's left from B.

Summary

Public functions

open Unit

Optional callback that's called when a dragging session ends by either successful drop, or cancellation.

Cmn
open Unit

Optional callback that's called when a dragging item moves into this node's coordinates.

Cmn
open Unit

Optional callback that's called when a dragging item moves out of this node's coordinates.

Cmn
open Unit

Optional callback that's called when a dragging session starts.

Cmn
TransferableContent?
onReceive(transferableContent: TransferableContent)

Callback that's triggered when a content is successfully committed.

Cmn

Public functions

onDragEnd

open fun onDragEnd(): Unit

Optional callback that's called when a dragging session ends by either successful drop, or cancellation. All contentReceiver nodes in the current composition tree receives this callback immediately.

onDragEnter

open fun onDragEnter(): Unit

Optional callback that's called when a dragging item moves into this node's coordinates.

onDragExit

open fun onDragExit(): Unit

Optional callback that's called when a dragging item moves out of this node's coordinates.

onDragStart

open fun onDragStart(): Unit

Optional callback that's called when a dragging session starts. All contentReceiver nodes in the current composition tree receives this callback immediately.

onReceive

fun onReceive(transferableContent: TransferableContent): TransferableContent?

Callback that's triggered when a content is successfully committed.

Returns
TransferableContent?

An optional TransferableContent that contains the ignored parts of the received TransferableContent by this node. The remaining TransferableContent first will be sent to to the closest ancestor contentReceiver modifier. This chain will continue until there's no ancestor modifier left, or TransferableContent is fully consumed. After, the source subsystem that created the original TransferableContent and initiated the chain will receive any remaining items to apply its default behavior. For example a text editor that receives content by DragAndDrop should insert the remaining text from the receive chain to the drop position.