cutecanvas 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cutecanvas-1.0.0/AGENTS.md +111 -0
- cutecanvas-1.0.0/ARCHITECTURE_DEBT.toml +136 -0
- cutecanvas-1.0.0/ARCHITECTURE_WAIVERS.toml +249 -0
- cutecanvas-1.0.0/CHANGELOG.md +7 -0
- cutecanvas-1.0.0/PKG-INFO +284 -0
- cutecanvas-1.0.0/README.md +256 -0
- cutecanvas-1.0.0/TEST_POLICY.toml +104 -0
- cutecanvas-1.0.0/docs/api-reference.md +1082 -0
- cutecanvas-1.0.0/docs/configuration-reference.md +129 -0
- cutecanvas-1.0.0/docs/configuration.md +246 -0
- cutecanvas-1.0.0/docs/diagnostics.md +91 -0
- cutecanvas-1.0.0/docs/documents-and-presentations.md +384 -0
- cutecanvas-1.0.0/docs/extensibility.md +210 -0
- cutecanvas-1.0.0/docs/getting-started.md +275 -0
- cutecanvas-1.0.0/docs/host-cookbook.md +247 -0
- cutecanvas-1.0.0/docs/host-ui.md +222 -0
- cutecanvas-1.0.0/docs/interaction-modes.md +495 -0
- cutecanvas-1.0.0/docs/masks-and-sam.md +472 -0
- cutecanvas-1.0.0/docs/painting.md +238 -0
- cutecanvas-1.0.0/docs/pixel-selections.md +325 -0
- cutecanvas-1.0.0/docs/placed-images.md +93 -0
- cutecanvas-1.0.0/docs/project-resources.md +151 -0
- cutecanvas-1.0.0/docs/scenes.md +346 -0
- cutecanvas-1.0.0/docs/touch-and-pen.md +87 -0
- cutecanvas-1.0.0/docs/vector-layers.md +132 -0
- cutecanvas-1.0.0/examples/cutecanvas_demo.py +671 -0
- cutecanvas-1.0.0/examples/cutecanvas_demo_environment.py +255 -0
- cutecanvas-1.0.0/examples/demo_settings.py +198 -0
- cutecanvas-1.0.0/examples/demonstration/__init__.py +23 -0
- cutecanvas-1.0.0/examples/demonstration/brush_controls.py +351 -0
- cutecanvas-1.0.0/examples/demonstration/canvas_geometry_dialog.py +217 -0
- cutecanvas-1.0.0/examples/demonstration/clone_stamp_controls.py +200 -0
- cutecanvas-1.0.0/examples/demonstration/command_tutorial.py +374 -0
- cutecanvas-1.0.0/examples/demonstration/composition_properties_dialog.py +86 -0
- cutecanvas-1.0.0/examples/demonstration/composition_tutorial.py +237 -0
- cutecanvas-1.0.0/examples/demonstration/compositions/__init__.py +21 -0
- cutecanvas-1.0.0/examples/demonstration/compositions/browser.py +533 -0
- cutecanvas-1.0.0/examples/demonstration/compositions/dock.py +126 -0
- cutecanvas-1.0.0/examples/demonstration/compositions/highlights.py +91 -0
- cutecanvas-1.0.0/examples/demonstration/config/__init__.py +35 -0
- cutecanvas-1.0.0/examples/demonstration/config/dialog.py +846 -0
- cutecanvas-1.0.0/examples/demonstration/config/spec.py +738 -0
- cutecanvas-1.0.0/examples/demonstration/configuration_tutorial.py +332 -0
- cutecanvas-1.0.0/examples/demonstration/coverage_controls.py +123 -0
- cutecanvas-1.0.0/examples/demonstration/custom_tool.py +41 -0
- cutecanvas-1.0.0/examples/demonstration/demo_text.py +149 -0
- cutecanvas-1.0.0/examples/demonstration/demo_window.py +509 -0
- cutecanvas-1.0.0/examples/demonstration/document_saves.py +123 -0
- cutecanvas-1.0.0/examples/demonstration/editor_controls.py +676 -0
- cutecanvas-1.0.0/examples/demonstration/editor_policy_controls.py +87 -0
- cutecanvas-1.0.0/examples/demonstration/extension_examples/custom_cursor.py +124 -0
- cutecanvas-1.0.0/examples/demonstration/extension_examples/custom_overlay.py +49 -0
- cutecanvas-1.0.0/examples/demonstration/extension_examples/lens_tool.py +180 -0
- cutecanvas-1.0.0/examples/demonstration/extension_tutorial.py +434 -0
- cutecanvas-1.0.0/examples/demonstration/history_controls.py +124 -0
- cutecanvas-1.0.0/examples/demonstration/hooks_editor.py +83 -0
- cutecanvas-1.0.0/examples/demonstration/hooks_examples.py +59 -0
- cutecanvas-1.0.0/examples/demonstration/input_tutorial.py +127 -0
- cutecanvas-1.0.0/examples/demonstration/layer_inspector.py +288 -0
- cutecanvas-1.0.0/examples/demonstration/layer_policy.py +138 -0
- cutecanvas-1.0.0/examples/demonstration/layer_properties_dialog.py +73 -0
- cutecanvas-1.0.0/examples/demonstration/move_controls.py +60 -0
- cutecanvas-1.0.0/examples/demonstration/navigation_trace.py +560 -0
- cutecanvas-1.0.0/examples/demonstration/placed_asset_controls.py +192 -0
- cutecanvas-1.0.0/examples/demonstration/presentation_tutorial.py +222 -0
- cutecanvas-1.0.0/examples/demonstration/projection_tutorial.py +84 -0
- cutecanvas-1.0.0/examples/demonstration/selection_modification_control.py +148 -0
- cutecanvas-1.0.0/examples/demonstration/status_tutorial.py +398 -0
- cutecanvas-1.0.0/examples/demonstration/tool_mode_tutorial.py +564 -0
- cutecanvas-1.0.0/examples/demonstration/touch_and_pen.py +52 -0
- cutecanvas-1.0.0/examples/demonstration/touch_and_pen_simulator.py +385 -0
- cutecanvas-1.0.0/examples/demonstration/transform_controls.py +192 -0
- cutecanvas-1.0.0/examples/demonstration/vector_controls.py +496 -0
- cutecanvas-1.0.0/examples/demonstration/welcome_document.py +98 -0
- cutecanvas-1.0.0/examples/demonstration/workers.py +202 -0
- cutecanvas-1.0.0/examples/demonstration/workspace_tutorial.py +442 -0
- cutecanvas-1.0.0/pyproject.toml +96 -0
- cutecanvas-1.0.0/setup.cfg +4 -0
- cutecanvas-1.0.0/src/cutecanvas/__init__.py +389 -0
- cutecanvas-1.0.0/src/cutecanvas/__init__.pyi +23 -0
- cutecanvas-1.0.0/src/cutecanvas/_version.py +28 -0
- cutecanvas-1.0.0/src/cutecanvas/canvas.py +648 -0
- cutecanvas-1.0.0/src/cutecanvas/canvas.pyi +19 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/__init__.py +31 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/edit_controller.py +185 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/edit_history.py +268 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/geometry_policy.py +83 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/layer_edits.py +349 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/layer_mapping_validation.py +46 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/layers.py +577 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/model.py +56 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/mutations.py +217 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/public_layer_mapping.py +62 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/public_policy.py +71 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/resource_lifetime.py +113 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/resource_references.py +43 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/scene_adapter.py +156 -0
- cutecanvas-1.0.0/src/cutecanvas/composition/service.py +512 -0
- cutecanvas-1.0.0/src/cutecanvas/core/__init__.py +36 -0
- cutecanvas-1.0.0/src/cutecanvas/core/config.py +116 -0
- cutecanvas-1.0.0/src/cutecanvas/core/config_features.py +234 -0
- cutecanvas-1.0.0/src/cutecanvas/core/fallbacks.py +183 -0
- cutecanvas-1.0.0/src/cutecanvas/core/feature_coordinator.py +200 -0
- cutecanvas-1.0.0/src/cutecanvas/core/hooks.py +184 -0
- cutecanvas-1.0.0/src/cutecanvas/core/state.py +509 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/__init__.py +112 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/asset.py +512 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/authoring.py +63 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/bilinear_coordinates.py +137 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/bilinear_resampling.py +228 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/boundary.py +176 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/canvas_aperture.py +130 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/containment.py +36 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/content_bounds.py +45 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/document.py +183 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/evaluation.py +436 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/filters.py +197 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/geometry.py +91 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/modification.py +163 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/movement.py +83 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/operations.py +78 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/path_conversion.py +110 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/piecewise_resampling.py +164 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/projection.py +71 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/raster_sampling.py +105 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/raster_structure.py +32 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/snapshot_equality.py +63 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/spatial_constraint.py +250 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/state_bounds.py +56 -0
- cutecanvas-1.0.0/src/cutecanvas/coverage/surface.py +722 -0
- cutecanvas-1.0.0/src/cutecanvas/cursor.py +52 -0
- cutecanvas-1.0.0/src/cutecanvas/cutecanvas.pyi +1524 -0
- cutecanvas-1.0.0/src/cutecanvas/document/__init__.py +62 -0
- cutecanvas-1.0.0/src/cutecanvas/document/canvas_crop.py +159 -0
- cutecanvas-1.0.0/src/cutecanvas/document/canvas_geometry.py +414 -0
- cutecanvas-1.0.0/src/cutecanvas/document/canvas_geometry_api.py +74 -0
- cutecanvas-1.0.0/src/cutecanvas/document/canvas_resample_products.py +238 -0
- cutecanvas-1.0.0/src/cutecanvas/document/canvas_resample_resources.py +188 -0
- cutecanvas-1.0.0/src/cutecanvas/document/canvas_resampling.py +393 -0
- cutecanvas-1.0.0/src/cutecanvas/document/document.py +382 -0
- cutecanvas-1.0.0/src/cutecanvas/document/events.py +108 -0
- cutecanvas-1.0.0/src/cutecanvas/document/inspection.py +203 -0
- cutecanvas-1.0.0/src/cutecanvas/document/references.py +80 -0
- cutecanvas-1.0.0/src/cutecanvas/document/session.py +317 -0
- cutecanvas-1.0.0/src/cutecanvas/document/viewport.py +120 -0
- cutecanvas-1.0.0/src/cutecanvas/edit_sessions.py +137 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/__init__.py +48 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/affine_interactions.py +53 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/composition_root.py +770 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/floating_history.py +245 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/floating_layers.py +137 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/floating_resolution.py +482 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/floating_session.py +257 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/fragment_projection.py +148 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/interaction.py +219 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/interaction_policy.py +65 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/layer_edge_modification.py +261 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/layer_edge_targets.py +110 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/move_configuration.py +51 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/movement.py +334 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/operation_contracts.py +85 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/operation_resolution.py +531 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/paint_destination.py +142 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/pixel_move_target.py +203 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/pixel_movement.py +501 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/policy.py +50 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/provisional_history.py +119 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/selection_projection.py +117 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/session_coordination.py +238 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_collapse.py +212 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_discovery.py +255 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_geometry.py +239 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_grouping.py +212 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_handle_resolution.py +79 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_history.py +206 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_index.py +78 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_interaction.py +390 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_participant.py +331 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_pivot.py +324 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_presentation.py +203 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_publication.py +112 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_session.py +225 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_translation.py +284 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/source_operations.py +65 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/transform_commands.py +64 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/transform_coordinator.py +377 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/transform_history.py +181 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/transform_install.py +100 -0
- cutecanvas-1.0.0/src/cutecanvas/editor/transform_interaction.py +195 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/__init__.py +16 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/canvas_geometry_api.py +114 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/clone_stamp.py +99 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/composition_api.py +635 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/composition_handles.py +195 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/configuration_api.py +57 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/context_api.py +34 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/coverage_api.py +278 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/diagnostics_api.py +50 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/drag_api.py +96 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/edit_session_api.py +86 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/editor.py +386 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/editor_policy_api.py +108 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/effect_api.py +74 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/effect_handles.py +64 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/effects.py +122 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/handles.py +258 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/image_export_api.py +44 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/interaction_api.py +185 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/layer_api.py +302 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/layer_handles.py +199 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/mask_api.py +327 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/move_api.py +45 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/persistence.py +136 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/placed_api.py +225 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/projection_api.py +120 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/raster_api.py +686 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/resource_api.py +186 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/selection_api.py +263 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/snapping_api.py +78 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/tool_modes.py +52 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/transform_api.py +66 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/vector_api.py +481 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/view_api.py +104 -0
- cutecanvas-1.0.0/src/cutecanvas/facade/viewport_api.py +67 -0
- cutecanvas-1.0.0/src/cutecanvas/fill/__init__.py +38 -0
- cutecanvas-1.0.0/src/cutecanvas/fill/coordinator.py +241 -0
- cutecanvas-1.0.0/src/cutecanvas/fill/evaluation.py +42 -0
- cutecanvas-1.0.0/src/cutecanvas/fill/flood.py +263 -0
- cutecanvas-1.0.0/src/cutecanvas/fill/selection_fill.py +70 -0
- cutecanvas-1.0.0/src/cutecanvas/fill/sources.py +182 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/__init__.py +43 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/activation.py +289 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/autosave.py +581 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/autosave_coordination.py +199 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/autosave_products.py +103 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/canvas_aperture.py +187 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/combiner.py +69 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/component_adjustment.py +114 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/component_graph.py +269 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/coordinates.py +112 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/coverage_history.py +107 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/coverage_preview_source.py +140 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/coverage_transactions.py +198 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/delegate.py +453 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/descriptor_factory.py +127 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/edge_edits.py +94 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/edit_service.py +714 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/export.py +180 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/file_io.py +48 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/floating_layers.py +193 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/generated_edits.py +62 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/history.py +483 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/history_presentation.py +100 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/history_size.py +68 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/hybrid_source.py +242 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/image_ops.py +195 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/install.py +130 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/layer_coordination.py +359 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/layer_workflows.py +373 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/live_preview_geometry.py +69 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/live_preview_raster.py +274 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/live_preview_store.py +87 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/mask.py +468 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/mask_controller.py +193 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/mask_diagnostics.py +473 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/mask_patch_history.py +181 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/mask_service.py +586 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/mask_undo.py +189 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/mixed_stroke.py +92 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/paint_preparation.py +181 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/paint_target.py +214 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/pixel_edits.py +379 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/pixel_translation.py +342 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/presentation_clip.py +64 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/projection.py +390 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/raster_mutations.py +391 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/raster_structure_history.py +54 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/rasterizer.py +42 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/render_cache.py +1365 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/render_coordination.py +842 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/render_product_geometry.py +51 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/render_products.py +153 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/resource_changes.py +28 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/sam_feature.py +353 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/source_resolver.py +434 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/spatial_paint.py +267 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/spatial_paint_history.py +209 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/spatial_paint_layers.py +58 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/status_diagnostics.py +95 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/stroke_history.py +103 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/stroke_interactions.py +212 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/stroke_models.py +66 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/stroke_preview.py +296 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/stroke_regions.py +100 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/stroke_rendering.py +56 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/stroke_requests.py +149 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/strokes.py +853 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/surface_history.py +54 -0
- cutecanvas-1.0.0/src/cutecanvas/masks/workflow.py +848 -0
- cutecanvas-1.0.0/src/cutecanvas/overlay_contracts.py +83 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/__init__.py +103 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/clone_compositor.py +73 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/clone_model.py +158 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/clone_operation.py +427 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/clone_source.py +154 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/compositor.py +144 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/configuration.py +93 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/dab_engine.py +155 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/model.py +295 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/operations.py +124 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/piecewise_tip_coordinates.py +71 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/qt_dab_painter.py +338 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/regions.py +36 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/rendering.py +183 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/sample_mapping.py +72 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/stroke_session.py +215 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/target_contracts.py +207 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/target_geometry.py +60 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/targets.py +521 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/tip_cache.py +238 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/tip_geometry.py +60 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/tip_preview.py +84 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/tip_projection.py +218 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/tools/__init__.py +29 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/tools/brush.py +697 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/tools/brush_preview.py +219 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/tools/brush_signals.py +82 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/tools/clone_feedback.py +105 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/tools/clone_stamp.py +171 -0
- cutecanvas-1.0.0/src/cutecanvas/painting/tools/eraser.py +44 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/__init__.py +30 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/capture.py +144 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/codec.py +1129 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/coverage_codec.py +259 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/effect_codec.py +106 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/layer_codec.py +181 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/layer_geometry_codec.py +73 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/layer_mapping_codec.py +119 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/legacy_shared_edges.py +292 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/model.py +101 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/restore.py +172 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/service.py +122 -0
- cutecanvas-1.0.0/src/cutecanvas/persistence/vector_object_codec.py +260 -0
- cutecanvas-1.0.0/src/cutecanvas/placed/__init__.py +26 -0
- cutecanvas-1.0.0/src/cutecanvas/placed/descriptor_factory.py +80 -0
- cutecanvas-1.0.0/src/cutecanvas/placed/history.py +83 -0
- cutecanvas-1.0.0/src/cutecanvas/placed/model.py +81 -0
- cutecanvas-1.0.0/src/cutecanvas/placed/mutations.py +170 -0
- cutecanvas-1.0.0/src/cutecanvas/placed/rasterization.py +327 -0
- cutecanvas-1.0.0/src/cutecanvas/placed/reload.py +77 -0
- cutecanvas-1.0.0/src/cutecanvas/placed/source_capabilities.py +108 -0
- cutecanvas-1.0.0/src/cutecanvas/placed/store.py +371 -0
- cutecanvas-1.0.0/src/cutecanvas/placed/workflow.py +631 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/__init__.py +37 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/comparison_catalog.py +122 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/comparison_overlays.py +107 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/contracts.py +58 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/grid_interaction.py +118 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/grid_surface.py +246 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/grid_viewports.py +49 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/native_comparison.py +365 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/surfaces.py +55 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/target_mount.py +46 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/target_pool.py +202 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/widget_lifetime.py +101 -0
- cutecanvas-1.0.0/src/cutecanvas/presentation/workspace.py +724 -0
- cutecanvas-1.0.0/src/cutecanvas/projection.py +353 -0
- cutecanvas-1.0.0/src/cutecanvas/py.typed +1 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/__init__.py +20 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/assets.py +224 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/clone_sampling.py +200 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/clone_target.py +328 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/color_surface.py +424 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/content_bounds.py +42 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/descriptor_factory.py +80 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/floating_layers.py +176 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/layers.py +302 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/paint_geometry.py +95 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/paint_history.py +151 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/paint_target.py +440 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/pixel_edits.py +277 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/pixel_translation.py +308 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/presentation_state.py +40 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/revision_reader.py +137 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/source_resolver.py +203 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/sparse_grid.py +471 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/stroke_session.py +87 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/structure_mutations.py +417 -0
- cutecanvas-1.0.0/src/cutecanvas/raster/structure_products.py +63 -0
- cutecanvas-1.0.0/src/cutecanvas/rendering/__init__.py +20 -0
- cutecanvas-1.0.0/src/cutecanvas/rendering/floating_pixels.py +268 -0
- cutecanvas-1.0.0/src/cutecanvas/rendering/layer_edge_preview.py +90 -0
- cutecanvas-1.0.0/src/cutecanvas/rendering/mapped_mask_transitions.py +171 -0
- cutecanvas-1.0.0/src/cutecanvas/rendering/raster_transitions.py +246 -0
- cutecanvas-1.0.0/src/cutecanvas/rendering/sampled_transition_tiles.py +236 -0
- cutecanvas-1.0.0/src/cutecanvas/rendering/transient_rasters.py +340 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/__init__.py +39 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/active_raster.py +136 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/active_raster_coordinates.py +99 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/composition_rasterization.py +333 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/composition_rendering.py +347 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/composition_resources.py +99 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/descriptor_factory.py +93 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/document_core.py +205 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/image_documents.py +137 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/image_export.py +116 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/install.py +334 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/layer_operations.py +152 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/lifecycle.py +66 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/model.py +83 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/pixel_history.py +258 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/raster_instances.py +59 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/rasterization.py +116 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/source_capabilities.py +272 -0
- cutecanvas-1.0.0/src/cutecanvas/resources/store.py +340 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/__init__.py +52 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/accessors.py +585 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/canvas_resampling.py +292 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/coverage_modification_contracts.py +105 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/coverage_modification_preview.py +408 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/document_events.py +652 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/document_runtime.py +188 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/execution_binding.py +101 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/headroom_monitor.py +191 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/latest_requests.py +122 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/lifecycle.py +822 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/scene_interaction_sync.py +52 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/view_state.py +319 -0
- cutecanvas-1.0.0/src/cutecanvas/runtime/viewport_activation.py +43 -0
- cutecanvas-1.0.0/src/cutecanvas/sam/__init__.py +31 -0
- cutecanvas-1.0.0/src/cutecanvas/sam/checkpoint.py +72 -0
- cutecanvas-1.0.0/src/cutecanvas/sam/checkpoint_coordination.py +130 -0
- cutecanvas-1.0.0/src/cutecanvas/sam/delegate.py +243 -0
- cutecanvas-1.0.0/src/cutecanvas/sam/manager.py +648 -0
- cutecanvas-1.0.0/src/cutecanvas/sam/products.py +80 -0
- cutecanvas-1.0.0/src/cutecanvas/sam/segmentation_request.py +71 -0
- cutecanvas-1.0.0/src/cutecanvas/sam/service.py +428 -0
- cutecanvas-1.0.0/src/cutecanvas/sam/session.py +204 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/__init__.py +31 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/canvas_bounds.py +36 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/geometry.py +56 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/identity.py +39 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/layer_assembly.py +103 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/layer_edge_preview.py +133 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/layer_effects.py +30 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/layer_geometry.py +143 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/layer_move.py +263 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/layer_selection.py +164 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/mapping_edit.py +114 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/mapping_mutations.py +150 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/mapping_preview.py +192 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/movement_interaction.py +223 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/mutations.py +517 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/pixel_edits.py +162 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/pixel_extraction.py +73 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/pixel_fragments.py +128 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/pixel_move_preview.py +53 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/pixel_owners.py +181 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/pixel_transitions.py +104 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/raster_mutations.py +210 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/source_capabilities.py +233 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/transform_session.py +374 -0
- cutecanvas-1.0.0/src/cutecanvas/scene/viewport_selection.py +157 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/__init__.py +45 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/boundary.py +69 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/compositor.py +130 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/geometry.py +92 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/history.py +53 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/model.py +37 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/modification.py +82 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/modification_coordinator.py +291 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/paint_target.py +159 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/projection.py +238 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/service.py +317 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/smart_segmentation.py +92 -0
- cutecanvas-1.0.0/src/cutecanvas/selection/translation_interaction.py +178 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/__init__.py +42 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/authoring.py +330 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/axis_resolution.py +270 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/candidates.py +156 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/configuration.py +158 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/edge_candidates.py +200 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/edge_index.py +132 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/edge_model.py +245 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/engine.py +223 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/feedback.py +50 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/model.py +149 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/movement.py +115 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/oriented_resolution.py +273 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/rail_resolution.py +254 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/rail_targets.py +170 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/scale.py +43 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/system.py +137 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/transform.py +150 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/transform_oriented_scale.py +137 -0
- cutecanvas-1.0.0/src/cutecanvas/snapping/transform_scale.py +366 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/__init__.py +49 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/activation.py +316 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/activation_controller.py +126 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/affine_ports.py +70 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/base.py +52 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/coverage_operation.py +52 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/coverage_preview.py +48 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/cursor_controller.py +232 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/cursor_feedback.py +31 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/delegate.py +488 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/dependencies.py +85 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/input/__init__.py +21 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/keyboard_input.py +136 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/modifier_snapshot.py +65 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/move.py +280 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/overlay_controller.py +79 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/paint_bucket.py +107 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/polygon_coverage.py +452 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/polygon_coverage_hit_testing.py +88 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/polygon_coverage_overlay.py +197 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/polygon_coverage_publication.py +66 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/polygon_coverage_session.py +190 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/polygon_edit_session.py +193 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/ports.py +458 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/selection_shapes.py +577 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/selection_shortcuts.py +51 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/shared_edge_resize.py +189 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/shortcuts.py +47 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/smart_segmentation.py +352 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/tools.py +207 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/transform.py +357 -0
- cutecanvas-1.0.0/src/cutecanvas/tools/transient_input.py +144 -0
- cutecanvas-1.0.0/src/cutecanvas/types.py +531 -0
- cutecanvas-1.0.0/src/cutecanvas/ui/__init__.py +37 -0
- cutecanvas-1.0.0/src/cutecanvas/ui/affine_handles.py +55 -0
- cutecanvas-1.0.0/src/cutecanvas/ui/brush_feedback.py +51 -0
- cutecanvas-1.0.0/src/cutecanvas/ui/cursor_builder.py +280 -0
- cutecanvas-1.0.0/src/cutecanvas/ui/editor_overlays.py +195 -0
- cutecanvas-1.0.0/src/cutecanvas/ui/erase_indicator.py +66 -0
- cutecanvas-1.0.0/src/cutecanvas/ui/shared_edge.py +75 -0
- cutecanvas-1.0.0/src/cutecanvas/ui/transform_box.py +57 -0
- cutecanvas-1.0.0/src/cutecanvas/ui/transform_cursor.py +107 -0
- cutecanvas-1.0.0/src/cutecanvas/ui/vector_nodes.py +59 -0
- cutecanvas-1.0.0/src/cutecanvas/ui/vector_text.py +45 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/__init__.py +22 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/conversion.py +557 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/conversion_products.py +217 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/descriptor_factory.py +78 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/document_core.py +67 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/editing.py +337 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/effects.py +220 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/facade.py +593 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/install.py +223 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/interaction.py +189 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/layers.py +234 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/mask_cache.py +277 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/node_edit.py +423 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/node_tool.py +112 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/presentation.py +74 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/projection.py +151 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/public.py +146 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/selection.py +70 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/source_capabilities.py +126 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/store.py +119 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/targets.py +156 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/text_edit.py +525 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/text_paths.py +148 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/text_tool.py +104 -0
- cutecanvas-1.0.0/src/cutecanvas/vector/tools.py +360 -0
- cutecanvas-1.0.0/src/cutecanvas.egg-info/PKG-INFO +284 -0
- cutecanvas-1.0.0/src/cutecanvas.egg-info/SOURCES.txt +823 -0
- cutecanvas-1.0.0/src/cutecanvas.egg-info/dependency_links.txt +1 -0
- cutecanvas-1.0.0/src/cutecanvas.egg-info/not-zip-safe +1 -0
- cutecanvas-1.0.0/src/cutecanvas.egg-info/requires.txt +9 -0
- cutecanvas-1.0.0/src/cutecanvas.egg-info/scm_file_list.json +819 -0
- cutecanvas-1.0.0/src/cutecanvas.egg-info/scm_version.json +8 -0
- cutecanvas-1.0.0/src/cutecanvas.egg-info/top_level.txt +1 -0
- cutecanvas-1.0.0/tests/conftest.py +113 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/__init__.py +17 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/config.py +24 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/execution_backend.py +375 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/README.md +122 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/__init__.py +65 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/__main__.py +137 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/abuse_model.py +260 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/abuse_runner.py +882 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/campaign.py +146 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/editor_workflow.py +435 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/high_dpi_navigation.py +350 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/high_dpi_viewport_resize.py +112 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/input_driver.py +275 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/minimizer.py +72 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/mounted_qpane.py +598 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/pointer_transition_probe.py +149 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/process_lock.py +206 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/qt_lifetime.py +32 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/release_probe.py +168 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/scenarios.py +420 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/timing.py +138 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/viewport_resize_probe.py +138 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/visual_oracle.py +158 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/__init__.py +17 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/comparison_pan_abuse_harness.py +295 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/cutecanvas_navigation_trace_harness.py +1330 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/cutecanvas_pan_performance_harness.py +1120 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/pan_performance_analysis.py +254 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/pan_performance_harness.py +407 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/pan_performance_runtime.py +468 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/pan_render_harness.py +596 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/mask_test_utils.py +83 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/mask_workflow.py +152 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/render_compare.py +108 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/render_plan.py +214 -0
- cutecanvas-1.0.0/tests/cutecanvas_test_support/repository.py +36 -0
- cutecanvas-1.0.0/tests/demos/contract/test_demo_canvas_geometry.py +86 -0
- cutecanvas-1.0.0/tests/demos/contract/test_demo_config.py +327 -0
- cutecanvas-1.0.0/tests/demos/contract/test_demo_editor_policy.py +49 -0
- cutecanvas-1.0.0/tests/demos/integration/test_cutecanvas_demo_bootstrap.py +126 -0
- cutecanvas-1.0.0/tests/demos/integration/test_demo_brush_controls.py +119 -0
- cutecanvas-1.0.0/tests/demos/integration/test_demo_clone_stamp_controls.py +180 -0
- cutecanvas-1.0.0/tests/demos/integration/test_demo_composition_browser.py +583 -0
- cutecanvas-1.0.0/tests/demos/integration/test_demo_document_saves.py +61 -0
- cutecanvas-1.0.0/tests/demos/integration/test_demo_editor_shortcuts.py +606 -0
- cutecanvas-1.0.0/tests/demos/integration/test_demo_image_loading.py +136 -0
- cutecanvas-1.0.0/tests/demos/integration/test_demo_layer_inspector.py +514 -0
- cutecanvas-1.0.0/tests/demos/integration/test_demo_settings.py +147 -0
- cutecanvas-1.0.0/tests/demos/integration/test_demo_tool_focus.py +130 -0
- cutecanvas-1.0.0/tests/demos/integration/test_product_demos.py +46 -0
- cutecanvas-1.0.0/tests/demos/qt/test_demo_edit_session_controls.py +176 -0
- cutecanvas-1.0.0/tests/demos/qt/test_demo_presentations.py +80 -0
- cutecanvas-1.0.0/tests/demos/qt/test_demo_shared_edge_resize.py +111 -0
- cutecanvas-1.0.0/tests/demos/qt/test_demo_touch_and_pen.py +123 -0
- cutecanvas-1.0.0/tests/documents/abuse/test_canvas_resampling_abuse.py +126 -0
- cutecanvas-1.0.0/tests/documents/integration/test_autosave.py +358 -0
- cutecanvas-1.0.0/tests/documents/integration/test_canvas_content_references.py +264 -0
- cutecanvas-1.0.0/tests/documents/integration/test_canvas_crop_persistence.py +58 -0
- cutecanvas-1.0.0/tests/documents/integration/test_canvas_crop_rendering.py +43 -0
- cutecanvas-1.0.0/tests/documents/integration/test_canvas_document_sessions.py +371 -0
- cutecanvas-1.0.0/tests/documents/integration/test_canvas_geometry_workflows.py +358 -0
- cutecanvas-1.0.0/tests/documents/integration/test_canvas_projection.py +114 -0
- cutecanvas-1.0.0/tests/documents/integration/test_canvas_resampling_runtime.py +112 -0
- cutecanvas-1.0.0/tests/documents/integration/test_canvas_workspace.py +799 -0
- cutecanvas-1.0.0/tests/documents/integration/test_canvas_workspace_inspection_activation.py +153 -0
- cutecanvas-1.0.0/tests/documents/integration/test_composition_archive.py +1054 -0
- cutecanvas-1.0.0/tests/documents/integration/test_composition_documents.py +229 -0
- cutecanvas-1.0.0/tests/documents/integration/test_composition_edit_history.py +208 -0
- cutecanvas-1.0.0/tests/documents/integration/test_composition_layer_edits.py +137 -0
- cutecanvas-1.0.0/tests/documents/integration/test_composition_layers.py +212 -0
- cutecanvas-1.0.0/tests/documents/integration/test_document_execution_runtime.py +197 -0
- cutecanvas-1.0.0/tests/documents/integration/test_headless_image_document_replacement.py +110 -0
- cutecanvas-1.0.0/tests/documents/integration/test_project_document_persistence.py +292 -0
- cutecanvas-1.0.0/tests/documents/integration/test_project_resources.py +535 -0
- cutecanvas-1.0.0/tests/documents/integration/test_workspace_target_budget.py +72 -0
- cutecanvas-1.0.0/tests/documents/performance/test_canvas_resampling_performance.py +54 -0
- cutecanvas-1.0.0/tests/documents/qt/test_viewport_resize_projection.py +336 -0
- cutecanvas-1.0.0/tests/documents/unit/test_layer_geometry_codec.py +53 -0
- cutecanvas-1.0.0/tests/documents/unit/test_layer_mapping_codec.py +96 -0
- cutecanvas-1.0.0/tests/documents/unit/test_legacy_shared_edges.py +94 -0
- cutecanvas-1.0.0/tests/editor/abuse/test_abuse_harness_entrypoint.py +46 -0
- cutecanvas-1.0.0/tests/editor/abuse/test_abuse_timing.py +62 -0
- cutecanvas-1.0.0/tests/editor/abuse/test_comparison_zoom_abuse.py +389 -0
- cutecanvas-1.0.0/tests/editor/abuse/test_native_comparison_pan_abuse.py +74 -0
- cutecanvas-1.0.0/tests/editor/abuse/test_pan_performance_harness.py +188 -0
- cutecanvas-1.0.0/tests/editor/contract/test_config_strictness.py +98 -0
- cutecanvas-1.0.0/tests/editor/contract/test_editor_facade.py +349 -0
- cutecanvas-1.0.0/tests/editor/contract/test_editor_policy.py +106 -0
- cutecanvas-1.0.0/tests/editor/contract/test_feature_config_descriptors.py +60 -0
- cutecanvas-1.0.0/tests/editor/contract/test_feature_config_validation.py +232 -0
- cutecanvas-1.0.0/tests/editor/contract/test_feature_config_view.py +102 -0
- cutecanvas-1.0.0/tests/editor/contract/test_package_import_order.py +45 -0
- cutecanvas-1.0.0/tests/editor/contract/test_performance_isolation.py +58 -0
- cutecanvas-1.0.0/tests/editor/contract/test_public_api.py +282 -0
- cutecanvas-1.0.0/tests/editor/contract/test_viewport_activation_policy.py +50 -0
- cutecanvas-1.0.0/tests/editor/integration/test_active_raster_coordinates.py +90 -0
- cutecanvas-1.0.0/tests/editor/integration/test_cycle_interaction_mode.py +159 -0
- cutecanvas-1.0.0/tests/editor/integration/test_diagnostics.py +413 -0
- cutecanvas-1.0.0/tests/editor/integration/test_editor_overlay_performance.py +70 -0
- cutecanvas-1.0.0/tests/editor/integration/test_fallbacks.py +70 -0
- cutecanvas-1.0.0/tests/editor/integration/test_feature_coordinator.py +92 -0
- cutecanvas-1.0.0/tests/editor/integration/test_headroom_monitor.py +257 -0
- cutecanvas-1.0.0/tests/editor/integration/test_navigation_trace.py +261 -0
- cutecanvas-1.0.0/tests/editor/integration/test_operation_resolution.py +324 -0
- cutecanvas-1.0.0/tests/editor/integration/test_scene_phase8.py +258 -0
- cutecanvas-1.0.0/tests/editor/integration/test_source_capabilities.py +120 -0
- cutecanvas-1.0.0/tests/editor/integration/test_sparse_raster_grid.py +107 -0
- cutecanvas-1.0.0/tests/editor/integration/test_ui_helpers.py +121 -0
- cutecanvas-1.0.0/tests/editor/packaging/test_cutecanvas_packaging.py +109 -0
- cutecanvas-1.0.0/tests/editor/qt/test_editor_cursor_theme.py +156 -0
- cutecanvas-1.0.0/tests/editor/qt/test_editor_lifecycle.py +83 -0
- cutecanvas-1.0.0/tests/editor/qt/test_erase_cursor_feedback.py +231 -0
- cutecanvas-1.0.0/tests/editor/qt/test_overlays.py +61 -0
- cutecanvas-1.0.0/tests/editor/qt/test_pointer_input.py +1388 -0
- cutecanvas-1.0.0/tests/editor/qt/test_viewport.py +221 -0
- cutecanvas-1.0.0/tests/editor/unit/test_edit_session_coordination.py +225 -0
- cutecanvas-1.0.0/tests/editor/unit/test_provisional_history.py +104 -0
- cutecanvas-1.0.0/tests/masks/abuse/test_hybrid_mask_edit_continuity.py +310 -0
- cutecanvas-1.0.0/tests/masks/abuse/test_hybrid_mask_rendering_abuse.py +862 -0
- cutecanvas-1.0.0/tests/masks/abuse/test_mask_abuse_harness.py +1690 -0
- cutecanvas-1.0.0/tests/masks/abuse/test_mask_tool_composition_abuse.py +610 -0
- cutecanvas-1.0.0/tests/masks/integration/test_coverage_boundary.py +72 -0
- cutecanvas-1.0.0/tests/masks/integration/test_coverage_canvas_aperture.py +287 -0
- cutecanvas-1.0.0/tests/masks/integration/test_coverage_document.py +346 -0
- cutecanvas-1.0.0/tests/masks/integration/test_coverage_filters.py +173 -0
- cutecanvas-1.0.0/tests/masks/integration/test_coverage_operations.py +99 -0
- cutecanvas-1.0.0/tests/masks/integration/test_coverage_spatial_constraints.py +76 -0
- cutecanvas-1.0.0/tests/masks/integration/test_coverage_surface.py +173 -0
- cutecanvas-1.0.0/tests/masks/integration/test_host_mask_admission_history.py +113 -0
- cutecanvas-1.0.0/tests/masks/integration/test_live_mask_feedback.py +1100 -0
- cutecanvas-1.0.0/tests/masks/integration/test_mask_canvas_aperture.py +392 -0
- cutecanvas-1.0.0/tests/masks/integration/test_mask_diagnostics.py +60 -0
- cutecanvas-1.0.0/tests/masks/integration/test_mask_image_ops.py +133 -0
- cutecanvas-1.0.0/tests/masks/integration/test_mask_patch_history.py +98 -0
- cutecanvas-1.0.0/tests/masks/integration/test_mask_projection.py +227 -0
- cutecanvas-1.0.0/tests/masks/integration/test_mask_render_geometry.py +511 -0
- cutecanvas-1.0.0/tests/masks/integration/test_mask_service_io.py +421 -0
- cutecanvas-1.0.0/tests/masks/integration/test_mask_service_prefetch.py +565 -0
- cutecanvas-1.0.0/tests/masks/integration/test_mask_tools.py +738 -0
- cutecanvas-1.0.0/tests/masks/integration/test_masking.py +44 -0
- cutecanvas-1.0.0/tests/masks/integration/test_shared_mask_view_invalidation.py +267 -0
- cutecanvas-1.0.0/tests/masks/integration/test_stale_mask_flash_diagnostic.py +184 -0
- cutecanvas-1.0.0/tests/masks/integration/test_vector_mask_cache.py +185 -0
- cutecanvas-1.0.0/tests/masks/performance/test_spatial_paint_latency.py +113 -0
- cutecanvas-1.0.0/tests/masks/qt/test_mask_cursor_refresh.py +50 -0
- cutecanvas-1.0.0/tests/masks/qt/test_mask_transform_rotation.py +367 -0
- cutecanvas-1.0.0/tests/masks/qt/test_mask_workflow_details.py +229 -0
- cutecanvas-1.0.0/tests/masks/qt/test_mask_workflows.py +3173 -0
- cutecanvas-1.0.0/tests/masks/qt/test_spatial_paint_handoff.py +106 -0
- cutecanvas-1.0.0/tests/painting/abuse/test_clone_stamp_abuse_harness.py +1294 -0
- cutecanvas-1.0.0/tests/painting/abuse/test_paint_abuse_harness.py +609 -0
- cutecanvas-1.0.0/tests/painting/abuse/test_pixel_move_abuse_harness.py +1095 -0
- cutecanvas-1.0.0/tests/painting/integration/test_clone_stamp_tool.py +267 -0
- cutecanvas-1.0.0/tests/painting/integration/test_color_raster_surface.py +65 -0
- cutecanvas-1.0.0/tests/painting/integration/test_editable_raster_asset_revisions.py +94 -0
- cutecanvas-1.0.0/tests/painting/integration/test_editable_raster_layers.py +394 -0
- cutecanvas-1.0.0/tests/painting/integration/test_floating_pixel_edits.py +466 -0
- cutecanvas-1.0.0/tests/painting/integration/test_flood_fill.py +135 -0
- cutecanvas-1.0.0/tests/painting/integration/test_paint_bucket_tool.py +54 -0
- cutecanvas-1.0.0/tests/painting/integration/test_painting_engine.py +1179 -0
- cutecanvas-1.0.0/tests/painting/integration/test_pixel_extraction.py +69 -0
- cutecanvas-1.0.0/tests/painting/integration/test_pixel_translation.py +244 -0
- cutecanvas-1.0.0/tests/painting/integration/test_qt_dab_painter.py +70 -0
- cutecanvas-1.0.0/tests/painting/integration/test_raster_surface_api.py +458 -0
- cutecanvas-1.0.0/tests/painting/performance/test_pixel_translation_performance.py +106 -0
- cutecanvas-1.0.0/tests/painting/qt/test_fill_workflows.py +162 -0
- cutecanvas-1.0.0/tests/rendering/abuse/test_large_raster_rendering_abuse.py +136 -0
- cutecanvas-1.0.0/tests/rendering/abuse/test_mask_transient_tile_demand.py +236 -0
- cutecanvas-1.0.0/tests/rendering/abuse/test_presentation_abuse_harness.py +522 -0
- cutecanvas-1.0.0/tests/rendering/contract/test_canvas_overlay_contracts.py +54 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_cache_coordinator.py +528 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_cache_settings.py +208 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_cache_usage_signals.py +120 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_canvas_grid_stability.py +194 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_layer_edge_modifications.py +289 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_layer_mapping_preview.py +167 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_pyramid_cache_eviction.py +97 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_pyramid_manager.py +138 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_renderer_perf_guard.py +55 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_renderer_scroll_buffers.py +1390 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_renderer_strategy_dispatch.py +133 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_sampled_transition_tiles.py +222 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_scene_layer_scope.py +60 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_tiles_cache_eviction.py +91 -0
- cutecanvas-1.0.0/tests/rendering/integration/test_tiles_manager.py +222 -0
- cutecanvas-1.0.0/tests/rendering/qt/test_canvas_comparison_presentation.py +843 -0
- cutecanvas-1.0.0/tests/rendering/qt/test_canvas_viewport_specs.py +235 -0
- cutecanvas-1.0.0/tests/sam/contract/test_mask_sampling_policy.py +82 -0
- cutecanvas-1.0.0/tests/sam/integration/test_sam_cache_consumer.py +213 -0
- cutecanvas-1.0.0/tests/sam/integration/test_sam_feature.py +501 -0
- cutecanvas-1.0.0/tests/sam/integration/test_sam_manager.py +564 -0
- cutecanvas-1.0.0/tests/sam/integration/test_sam_service.py +406 -0
- cutecanvas-1.0.0/tests/sam/integration/test_sam_tools.py +391 -0
- cutecanvas-1.0.0/tests/sam/integration/test_smart_segmentation_tools.py +155 -0
- cutecanvas-1.0.0/tests/selection/integration/test_fragment_projection.py +50 -0
- cutecanvas-1.0.0/tests/selection/integration/test_pixel_selection.py +238 -0
- cutecanvas-1.0.0/tests/selection/integration/test_pixel_selection_modifications.py +378 -0
- cutecanvas-1.0.0/tests/selection/integration/test_selected_pixel_movement.py +999 -0
- cutecanvas-1.0.0/tests/selection/integration/test_selection_geometry.py +78 -0
- cutecanvas-1.0.0/tests/selection/integration/test_selection_modification_products.py +164 -0
- cutecanvas-1.0.0/tests/selection/integration/test_selection_projection.py +292 -0
- cutecanvas-1.0.0/tests/selection/integration/test_selection_tools.py +537 -0
- cutecanvas-1.0.0/tests/selection/integration/test_selection_translation_interaction.py +106 -0
- cutecanvas-1.0.0/tests/tools/abuse/test_affine_transform_abuse_harness.py +774 -0
- cutecanvas-1.0.0/tests/tools/abuse/test_authoring_snapping_abuse.py +443 -0
- cutecanvas-1.0.0/tests/tools/abuse/test_placed_asset_abuse_harness.py +302 -0
- cutecanvas-1.0.0/tests/tools/abuse/test_shared_edge_group_abuse.py +106 -0
- cutecanvas-1.0.0/tests/tools/abuse/test_snapping_abuse_harness.py +418 -0
- cutecanvas-1.0.0/tests/tools/abuse/test_transform_snapping_abuse.py +91 -0
- cutecanvas-1.0.0/tests/tools/abuse/test_vector_abuse_harness.py +1013 -0
- cutecanvas-1.0.0/tests/tools/integration/test_authoring_snap_resolution.py +274 -0
- cutecanvas-1.0.0/tests/tools/integration/test_document_export_snapshots.py +90 -0
- cutecanvas-1.0.0/tests/tools/integration/test_host_layer_authoring.py +344 -0
- cutecanvas-1.0.0/tests/tools/integration/test_move_correctness_regressions.py +149 -0
- cutecanvas-1.0.0/tests/tools/integration/test_move_layer_sets.py +264 -0
- cutecanvas-1.0.0/tests/tools/integration/test_move_snapping_regressions.py +98 -0
- cutecanvas-1.0.0/tests/tools/integration/test_move_tool.py +320 -0
- cutecanvas-1.0.0/tests/tools/integration/test_movement_snapping.py +465 -0
- cutecanvas-1.0.0/tests/tools/integration/test_oriented_edge_snapping.py +149 -0
- cutecanvas-1.0.0/tests/tools/integration/test_placed_assets.py +293 -0
- cutecanvas-1.0.0/tests/tools/integration/test_polygon_coverage_authoring.py +93 -0
- cutecanvas-1.0.0/tests/tools/integration/test_polygon_coverage_tool.py +232 -0
- cutecanvas-1.0.0/tests/tools/integration/test_rail_snapping.py +215 -0
- cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_corner_topology.py +135 -0
- cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_discovery.py +311 -0
- cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_endpoint_snapping.py +118 -0
- cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_geometry.py +401 -0
- cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_presentation.py +103 -0
- cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_resize_tool.py +263 -0
- cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_translation.py +151 -0
- cutecanvas-1.0.0/tests/tools/integration/test_snapping_engine.py +298 -0
- cutecanvas-1.0.0/tests/tools/integration/test_tool_manager.py +394 -0
- cutecanvas-1.0.0/tests/tools/integration/test_transform_snap_resolution.py +344 -0
- cutecanvas-1.0.0/tests/tools/integration/test_transform_tool.py +197 -0
- cutecanvas-1.0.0/tests/tools/integration/test_vector_editor.py +387 -0
- cutecanvas-1.0.0/tests/tools/integration/test_vector_text.py +248 -0
- cutecanvas-1.0.0/tests/tools/integration/test_vector_tools.py +213 -0
- cutecanvas-1.0.0/tests/tools/performance/test_oriented_edge_index_performance.py +58 -0
- cutecanvas-1.0.0/tests/tools/performance/test_shared_edge_session_performance.py +110 -0
- cutecanvas-1.0.0/tests/tools/performance/test_shared_edge_translation_performance.py +150 -0
- cutecanvas-1.0.0/tests/tools/qt/test_angled_shared_edge_resize.py +284 -0
- cutecanvas-1.0.0/tests/tools/qt/test_authoring_snap_input.py +177 -0
- cutecanvas-1.0.0/tests/tools/qt/test_bounded_transform_interop.py +305 -0
- cutecanvas-1.0.0/tests/tools/qt/test_polygon_coverage.py +113 -0
- cutecanvas-1.0.0/tests/tools/qt/test_shared_edge_corner_interaction.py +192 -0
- cutecanvas-1.0.0/tests/tools/qt/test_shared_edge_endpoint_continuity.py +242 -0
- cutecanvas-1.0.0/tests/tools/qt/test_shared_edge_feedback.py +56 -0
- cutecanvas-1.0.0/tests/tools/qt/test_shared_edge_groups.py +239 -0
- cutecanvas-1.0.0/tests/tools/qt/test_shared_edge_resize.py +833 -0
- cutecanvas-1.0.0/tests/tools/qt/test_transform_snapping.py +301 -0
- cutecanvas-1.0.0/tests/tools/qt/test_transient_tool_input.py +168 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# CuteCanvas Package Guidance
|
|
2
|
+
|
|
3
|
+
The root `AGENTS.md` applies. This file defines CuteCanvas's local ownership and
|
|
4
|
+
proof requirements.
|
|
5
|
+
|
|
6
|
+
## Product identity
|
|
7
|
+
|
|
8
|
+
CuteCanvas is a performant embeddable PySide6 graphics editor. Its public
|
|
9
|
+
facade makes document, layer, and tool workflows coherent without concentrating
|
|
10
|
+
behavior in one widget or service graph.
|
|
11
|
+
|
|
12
|
+
## Ownership
|
|
13
|
+
|
|
14
|
+
CuteCanvas owns:
|
|
15
|
+
|
|
16
|
+
- independent document identity, canvas, metadata, persistence, and export;
|
|
17
|
+
- ordered editable layer instances, resource identity, sharing, and lifetimes;
|
|
18
|
+
- host capability policy, durable user locks, and one operation resolver;
|
|
19
|
+
- unified chronological undo/redo and atomic edit transactions;
|
|
20
|
+
- editable raster and coverage storage, masks, selections, and painting;
|
|
21
|
+
- placed- and smart-asset provenance, conversion, rasterization, and publication
|
|
22
|
+
workflows;
|
|
23
|
+
- vector revision authoring around immutable semantic vector values;
|
|
24
|
+
- authored-effect resources, source/graph persistence, model interaction,
|
|
25
|
+
package trust and resolution, generated controls, preview admission,
|
|
26
|
+
diagnostics, and undoable effect revisions;
|
|
27
|
+
- layer and pixel movement, floating edits, free transforms, authoring tools,
|
|
28
|
+
options, overlays, and transient feedback; and
|
|
29
|
+
- autosave, failure recovery, and SAM integration.
|
|
30
|
+
|
|
31
|
+
## Internal ownership boundaries
|
|
32
|
+
|
|
33
|
+
Tools translate input into commands and UI objects present state. Neither owns
|
|
34
|
+
durable document, selection, geometry, pixel, history, permission, or rendering
|
|
35
|
+
state. Every durable edit uses the document's single history. Host policy and
|
|
36
|
+
user locks remain separate inputs to the one operation resolver.
|
|
37
|
+
|
|
38
|
+
`SnapConfiguration` owns durable policy, guides, and grid settings.
|
|
39
|
+
`SnapCandidateProvider` captures stationary scene targets once per gesture.
|
|
40
|
+
Movement and geometric authoring use separate session resolvers.
|
|
41
|
+
`SnapGuideFeedback` owns transient guide presentation. `SnappingSubsystem`
|
|
42
|
+
constructs these collaborators at the editor lifecycle boundary. Shape and path
|
|
43
|
+
tools own their gesture lifecycle and delegate coordinates through their
|
|
44
|
+
authoring port; freehand tools, painting, fills, and intelligent selection do
|
|
45
|
+
not receive that port.
|
|
46
|
+
|
|
47
|
+
Retained pixel-selection and mask shapes delegate canvas clipping and preview
|
|
48
|
+
projection to `CoverageCanvasAperture`. `ActiveMaskCanvasAperture` owns
|
|
49
|
+
mask-specific aperture geometry. Tools do not reproduce either concern.
|
|
50
|
+
|
|
51
|
+
`SceneLayerSelectionController` owns an ordered selection with the active member
|
|
52
|
+
last. `SceneLayerMoveController` owns translation-only layer-set sessions.
|
|
53
|
+
`SceneLayerTransformController` owns single-layer affine transforms.
|
|
54
|
+
`SceneLayerMappingPreview` presents affine, projective, piecewise, or bilinear
|
|
55
|
+
workflows as one coherent transient set. `LayerMappingMutationOwner` commits exact mapping sets
|
|
56
|
+
through one layer-store publication and one history edit.
|
|
57
|
+
|
|
58
|
+
Axis snapping retains its optimized scalar path. Oriented snapping uses exact
|
|
59
|
+
finite manipulation edges, a frozen spatial index, deterministic ranking, and
|
|
60
|
+
device-pixel thresholds. Shared-edge resize infers one current seam between
|
|
61
|
+
exactly two eligible layers. Midpoint drags derive both affine previews from one
|
|
62
|
+
scalar. A common-corner endpoint pivots only along the continuous rail shared by
|
|
63
|
+
both participants and derives paired piecewise previews from immutable bases.
|
|
64
|
+
Both operations commit or cancel atomically. Alpha contours never define the
|
|
65
|
+
seam, and interaction never resamples or bakes layer pixels.
|
|
66
|
+
|
|
67
|
+
## Facade and public surface
|
|
68
|
+
|
|
69
|
+
The editor facade is the obvious starting point for integration. Common document,
|
|
70
|
+
layer, and tool workflows require no construction of internal controllers or
|
|
71
|
+
knowledge of storage, rendering, history, or scheduling internals. Expose typed
|
|
72
|
+
document and layer handles with focused document, layer, tool, selection,
|
|
73
|
+
history, and export subfacades. Avoid routine raw identifier pairs, private
|
|
74
|
+
collaborator access, service locators, and a god widget. Programmer errors fail
|
|
75
|
+
clearly; unavailable operations return stable reasons and available alternatives.
|
|
76
|
+
|
|
77
|
+
`src/cutecanvas/cutecanvas.pyi` is CuteCanvas's authoritative typed contract.
|
|
78
|
+
Public changes update it, the implementation, CuteCanvas documentation, and
|
|
79
|
+
`packages/cutecanvas/examples/cutecanvas_demo.py` together. The demo is a coherent layered editor
|
|
80
|
+
with an intentional canvas, tools and options, layer tree, selections,
|
|
81
|
+
transforms, painting, masks, raster/vector/placed layers, undo/redo, and
|
|
82
|
+
persistence rather than a collection of test panels.
|
|
83
|
+
|
|
84
|
+
## Test organization and proof
|
|
85
|
+
|
|
86
|
+
Organize CuteCanvas tests by the behavior owners for facade and public contracts,
|
|
87
|
+
documents and resources, history and transactions, layers and groups, selections
|
|
88
|
+
and masks, raster and vector authoring, painting, movement and transforms, tools
|
|
89
|
+
and policy, authored effects, persistence and recovery, mounted editor workflows,
|
|
90
|
+
and packaging.
|
|
91
|
+
|
|
92
|
+
`packages/cutecanvas/TEST_POLICY.toml` maps every CuteCanvas production area and
|
|
93
|
+
public boundary to its required test areas. Changes to durable state, mutation,
|
|
94
|
+
history, policy, authoring, persistence, recovery, facade, or workflow contracts
|
|
95
|
+
update that map in the same work.
|
|
96
|
+
|
|
97
|
+
Every durable mutation proves success, rejection atomicity, chronological undo,
|
|
98
|
+
redo, and restored observable state. Persistence proof covers canonical round
|
|
99
|
+
trips, unavailable resources, interrupted writes, recovery, and preservation of
|
|
100
|
+
valid prior state. Authored-effect proof covers source and graph coordination,
|
|
101
|
+
package and capability admission, generated controls, diagnostics, preview,
|
|
102
|
+
transactional patches, undo, and retention of unavailable operations.
|
|
103
|
+
|
|
104
|
+
Mounted workflow proof uses real editor widgets for input routing, tool
|
|
105
|
+
lifecycle, overlays, repaint, focus, publication, and teardown. Abuse proof
|
|
106
|
+
covers rapid document switching, edit/undo chains, input storms, stale work,
|
|
107
|
+
source removal, cache pressure, large and sparse content, persistence failure,
|
|
108
|
+
and redraw equality. Performance proof covers interactive latency, bounded
|
|
109
|
+
memory, invalidation scope, painting, transforms, history, and large-document
|
|
110
|
+
workflows. Packaging proof installs the product with only declared dependencies
|
|
111
|
+
and exercises its supported facade.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
product = "cutecanvas"
|
|
3
|
+
|
|
4
|
+
[[debts]]
|
|
5
|
+
id = "CUTECANVAS-ARCH-001"
|
|
6
|
+
owner = "CuteCanvas raster facade"
|
|
7
|
+
paths = ["packages/cutecanvas/src/cutecanvas/facade/raster_api.py"]
|
|
8
|
+
fingerprint = "sha256:f8230c1164a23b016b27956be3dc1b2a1def96665e5a2fdaa39d57206ab5f346"
|
|
9
|
+
issue = "chore:CUTECANVAS-ARCH-001"
|
|
10
|
+
review_by = 2026-12-15
|
|
11
|
+
responsibilities = [
|
|
12
|
+
"editable raster layer and extent APIs",
|
|
13
|
+
"painting, brush, clone, and fill APIs",
|
|
14
|
+
"floating pixel and scene edit history APIs",
|
|
15
|
+
]
|
|
16
|
+
next_extraction = "Extract brush, clone, fill, color, and paint-target workflows into a focused painting facade mixin."
|
|
17
|
+
|
|
18
|
+
[[debts]]
|
|
19
|
+
id = "CUTECANVAS-ARCH-002"
|
|
20
|
+
owner = "CuteCanvas mask editing"
|
|
21
|
+
paths = ["packages/cutecanvas/src/cutecanvas/masks/edit_service.py"]
|
|
22
|
+
fingerprint = "sha256:da5588d3eeba1e38f5ee917dcd82632f4e1d2c97376b82272d7964dd2c44eef9"
|
|
23
|
+
issue = "chore:CUTECANVAS-ARCH-002"
|
|
24
|
+
review_by = 2026-12-15
|
|
25
|
+
responsibilities = [
|
|
26
|
+
"mask epoch and cancellation state",
|
|
27
|
+
"stroke preparation and patch commit",
|
|
28
|
+
"history presentation, undo, and redo coordination",
|
|
29
|
+
"coverage, image, and surface application",
|
|
30
|
+
]
|
|
31
|
+
next_extraction = "Move direct stroke sessions, coverage application, and rasterization behind focused mutation owners and leave this service coordinating their transactions."
|
|
32
|
+
|
|
33
|
+
[[debts]]
|
|
34
|
+
id = "CUTECANVAS-ARCH-003"
|
|
35
|
+
owner = "CuteCanvas mask integration"
|
|
36
|
+
paths = ["packages/cutecanvas/src/cutecanvas/masks/mask_service.py"]
|
|
37
|
+
fingerprint = "sha256:89b5477ed2610b64d78739904e9dc7e83c856476e3f2031e263edcd81c81ef29"
|
|
38
|
+
issue = "chore:CUTECANVAS-ARCH-003"
|
|
39
|
+
review_by = 2026-12-15
|
|
40
|
+
responsibilities = [
|
|
41
|
+
"asset, layer, activation, and edit workflow facade delegation",
|
|
42
|
+
"render cache, prefetch, and invalidation routing",
|
|
43
|
+
"generated-mask application and projection delegation",
|
|
44
|
+
"autosave, configuration, file workflow, and diagnostics delegation",
|
|
45
|
+
]
|
|
46
|
+
next_extraction = "Extract render scheduling, invalidation, prefetch, and generated-mask delegation into a focused mask presentation service."
|
|
47
|
+
|
|
48
|
+
[[debts]]
|
|
49
|
+
id = "CUTECANVAS-ARCH-004"
|
|
50
|
+
owner = "CuteCanvas mask presentation cache"
|
|
51
|
+
paths = ["packages/cutecanvas/src/cutecanvas/masks/render_cache.py"]
|
|
52
|
+
fingerprint = "sha256:e3ab8ec629287eaf9797d81c3eefbea67fe714d7cb0c149fa0d0ed334635178d"
|
|
53
|
+
issue = "chore:CUTECANVAS-ARCH-004"
|
|
54
|
+
review_by = 2026-12-15
|
|
55
|
+
responsibilities = [
|
|
56
|
+
"render product cache admission and eviction",
|
|
57
|
+
"live-preview raster, patch, and geometry presentation",
|
|
58
|
+
"asynchronous prefetch and native product adoption",
|
|
59
|
+
"regional and history-driven presentation metrics",
|
|
60
|
+
]
|
|
61
|
+
next_extraction = "Extract live-preview raster storage, stride policy, composition, invalidation, and settlement into a dedicated live-preview cache owner."
|
|
62
|
+
|
|
63
|
+
[[debts]]
|
|
64
|
+
id = "CUTECANVAS-ARCH-005"
|
|
65
|
+
owner = "CuteCanvas mask render work"
|
|
66
|
+
paths = ["packages/cutecanvas/src/cutecanvas/masks/render_coordination.py"]
|
|
67
|
+
fingerprint = "sha256:8a461e96b04c0fc502226bf23f4ae22bf4896f0c1104c960750e036374af8b85"
|
|
68
|
+
issue = "chore:CUTECANVAS-ARCH-005"
|
|
69
|
+
review_by = 2026-12-15
|
|
70
|
+
responsibilities = [
|
|
71
|
+
"overlay prefetch scheduling",
|
|
72
|
+
"regional snippet work",
|
|
73
|
+
"asynchronous colorization requests",
|
|
74
|
+
"deferred publication and diagnostics",
|
|
75
|
+
]
|
|
76
|
+
next_extraction = "Extract scale resolution, prefetch request batching, cancellation, completion adoption, and prefetch statistics into a prefetch coordinator."
|
|
77
|
+
|
|
78
|
+
[[debts]]
|
|
79
|
+
id = "CUTECANVAS-ARCH-006"
|
|
80
|
+
owner = "CuteCanvas mask workflow"
|
|
81
|
+
paths = ["packages/cutecanvas/src/cutecanvas/masks/workflow.py"]
|
|
82
|
+
fingerprint = "sha256:1c11fa324d437b87be85a5eb5b774ebce108bc46430407a158e7a0a680406840"
|
|
83
|
+
issue = "chore:CUTECANVAS-ARCH-006"
|
|
84
|
+
review_by = 2026-12-15
|
|
85
|
+
responsibilities = [
|
|
86
|
+
"mask facade and feature lifecycle",
|
|
87
|
+
"undo and edit API delegation",
|
|
88
|
+
"SAM workflow integration",
|
|
89
|
+
"activation, configuration, and diagnostics assembly",
|
|
90
|
+
]
|
|
91
|
+
next_extraction = "Move SAM manager attachment, predictor reset, generated-mask application, and availability delegation into a SAM-owned workflow module."
|
|
92
|
+
|
|
93
|
+
[[debts]]
|
|
94
|
+
id = "CUTECANVAS-ARCH-007"
|
|
95
|
+
owner = "CuteCanvas persistence"
|
|
96
|
+
paths = ["packages/cutecanvas/src/cutecanvas/persistence/codec.py"]
|
|
97
|
+
fingerprint = "sha256:80f99c91bd78f57007de9e2161863c8c7fa3273ce12d680cf47e51b48f202fe7"
|
|
98
|
+
issue = "chore:CUTECANVAS-ARCH-007"
|
|
99
|
+
review_by = 2026-12-15
|
|
100
|
+
responsibilities = [
|
|
101
|
+
"archive container IO and version dispatch",
|
|
102
|
+
"composition document table and root assembly",
|
|
103
|
+
"raster, coverage, placed, mask, and vector resource codecs",
|
|
104
|
+
"resource reference and archive graph validation",
|
|
105
|
+
]
|
|
106
|
+
next_extraction = "Extract placed and raster resource encoders and decoders behind typed resource codec owners."
|
|
107
|
+
|
|
108
|
+
[[debts]]
|
|
109
|
+
id = "CUTECANVAS-ARCH-008"
|
|
110
|
+
owner = "CuteCanvas document events"
|
|
111
|
+
paths = ["packages/cutecanvas/src/cutecanvas/runtime/document_events.py"]
|
|
112
|
+
fingerprint = "sha256:fe4f93aee803d1e9ded7c9bfeb767c912e4a96afde3251cb492f4ad1bc4c948d"
|
|
113
|
+
issue = "chore:CUTECANVAS-ARCH-008"
|
|
114
|
+
review_by = 2026-12-15
|
|
115
|
+
responsibilities = [
|
|
116
|
+
"composition and scene publication",
|
|
117
|
+
"resource completion and pixel-content change handling",
|
|
118
|
+
"selection, paint-target, and vector synchronization",
|
|
119
|
+
"viewport and diagnostics propagation",
|
|
120
|
+
]
|
|
121
|
+
next_extraction = "Extract vector selection, node selection, text edit, option, and content publication into a vector document-event owner."
|
|
122
|
+
|
|
123
|
+
[[debts]]
|
|
124
|
+
id = "CUTECANVAS-ARCH-009"
|
|
125
|
+
owner = "CuteCanvas runtime lifecycle"
|
|
126
|
+
paths = ["packages/cutecanvas/src/cutecanvas/runtime/lifecycle.py"]
|
|
127
|
+
fingerprint = "sha256:27dafe82277e8b501415aaa0ecac8562f9843d2197e7bd354799d3a7d419bfcd"
|
|
128
|
+
issue = "chore:CUTECANVAS-ARCH-009"
|
|
129
|
+
review_by = 2026-12-15
|
|
130
|
+
responsibilities = [
|
|
131
|
+
"core component construction and signal wiring",
|
|
132
|
+
"mask, SAM, and autosave manager attachment",
|
|
133
|
+
"viewport, navigation, and rendering facade delegation",
|
|
134
|
+
"cursor, diagnostics, and cache lifecycle",
|
|
135
|
+
]
|
|
136
|
+
next_extraction = "Extract mask, SAM, and autosave attachment, detachment, shutdown, and feature reconciliation into a feature lifecycle owner."
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
product = "cutecanvas"
|
|
3
|
+
|
|
4
|
+
[[waivers]]
|
|
5
|
+
id = "CUTECANVAS-WAIVER-001"
|
|
6
|
+
issue = "chore:CUTECANVAS-WAIVER-001"
|
|
7
|
+
owner = "CuteCanvas widget boundary"
|
|
8
|
+
rule = "STRUCT003"
|
|
9
|
+
path = "packages/cutecanvas/src/cutecanvas/canvas.py"
|
|
10
|
+
kind = "structural"
|
|
11
|
+
justification = "CuteCanvas is the single mounted-widget boundary that delegates Qt lifecycle and input events and paints the editor's interaction overlays."
|
|
12
|
+
review_by = 2026-12-15
|
|
13
|
+
max_lines = 596
|
|
14
|
+
|
|
15
|
+
[[waivers]]
|
|
16
|
+
id = "CUTECANVAS-WAIVER-002"
|
|
17
|
+
issue = "chore:CUTECANVAS-WAIVER-002"
|
|
18
|
+
owner = "CuteCanvas composition layers"
|
|
19
|
+
rule = "STRUCT003"
|
|
20
|
+
path = "packages/cutecanvas/src/cutecanvas/composition/layers.py"
|
|
21
|
+
kind = "structural"
|
|
22
|
+
justification = "CompositionLayerStore is the authoritative owner for layer instance state, ordering, indexes, revisions, validation, and change publication."
|
|
23
|
+
review_by = 2026-12-15
|
|
24
|
+
max_lines = 523
|
|
25
|
+
|
|
26
|
+
[[waivers]]
|
|
27
|
+
id = "CUTECANVAS-WAIVER-003"
|
|
28
|
+
issue = "chore:CUTECANVAS-WAIVER-003"
|
|
29
|
+
owner = "CuteCanvas coverage storage"
|
|
30
|
+
rule = "STRUCT003"
|
|
31
|
+
path = "packages/cutecanvas/src/cutecanvas/coverage/surface.py"
|
|
32
|
+
kind = "structural"
|
|
33
|
+
justification = "CoverageSurface is the authoritative state owner for mutable coverage storage, bounds, revisions, snapshots, writable regions, and representation conversion."
|
|
34
|
+
review_by = 2026-12-15
|
|
35
|
+
max_lines = 637
|
|
36
|
+
|
|
37
|
+
[[waivers]]
|
|
38
|
+
id = "CUTECANVAS-WAIVER-004"
|
|
39
|
+
issue = "chore:CUTECANVAS-WAIVER-004"
|
|
40
|
+
owner = "CuteCanvas editor composition"
|
|
41
|
+
rule = "STRUCT003"
|
|
42
|
+
path = "packages/cutecanvas/src/cutecanvas/editor/composition_root.py"
|
|
43
|
+
kind = "structural"
|
|
44
|
+
justification = "EditorCompositionRoot has one assembly responsibility: construct, wire, and return the complete authoritative editor component graph from explicit inputs."
|
|
45
|
+
review_by = 2026-12-15
|
|
46
|
+
max_lines = 731
|
|
47
|
+
|
|
48
|
+
[[waivers]]
|
|
49
|
+
id = "CUTECANVAS-WAIVER-005"
|
|
50
|
+
issue = "chore:CUTECANVAS-WAIVER-005"
|
|
51
|
+
owner = "CuteCanvas composition facade"
|
|
52
|
+
rule = "STRUCT003"
|
|
53
|
+
path = "packages/cutecanvas/src/cutecanvas/facade/composition_api.py"
|
|
54
|
+
kind = "structural"
|
|
55
|
+
justification = "CompositionApiMixin is the single public task-oriented facade for composition state, layer placement, selection, scene inspection, and composition lifecycle."
|
|
56
|
+
review_by = 2026-12-15
|
|
57
|
+
max_lines = 567
|
|
58
|
+
|
|
59
|
+
[[waivers]]
|
|
60
|
+
id = "CUTECANVAS-WAIVER-006"
|
|
61
|
+
issue = "chore:CUTECANVAS-WAIVER-006"
|
|
62
|
+
owner = "CuteCanvas raster facade"
|
|
63
|
+
rule = "STRUCT003"
|
|
64
|
+
path = "packages/cutecanvas/src/cutecanvas/facade/raster_api.py"
|
|
65
|
+
kind = "remediation"
|
|
66
|
+
justification = "Raster layer, painting, floating-pixel, and edit-history APIs remain mixed pending painting facade extraction."
|
|
67
|
+
review_by = 2026-12-15
|
|
68
|
+
max_lines = 599
|
|
69
|
+
next_limit = 390
|
|
70
|
+
debt = "CUTECANVAS-ARCH-001"
|
|
71
|
+
|
|
72
|
+
[[waivers]]
|
|
73
|
+
id = "CUTECANVAS-WAIVER-007"
|
|
74
|
+
issue = "chore:CUTECANVAS-WAIVER-007"
|
|
75
|
+
owner = "CuteCanvas mask autosave"
|
|
76
|
+
rule = "STRUCT003"
|
|
77
|
+
path = "packages/cutecanvas/src/cutecanvas/masks/autosave.py"
|
|
78
|
+
kind = "structural"
|
|
79
|
+
justification = "AutosaveManager is the sole lifecycle owner for mask save coalescing, scheduling, request identity, encoding outcomes, retries, cancellation, and save diagnostics."
|
|
80
|
+
review_by = 2026-12-15
|
|
81
|
+
max_lines = 517
|
|
82
|
+
|
|
83
|
+
[[waivers]]
|
|
84
|
+
id = "CUTECANVAS-WAIVER-008"
|
|
85
|
+
issue = "chore:CUTECANVAS-WAIVER-008"
|
|
86
|
+
owner = "CuteCanvas mask editing"
|
|
87
|
+
rule = "STRUCT003"
|
|
88
|
+
path = "packages/cutecanvas/src/cutecanvas/masks/edit_service.py"
|
|
89
|
+
kind = "remediation"
|
|
90
|
+
justification = "Stroke mutation, epoch, history, and coverage responsibilities remain mixed until history behavior is fully extracted."
|
|
91
|
+
review_by = 2026-12-15
|
|
92
|
+
max_lines = 655
|
|
93
|
+
next_limit = 480
|
|
94
|
+
debt = "CUTECANVAS-ARCH-002"
|
|
95
|
+
|
|
96
|
+
[[waivers]]
|
|
97
|
+
id = "CUTECANVAS-WAIVER-010"
|
|
98
|
+
issue = "chore:CUTECANVAS-WAIVER-010"
|
|
99
|
+
owner = "CuteCanvas mask presentation cache"
|
|
100
|
+
rule = "STRUCT003"
|
|
101
|
+
path = "packages/cutecanvas/src/cutecanvas/masks/render_cache.py"
|
|
102
|
+
kind = "remediation"
|
|
103
|
+
justification = "Cache, live-preview, background colorization, and regional presentation state remain mixed pending live-preview extraction."
|
|
104
|
+
review_by = 2026-12-15
|
|
105
|
+
max_lines = 1253
|
|
106
|
+
next_limit = 980
|
|
107
|
+
debt = "CUTECANVAS-ARCH-004"
|
|
108
|
+
|
|
109
|
+
[[waivers]]
|
|
110
|
+
id = "CUTECANVAS-WAIVER-011"
|
|
111
|
+
issue = "chore:CUTECANVAS-WAIVER-011"
|
|
112
|
+
owner = "CuteCanvas mask render work"
|
|
113
|
+
rule = "STRUCT003"
|
|
114
|
+
path = "packages/cutecanvas/src/cutecanvas/masks/render_coordination.py"
|
|
115
|
+
kind = "remediation"
|
|
116
|
+
justification = "Prefetch, snippet, colorize, deferred publication, and diagnostics lifecycles remain mixed pending prefetch extraction."
|
|
117
|
+
review_by = 2026-12-15
|
|
118
|
+
max_lines = 781
|
|
119
|
+
next_limit = 560
|
|
120
|
+
debt = "CUTECANVAS-ARCH-005"
|
|
121
|
+
|
|
122
|
+
[[waivers]]
|
|
123
|
+
id = "CUTECANVAS-WAIVER-012"
|
|
124
|
+
issue = "chore:CUTECANVAS-WAIVER-012"
|
|
125
|
+
owner = "CuteCanvas mask strokes"
|
|
126
|
+
rule = "STRUCT003"
|
|
127
|
+
path = "packages/cutecanvas/src/cutecanvas/masks/strokes.py"
|
|
128
|
+
kind = "structural"
|
|
129
|
+
justification = "MaskStrokePipeline is the sole state and lifecycle owner for segment submission, constraints, previews, job identity, result settlement, commit, cancellation, and stroke diagnostics."
|
|
130
|
+
review_by = 2026-12-15
|
|
131
|
+
max_lines = 795
|
|
132
|
+
|
|
133
|
+
[[waivers]]
|
|
134
|
+
id = "CUTECANVAS-WAIVER-013"
|
|
135
|
+
issue = "chore:CUTECANVAS-WAIVER-013"
|
|
136
|
+
owner = "CuteCanvas mask workflow"
|
|
137
|
+
rule = "STRUCT003"
|
|
138
|
+
path = "packages/cutecanvas/src/cutecanvas/masks/workflow.py"
|
|
139
|
+
kind = "remediation"
|
|
140
|
+
justification = "Mask facade, feature lifecycle, undo, SAM, activation, and diagnostics responsibilities remain mixed pending SAM workflow extraction."
|
|
141
|
+
review_by = 2026-12-15
|
|
142
|
+
max_lines = 710
|
|
143
|
+
next_limit = 610
|
|
144
|
+
debt = "CUTECANVAS-ARCH-006"
|
|
145
|
+
|
|
146
|
+
[[waivers]]
|
|
147
|
+
id = "CUTECANVAS-WAIVER-014"
|
|
148
|
+
issue = "chore:CUTECANVAS-WAIVER-014"
|
|
149
|
+
owner = "CuteCanvas brush interaction"
|
|
150
|
+
rule = "STRUCT003"
|
|
151
|
+
path = "packages/cutecanvas/src/cutecanvas/painting/tools/brush.py"
|
|
152
|
+
kind = "structural"
|
|
153
|
+
justification = "BrushTool is the single interaction owner for pointer samples, stroke smoothing, previews, cursor and overlay feedback, emission, cancellation, and undo admission."
|
|
154
|
+
review_by = 2026-12-15
|
|
155
|
+
max_lines = 631
|
|
156
|
+
|
|
157
|
+
[[waivers]]
|
|
158
|
+
id = "CUTECANVAS-WAIVER-015"
|
|
159
|
+
issue = "chore:CUTECANVAS-WAIVER-015"
|
|
160
|
+
owner = "CuteCanvas persistence"
|
|
161
|
+
rule = "STRUCT003"
|
|
162
|
+
path = "packages/cutecanvas/src/cutecanvas/persistence/codec.py"
|
|
163
|
+
kind = "remediation"
|
|
164
|
+
justification = "Archive IO, composition encoding, resource codecs, migration, and reference validation remain mixed pending typed resource codec extraction."
|
|
165
|
+
review_by = 2026-12-15
|
|
166
|
+
max_lines = 1069
|
|
167
|
+
next_limit = 980
|
|
168
|
+
debt = "CUTECANVAS-ARCH-007"
|
|
169
|
+
|
|
170
|
+
[[waivers]]
|
|
171
|
+
id = "CUTECANVAS-WAIVER-016"
|
|
172
|
+
issue = "chore:CUTECANVAS-WAIVER-016"
|
|
173
|
+
owner = "CuteCanvas placed assets"
|
|
174
|
+
rule = "STRUCT003"
|
|
175
|
+
path = "packages/cutecanvas/src/cutecanvas/placed/workflow.py"
|
|
176
|
+
kind = "structural"
|
|
177
|
+
justification = "PlacedAssetWorkflow is the authoritative request lifecycle for embedded, linked, duplicate, reload, relink, embed, cancellation, decode adoption, and failure publication."
|
|
178
|
+
review_by = 2026-12-15
|
|
179
|
+
max_lines = 578
|
|
180
|
+
|
|
181
|
+
[[waivers]]
|
|
182
|
+
id = "CUTECANVAS-WAIVER-017"
|
|
183
|
+
issue = "chore:CUTECANVAS-WAIVER-017"
|
|
184
|
+
owner = "CuteCanvas workspace presentation"
|
|
185
|
+
rule = "STRUCT003"
|
|
186
|
+
path = "packages/cutecanvas/src/cutecanvas/presentation/workspace.py"
|
|
187
|
+
kind = "structural"
|
|
188
|
+
justification = "CanvasWorkspace is the authoritative mounted-presentation lifecycle for document session layouts, target canvases, comparison surfaces, activation, reconciliation, and teardown."
|
|
189
|
+
review_by = 2026-12-15
|
|
190
|
+
max_lines = 642
|
|
191
|
+
|
|
192
|
+
[[waivers]]
|
|
193
|
+
id = "CUTECANVAS-WAIVER-018"
|
|
194
|
+
issue = "chore:CUTECANVAS-WAIVER-018"
|
|
195
|
+
owner = "CuteCanvas document events"
|
|
196
|
+
rule = "STRUCT003"
|
|
197
|
+
path = "packages/cutecanvas/src/cutecanvas/runtime/document_events.py"
|
|
198
|
+
kind = "remediation"
|
|
199
|
+
justification = "Document, resource, selection, vector, viewport, and diagnostics event propagation remain mixed pending vector event extraction."
|
|
200
|
+
review_by = 2026-12-15
|
|
201
|
+
max_lines = 595
|
|
202
|
+
next_limit = 440
|
|
203
|
+
debt = "CUTECANVAS-ARCH-008"
|
|
204
|
+
|
|
205
|
+
[[waivers]]
|
|
206
|
+
id = "CUTECANVAS-WAIVER-019"
|
|
207
|
+
issue = "chore:CUTECANVAS-WAIVER-019"
|
|
208
|
+
owner = "CuteCanvas runtime lifecycle"
|
|
209
|
+
rule = "STRUCT003"
|
|
210
|
+
path = "packages/cutecanvas/src/cutecanvas/runtime/lifecycle.py"
|
|
211
|
+
kind = "remediation"
|
|
212
|
+
justification = "Component construction, feature-manager attachment, viewport delegation, cursor, diagnostics, and cache lifecycles remain mixed pending feature lifecycle extraction."
|
|
213
|
+
review_by = 2026-12-15
|
|
214
|
+
max_lines = 744
|
|
215
|
+
next_limit = 540
|
|
216
|
+
debt = "CUTECANVAS-ARCH-009"
|
|
217
|
+
|
|
218
|
+
[[waivers]]
|
|
219
|
+
id = "CUTECANVAS-WAIVER-020"
|
|
220
|
+
issue = "chore:CUTECANVAS-WAIVER-020"
|
|
221
|
+
owner = "CuteCanvas SAM execution"
|
|
222
|
+
rule = "STRUCT003"
|
|
223
|
+
path = "packages/cutecanvas/src/cutecanvas/sam/manager.py"
|
|
224
|
+
kind = "structural"
|
|
225
|
+
justification = "SamManager is the sole SAM session owner for predictor preparation, cache limits, native execution requests, cancellation, adoption, mutation, metrics, and shutdown."
|
|
226
|
+
review_by = 2026-12-15
|
|
227
|
+
max_lines = 575
|
|
228
|
+
|
|
229
|
+
[[waivers]]
|
|
230
|
+
id = "CUTECANVAS-WAIVER-021"
|
|
231
|
+
issue = "chore:CUTECANVAS-WAIVER-021"
|
|
232
|
+
owner = "CuteCanvas vector conversion"
|
|
233
|
+
rule = "STRUCT003"
|
|
234
|
+
path = "packages/cutecanvas/src/cutecanvas/vector/conversion.py"
|
|
235
|
+
kind = "structural"
|
|
236
|
+
justification = "VectorConversionService is the sole request lifecycle for selection conversion, rasterization, text-path conversion, execution admission, adoption, cancellation, and publication."
|
|
237
|
+
review_by = 2026-12-15
|
|
238
|
+
max_lines = 514
|
|
239
|
+
|
|
240
|
+
[[waivers]]
|
|
241
|
+
id = "CUTECANVAS-WAIVER-022"
|
|
242
|
+
issue = "chore:CUTECANVAS-WAIVER-022"
|
|
243
|
+
owner = "CuteCanvas vector facade"
|
|
244
|
+
rule = "STRUCT003"
|
|
245
|
+
path = "packages/cutecanvas/src/cutecanvas/vector/facade.py"
|
|
246
|
+
kind = "structural"
|
|
247
|
+
justification = "VectorHostFacade is the single public task-oriented boundary for vector document mutation, text editing, selection, masks, conversion, and synchronized publication."
|
|
248
|
+
review_by = 2026-12-15
|
|
249
|
+
max_lines = 545
|