Skip to main content

open_gpui_canvas/
lib.rs

1//! Reusable canvas model and interaction primitives for Open GPUI.
2//!
3//! The crate keeps the document model separate from rendering. Applications can use
4//! nodes, edges, shapes, handles, viewport transforms, hit testing, and tool state
5//! transitions without committing to one GPUI element per canvas object.
6
7mod changes;
8mod clipboard;
9mod document;
10mod format;
11mod geometry;
12mod geometry_facts;
13mod gesture;
14mod gpui;
15mod graph;
16#[doc(hidden)]
17pub mod index;
18mod json_canvas;
19mod layer;
20mod mutation;
21mod persistence;
22mod record_scope;
23mod relations;
24mod routing;
25mod runtime;
26mod runtime_query;
27mod schema;
28mod session;
29mod snap;
30mod spatial_cache;
31mod store;
32#[cfg(test)]
33mod test_support;
34mod tool;
35mod transform;
36
37pub use changes::{
38    CanvasChangeOrigin, CanvasRecord, CanvasRecordChange, CanvasRecordOperation,
39    CanvasRecordOperationBatch, CanvasRelationChange, CanvasRelationOperation,
40    CanvasRelationOperationBatch,
41};
42pub use clipboard::{CanvasClipboardPayload, CanvasPasteTransaction};
43pub use document::{
44    BindingId, CanvasConnectionEndpointRole, CanvasDocument, CanvasDocumentBuilder,
45    CanvasDocumentDiff, CanvasEdge, CanvasEdgeRoute, CanvasEdgeRouteKind, CanvasEndpoint,
46    CanvasHandle, CanvasNode, CanvasRecordId, CanvasShape, CanvasSnapshot, CanvasStyle,
47    CanvasTransaction, CanvasValue, DocumentCommand, DocumentError, EdgeId, HandleId, HandleRole,
48    NodeId, ShapeId,
49};
50pub use format::{
51    CANVAS_DOCUMENT_FORMAT_VERSION, CANVAS_DOCUMENT_MIN_SUPPORTED_FORMAT_VERSION,
52    CANVAS_SNAPSHOT_MIGRATIONS, CanvasSnapshotMigration, default_document_format_version,
53    migrate_canvas_snapshot, validate_canvas_document_format_version,
54};
55pub use geometry::{CanvasViewport, TransformError};
56pub use geometry_facts::{
57    CanvasGeometryFacts, CanvasRecordGeometry, CanvasResolvedEdgeGeometry, connection_hit_options,
58};
59pub use gpui::{
60    CanvasConnectionPreviewRoute, CanvasEditorInputHandler, CanvasEditorInputMapper,
61    CanvasInputMapper, CanvasPaintConnectionPreview, CanvasPaintConnectionTargetFeedback,
62    CanvasPaintConnectionTargetState, CanvasPaintEdgeGeometry, CanvasPaintFrame,
63    CanvasPaintInteraction, CanvasPaintInteractionFrame, CanvasPaintLabel, CanvasPaintModel,
64    CanvasPaintOptions, CanvasPaintReconnectEndpoint, CanvasPaintReconnectHandle,
65    CanvasPaintReconnectHandleShape, CanvasPaintRecord, CanvasPaintSnapGuide, CanvasPaintTheme,
66    CanvasPaintTransformHandle, CanvasPaintWireVisualState, CanvasPreparedPaintFrame,
67    CanvasSceneFrame, CanvasSceneLayerItem, CanvasSceneLayerPhase, CanvasSceneRecordGroup,
68    CanvasWidgetOverlayFrame, CanvasWidgetOverlayHitPriority, CanvasWidgetOverlayOptions,
69    CanvasWidgetOverlayPlacement, canvas_editor_scene_view_with_frame, canvas_editor_view,
70    canvas_editor_view_with_frame, canvas_scene_view, canvas_view, collect_visible_records,
71    collect_widget_overlay_frame, paint_canvas_frame, paint_canvas_scene_phase,
72    prepaint_canvas_frame, prepare_canvas_frame, register_canvas_editor_input,
73};
74pub use graph::{
75    CanvasEdgeDirection, CanvasGraph, CanvasGraphEndpointIds, CanvasGraphIndex, CanvasIndexedGraph,
76};
77pub use index::{HitOptions, HitRecord, HitTarget};
78pub use json_canvas::{
79    JsonCanvas, JsonCanvasEdge, JsonCanvasEndpointShape, JsonCanvasError, JsonCanvasNode,
80    JsonCanvasSide, document_from_json_canvas_str, document_to_json_canvas_string,
81};
82pub use layer::CanvasZOrderCommand;
83pub use mutation::{CanvasCommittedMutation, CanvasPreparedMutation};
84pub use persistence::{
85    CANVAS_LORO_CRDT_FEATURE, CANVAS_PERSISTENCE_ADAPTERS, CANVAS_PERSISTENCE_CODEC_VERSION,
86    CANVAS_REDB_STORE_FEATURE, CANVAS_RKYV_SNAPSHOT_FEATURE, CanvasCheckpoint,
87    CanvasEncodedLogEntry, CanvasJsonPersistenceCodec, CanvasLogEntry, CanvasLogEntryKind,
88    CanvasPersistenceAdapter, CanvasPersistenceAdapterStatus, CanvasPersistenceByteStore,
89    CanvasPersistenceByteStoreAdapter, CanvasPersistenceByteStoreError, CanvasPersistenceCodec,
90    CanvasPersistenceCodecError, CanvasPersistenceCursor, CanvasPersistenceEnvelope,
91    CanvasPersistenceError, CanvasPersistenceRecord, CanvasPersistenceRecordKind,
92    CanvasPersistenceStore, CanvasPersistentToolRegistryError, CanvasReplayError,
93    MemoryCanvasPersistenceByteStore, MemoryCanvasPersistenceStore,
94    apply_persistent_store_transaction, apply_persistent_tool_intent,
95    apply_persistent_tool_intents, apply_persistent_transaction,
96    canvas_persistence_adapter_statuses, handle_persistent_event,
97    handle_persistent_event_with_custom_tool, handle_persistent_event_with_tool_registry,
98    load_canvas_document, load_canvas_persistence_cursor, redo_persistent_store_transaction,
99    redo_persistent_transaction, replay_canvas_log, save_canvas_checkpoint,
100    save_canvas_store_checkpoint, undo_persistent_store_transaction, undo_persistent_transaction,
101};
102pub use record_scope::{
103    CanvasRecordScope, CanvasRecordScopeOptions, CanvasResolvedSelectionScope, normalize_selection,
104    resolve_selection_scope, selection_record_scope,
105};
106pub use relations::{
107    CanvasRecordBindingRelation, CanvasRecordGroupRelation, CanvasRecordParentRelation,
108    CanvasRecordRelation, CanvasRecordRelationKey, CanvasRecordRelationKind, CanvasRecordRelations,
109    CanvasRecordRelationsBuilder,
110};
111pub use routing::{
112    CanvasDefaultEdgeRouter, CanvasEdgeRouter, CanvasRoutePath, CanvasRouteRequest,
113    CanvasRouteSegment,
114};
115pub use runtime::CanvasRuntime;
116pub use schema::{
117    CanvasEdgeKind, CanvasEdgeRenderPolicy, CanvasEdgeSchemaPolicy, CanvasKindLabel,
118    CanvasKindPaint, CanvasKindRegistry, CanvasNodeBoundsHitTest, CanvasNodeGeometryPolicy,
119    CanvasNodeHitTest, CanvasNodeInteractionPolicy, CanvasNodeKind, CanvasNodeRenderPolicy,
120    CanvasNodeResizeProposal, CanvasNodeSchemaPolicy, CanvasNodeTransformPolicy, CanvasRecordKind,
121    CanvasSchemaError, CanvasShapeBoundsHitTest, CanvasShapeGeometryPolicy, CanvasShapeHitTest,
122    CanvasShapeInteractionPolicy, CanvasShapeKind, CanvasShapeRenderPolicy,
123    CanvasShapeResizeProposal, CanvasShapeSchemaPolicy, CanvasShapeTransformPolicy,
124};
125pub use snap::{
126    CanvasSnapAxis, CanvasSnapGuide, CanvasSnapResult, DEFAULT_SNAP_THRESHOLD,
127    snap_delta_for_resize_selection, snap_delta_for_selection,
128};
129pub use store::{
130    CanvasStore, CanvasStoreChange, CanvasStoreHistoryEffect, CanvasStoreListenerId,
131    CanvasStoreMutationSource,
132};
133pub use tool::{
134    CanvasConnectedRelease, CanvasConnectionDragState, CanvasConnectionRejectReason,
135    CanvasConnectionRelease, CanvasDroppedConnectionRelease, CanvasDroppedReconnectRelease,
136    CanvasEditor, CanvasEvent, CanvasHistory, CanvasKey, CanvasKeyModifiers,
137    CanvasReconnectedRelease, CanvasRejectedConnectionRelease, CanvasSelection,
138    CanvasSelectionMode, CanvasTool, CanvasToolContext, CanvasToolId, CanvasToolIntent,
139    CanvasToolReducer, CanvasToolRegistry, CanvasToolRegistryError, PointerButton,
140};
141pub use transform::{
142    CanvasResizeHandle, CanvasTransformHandle, CanvasTransformTarget, canvas_transform_handles,
143};