open-gpui-canvas 0.2.0

Extensible infinite canvas model and interaction primitives for Open GPUI.
Documentation
use crate::{
    CanvasClipboardPayload, CanvasDocument, CanvasPasteTransaction, CanvasSelection,
    CanvasTransaction,
};
use open_gpui::{Pixels, Point};

pub(crate) fn copy_selection(
    document: &CanvasDocument,
    selection: &CanvasSelection,
) -> Option<CanvasClipboardPayload> {
    let payload = CanvasClipboardPayload::from_document_selection(document, selection);
    (!payload.is_empty()).then_some(payload)
}

pub(crate) fn paste_clipboard(
    document: &CanvasDocument,
    payload: &CanvasClipboardPayload,
    offset: Point<Pixels>,
) -> CanvasPasteTransaction {
    payload.paste_transaction(document, offset)
}

pub(crate) fn duplicate_selection(
    document: &CanvasDocument,
    selection: &CanvasSelection,
    offset: Point<Pixels>,
) -> Option<CanvasPasteTransaction> {
    copy_selection(document, selection).map(|payload| paste_clipboard(document, &payload, offset))
}

pub(crate) fn paste_transaction_parts(
    pasted: CanvasPasteTransaction,
) -> Option<(CanvasTransaction, CanvasSelection)> {
    (!pasted.transaction.is_empty()).then_some((pasted.transaction, pasted.selection))
}