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.
Files changed (825) hide show
  1. cutecanvas-1.0.0/AGENTS.md +111 -0
  2. cutecanvas-1.0.0/ARCHITECTURE_DEBT.toml +136 -0
  3. cutecanvas-1.0.0/ARCHITECTURE_WAIVERS.toml +249 -0
  4. cutecanvas-1.0.0/CHANGELOG.md +7 -0
  5. cutecanvas-1.0.0/PKG-INFO +284 -0
  6. cutecanvas-1.0.0/README.md +256 -0
  7. cutecanvas-1.0.0/TEST_POLICY.toml +104 -0
  8. cutecanvas-1.0.0/docs/api-reference.md +1082 -0
  9. cutecanvas-1.0.0/docs/configuration-reference.md +129 -0
  10. cutecanvas-1.0.0/docs/configuration.md +246 -0
  11. cutecanvas-1.0.0/docs/diagnostics.md +91 -0
  12. cutecanvas-1.0.0/docs/documents-and-presentations.md +384 -0
  13. cutecanvas-1.0.0/docs/extensibility.md +210 -0
  14. cutecanvas-1.0.0/docs/getting-started.md +275 -0
  15. cutecanvas-1.0.0/docs/host-cookbook.md +247 -0
  16. cutecanvas-1.0.0/docs/host-ui.md +222 -0
  17. cutecanvas-1.0.0/docs/interaction-modes.md +495 -0
  18. cutecanvas-1.0.0/docs/masks-and-sam.md +472 -0
  19. cutecanvas-1.0.0/docs/painting.md +238 -0
  20. cutecanvas-1.0.0/docs/pixel-selections.md +325 -0
  21. cutecanvas-1.0.0/docs/placed-images.md +93 -0
  22. cutecanvas-1.0.0/docs/project-resources.md +151 -0
  23. cutecanvas-1.0.0/docs/scenes.md +346 -0
  24. cutecanvas-1.0.0/docs/touch-and-pen.md +87 -0
  25. cutecanvas-1.0.0/docs/vector-layers.md +132 -0
  26. cutecanvas-1.0.0/examples/cutecanvas_demo.py +671 -0
  27. cutecanvas-1.0.0/examples/cutecanvas_demo_environment.py +255 -0
  28. cutecanvas-1.0.0/examples/demo_settings.py +198 -0
  29. cutecanvas-1.0.0/examples/demonstration/__init__.py +23 -0
  30. cutecanvas-1.0.0/examples/demonstration/brush_controls.py +351 -0
  31. cutecanvas-1.0.0/examples/demonstration/canvas_geometry_dialog.py +217 -0
  32. cutecanvas-1.0.0/examples/demonstration/clone_stamp_controls.py +200 -0
  33. cutecanvas-1.0.0/examples/demonstration/command_tutorial.py +374 -0
  34. cutecanvas-1.0.0/examples/demonstration/composition_properties_dialog.py +86 -0
  35. cutecanvas-1.0.0/examples/demonstration/composition_tutorial.py +237 -0
  36. cutecanvas-1.0.0/examples/demonstration/compositions/__init__.py +21 -0
  37. cutecanvas-1.0.0/examples/demonstration/compositions/browser.py +533 -0
  38. cutecanvas-1.0.0/examples/demonstration/compositions/dock.py +126 -0
  39. cutecanvas-1.0.0/examples/demonstration/compositions/highlights.py +91 -0
  40. cutecanvas-1.0.0/examples/demonstration/config/__init__.py +35 -0
  41. cutecanvas-1.0.0/examples/demonstration/config/dialog.py +846 -0
  42. cutecanvas-1.0.0/examples/demonstration/config/spec.py +738 -0
  43. cutecanvas-1.0.0/examples/demonstration/configuration_tutorial.py +332 -0
  44. cutecanvas-1.0.0/examples/demonstration/coverage_controls.py +123 -0
  45. cutecanvas-1.0.0/examples/demonstration/custom_tool.py +41 -0
  46. cutecanvas-1.0.0/examples/demonstration/demo_text.py +149 -0
  47. cutecanvas-1.0.0/examples/demonstration/demo_window.py +509 -0
  48. cutecanvas-1.0.0/examples/demonstration/document_saves.py +123 -0
  49. cutecanvas-1.0.0/examples/demonstration/editor_controls.py +676 -0
  50. cutecanvas-1.0.0/examples/demonstration/editor_policy_controls.py +87 -0
  51. cutecanvas-1.0.0/examples/demonstration/extension_examples/custom_cursor.py +124 -0
  52. cutecanvas-1.0.0/examples/demonstration/extension_examples/custom_overlay.py +49 -0
  53. cutecanvas-1.0.0/examples/demonstration/extension_examples/lens_tool.py +180 -0
  54. cutecanvas-1.0.0/examples/demonstration/extension_tutorial.py +434 -0
  55. cutecanvas-1.0.0/examples/demonstration/history_controls.py +124 -0
  56. cutecanvas-1.0.0/examples/demonstration/hooks_editor.py +83 -0
  57. cutecanvas-1.0.0/examples/demonstration/hooks_examples.py +59 -0
  58. cutecanvas-1.0.0/examples/demonstration/input_tutorial.py +127 -0
  59. cutecanvas-1.0.0/examples/demonstration/layer_inspector.py +288 -0
  60. cutecanvas-1.0.0/examples/demonstration/layer_policy.py +138 -0
  61. cutecanvas-1.0.0/examples/demonstration/layer_properties_dialog.py +73 -0
  62. cutecanvas-1.0.0/examples/demonstration/move_controls.py +60 -0
  63. cutecanvas-1.0.0/examples/demonstration/navigation_trace.py +560 -0
  64. cutecanvas-1.0.0/examples/demonstration/placed_asset_controls.py +192 -0
  65. cutecanvas-1.0.0/examples/demonstration/presentation_tutorial.py +222 -0
  66. cutecanvas-1.0.0/examples/demonstration/projection_tutorial.py +84 -0
  67. cutecanvas-1.0.0/examples/demonstration/selection_modification_control.py +148 -0
  68. cutecanvas-1.0.0/examples/demonstration/status_tutorial.py +398 -0
  69. cutecanvas-1.0.0/examples/demonstration/tool_mode_tutorial.py +564 -0
  70. cutecanvas-1.0.0/examples/demonstration/touch_and_pen.py +52 -0
  71. cutecanvas-1.0.0/examples/demonstration/touch_and_pen_simulator.py +385 -0
  72. cutecanvas-1.0.0/examples/demonstration/transform_controls.py +192 -0
  73. cutecanvas-1.0.0/examples/demonstration/vector_controls.py +496 -0
  74. cutecanvas-1.0.0/examples/demonstration/welcome_document.py +98 -0
  75. cutecanvas-1.0.0/examples/demonstration/workers.py +202 -0
  76. cutecanvas-1.0.0/examples/demonstration/workspace_tutorial.py +442 -0
  77. cutecanvas-1.0.0/pyproject.toml +96 -0
  78. cutecanvas-1.0.0/setup.cfg +4 -0
  79. cutecanvas-1.0.0/src/cutecanvas/__init__.py +389 -0
  80. cutecanvas-1.0.0/src/cutecanvas/__init__.pyi +23 -0
  81. cutecanvas-1.0.0/src/cutecanvas/_version.py +28 -0
  82. cutecanvas-1.0.0/src/cutecanvas/canvas.py +648 -0
  83. cutecanvas-1.0.0/src/cutecanvas/canvas.pyi +19 -0
  84. cutecanvas-1.0.0/src/cutecanvas/composition/__init__.py +31 -0
  85. cutecanvas-1.0.0/src/cutecanvas/composition/edit_controller.py +185 -0
  86. cutecanvas-1.0.0/src/cutecanvas/composition/edit_history.py +268 -0
  87. cutecanvas-1.0.0/src/cutecanvas/composition/geometry_policy.py +83 -0
  88. cutecanvas-1.0.0/src/cutecanvas/composition/layer_edits.py +349 -0
  89. cutecanvas-1.0.0/src/cutecanvas/composition/layer_mapping_validation.py +46 -0
  90. cutecanvas-1.0.0/src/cutecanvas/composition/layers.py +577 -0
  91. cutecanvas-1.0.0/src/cutecanvas/composition/model.py +56 -0
  92. cutecanvas-1.0.0/src/cutecanvas/composition/mutations.py +217 -0
  93. cutecanvas-1.0.0/src/cutecanvas/composition/public_layer_mapping.py +62 -0
  94. cutecanvas-1.0.0/src/cutecanvas/composition/public_policy.py +71 -0
  95. cutecanvas-1.0.0/src/cutecanvas/composition/resource_lifetime.py +113 -0
  96. cutecanvas-1.0.0/src/cutecanvas/composition/resource_references.py +43 -0
  97. cutecanvas-1.0.0/src/cutecanvas/composition/scene_adapter.py +156 -0
  98. cutecanvas-1.0.0/src/cutecanvas/composition/service.py +512 -0
  99. cutecanvas-1.0.0/src/cutecanvas/core/__init__.py +36 -0
  100. cutecanvas-1.0.0/src/cutecanvas/core/config.py +116 -0
  101. cutecanvas-1.0.0/src/cutecanvas/core/config_features.py +234 -0
  102. cutecanvas-1.0.0/src/cutecanvas/core/fallbacks.py +183 -0
  103. cutecanvas-1.0.0/src/cutecanvas/core/feature_coordinator.py +200 -0
  104. cutecanvas-1.0.0/src/cutecanvas/core/hooks.py +184 -0
  105. cutecanvas-1.0.0/src/cutecanvas/core/state.py +509 -0
  106. cutecanvas-1.0.0/src/cutecanvas/coverage/__init__.py +112 -0
  107. cutecanvas-1.0.0/src/cutecanvas/coverage/asset.py +512 -0
  108. cutecanvas-1.0.0/src/cutecanvas/coverage/authoring.py +63 -0
  109. cutecanvas-1.0.0/src/cutecanvas/coverage/bilinear_coordinates.py +137 -0
  110. cutecanvas-1.0.0/src/cutecanvas/coverage/bilinear_resampling.py +228 -0
  111. cutecanvas-1.0.0/src/cutecanvas/coverage/boundary.py +176 -0
  112. cutecanvas-1.0.0/src/cutecanvas/coverage/canvas_aperture.py +130 -0
  113. cutecanvas-1.0.0/src/cutecanvas/coverage/containment.py +36 -0
  114. cutecanvas-1.0.0/src/cutecanvas/coverage/content_bounds.py +45 -0
  115. cutecanvas-1.0.0/src/cutecanvas/coverage/document.py +183 -0
  116. cutecanvas-1.0.0/src/cutecanvas/coverage/evaluation.py +436 -0
  117. cutecanvas-1.0.0/src/cutecanvas/coverage/filters.py +197 -0
  118. cutecanvas-1.0.0/src/cutecanvas/coverage/geometry.py +91 -0
  119. cutecanvas-1.0.0/src/cutecanvas/coverage/modification.py +163 -0
  120. cutecanvas-1.0.0/src/cutecanvas/coverage/movement.py +83 -0
  121. cutecanvas-1.0.0/src/cutecanvas/coverage/operations.py +78 -0
  122. cutecanvas-1.0.0/src/cutecanvas/coverage/path_conversion.py +110 -0
  123. cutecanvas-1.0.0/src/cutecanvas/coverage/piecewise_resampling.py +164 -0
  124. cutecanvas-1.0.0/src/cutecanvas/coverage/projection.py +71 -0
  125. cutecanvas-1.0.0/src/cutecanvas/coverage/raster_sampling.py +105 -0
  126. cutecanvas-1.0.0/src/cutecanvas/coverage/raster_structure.py +32 -0
  127. cutecanvas-1.0.0/src/cutecanvas/coverage/snapshot_equality.py +63 -0
  128. cutecanvas-1.0.0/src/cutecanvas/coverage/spatial_constraint.py +250 -0
  129. cutecanvas-1.0.0/src/cutecanvas/coverage/state_bounds.py +56 -0
  130. cutecanvas-1.0.0/src/cutecanvas/coverage/surface.py +722 -0
  131. cutecanvas-1.0.0/src/cutecanvas/cursor.py +52 -0
  132. cutecanvas-1.0.0/src/cutecanvas/cutecanvas.pyi +1524 -0
  133. cutecanvas-1.0.0/src/cutecanvas/document/__init__.py +62 -0
  134. cutecanvas-1.0.0/src/cutecanvas/document/canvas_crop.py +159 -0
  135. cutecanvas-1.0.0/src/cutecanvas/document/canvas_geometry.py +414 -0
  136. cutecanvas-1.0.0/src/cutecanvas/document/canvas_geometry_api.py +74 -0
  137. cutecanvas-1.0.0/src/cutecanvas/document/canvas_resample_products.py +238 -0
  138. cutecanvas-1.0.0/src/cutecanvas/document/canvas_resample_resources.py +188 -0
  139. cutecanvas-1.0.0/src/cutecanvas/document/canvas_resampling.py +393 -0
  140. cutecanvas-1.0.0/src/cutecanvas/document/document.py +382 -0
  141. cutecanvas-1.0.0/src/cutecanvas/document/events.py +108 -0
  142. cutecanvas-1.0.0/src/cutecanvas/document/inspection.py +203 -0
  143. cutecanvas-1.0.0/src/cutecanvas/document/references.py +80 -0
  144. cutecanvas-1.0.0/src/cutecanvas/document/session.py +317 -0
  145. cutecanvas-1.0.0/src/cutecanvas/document/viewport.py +120 -0
  146. cutecanvas-1.0.0/src/cutecanvas/edit_sessions.py +137 -0
  147. cutecanvas-1.0.0/src/cutecanvas/editor/__init__.py +48 -0
  148. cutecanvas-1.0.0/src/cutecanvas/editor/affine_interactions.py +53 -0
  149. cutecanvas-1.0.0/src/cutecanvas/editor/composition_root.py +770 -0
  150. cutecanvas-1.0.0/src/cutecanvas/editor/floating_history.py +245 -0
  151. cutecanvas-1.0.0/src/cutecanvas/editor/floating_layers.py +137 -0
  152. cutecanvas-1.0.0/src/cutecanvas/editor/floating_resolution.py +482 -0
  153. cutecanvas-1.0.0/src/cutecanvas/editor/floating_session.py +257 -0
  154. cutecanvas-1.0.0/src/cutecanvas/editor/fragment_projection.py +148 -0
  155. cutecanvas-1.0.0/src/cutecanvas/editor/interaction.py +219 -0
  156. cutecanvas-1.0.0/src/cutecanvas/editor/interaction_policy.py +65 -0
  157. cutecanvas-1.0.0/src/cutecanvas/editor/layer_edge_modification.py +261 -0
  158. cutecanvas-1.0.0/src/cutecanvas/editor/layer_edge_targets.py +110 -0
  159. cutecanvas-1.0.0/src/cutecanvas/editor/move_configuration.py +51 -0
  160. cutecanvas-1.0.0/src/cutecanvas/editor/movement.py +334 -0
  161. cutecanvas-1.0.0/src/cutecanvas/editor/operation_contracts.py +85 -0
  162. cutecanvas-1.0.0/src/cutecanvas/editor/operation_resolution.py +531 -0
  163. cutecanvas-1.0.0/src/cutecanvas/editor/paint_destination.py +142 -0
  164. cutecanvas-1.0.0/src/cutecanvas/editor/pixel_move_target.py +203 -0
  165. cutecanvas-1.0.0/src/cutecanvas/editor/pixel_movement.py +501 -0
  166. cutecanvas-1.0.0/src/cutecanvas/editor/policy.py +50 -0
  167. cutecanvas-1.0.0/src/cutecanvas/editor/provisional_history.py +119 -0
  168. cutecanvas-1.0.0/src/cutecanvas/editor/selection_projection.py +117 -0
  169. cutecanvas-1.0.0/src/cutecanvas/editor/session_coordination.py +238 -0
  170. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_collapse.py +212 -0
  171. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_discovery.py +255 -0
  172. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_geometry.py +239 -0
  173. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_grouping.py +212 -0
  174. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_handle_resolution.py +79 -0
  175. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_history.py +206 -0
  176. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_index.py +78 -0
  177. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_interaction.py +390 -0
  178. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_participant.py +331 -0
  179. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_pivot.py +324 -0
  180. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_presentation.py +203 -0
  181. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_publication.py +112 -0
  182. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_session.py +225 -0
  183. cutecanvas-1.0.0/src/cutecanvas/editor/shared_edge_translation.py +284 -0
  184. cutecanvas-1.0.0/src/cutecanvas/editor/source_operations.py +65 -0
  185. cutecanvas-1.0.0/src/cutecanvas/editor/transform_commands.py +64 -0
  186. cutecanvas-1.0.0/src/cutecanvas/editor/transform_coordinator.py +377 -0
  187. cutecanvas-1.0.0/src/cutecanvas/editor/transform_history.py +181 -0
  188. cutecanvas-1.0.0/src/cutecanvas/editor/transform_install.py +100 -0
  189. cutecanvas-1.0.0/src/cutecanvas/editor/transform_interaction.py +195 -0
  190. cutecanvas-1.0.0/src/cutecanvas/facade/__init__.py +16 -0
  191. cutecanvas-1.0.0/src/cutecanvas/facade/canvas_geometry_api.py +114 -0
  192. cutecanvas-1.0.0/src/cutecanvas/facade/clone_stamp.py +99 -0
  193. cutecanvas-1.0.0/src/cutecanvas/facade/composition_api.py +635 -0
  194. cutecanvas-1.0.0/src/cutecanvas/facade/composition_handles.py +195 -0
  195. cutecanvas-1.0.0/src/cutecanvas/facade/configuration_api.py +57 -0
  196. cutecanvas-1.0.0/src/cutecanvas/facade/context_api.py +34 -0
  197. cutecanvas-1.0.0/src/cutecanvas/facade/coverage_api.py +278 -0
  198. cutecanvas-1.0.0/src/cutecanvas/facade/diagnostics_api.py +50 -0
  199. cutecanvas-1.0.0/src/cutecanvas/facade/drag_api.py +96 -0
  200. cutecanvas-1.0.0/src/cutecanvas/facade/edit_session_api.py +86 -0
  201. cutecanvas-1.0.0/src/cutecanvas/facade/editor.py +386 -0
  202. cutecanvas-1.0.0/src/cutecanvas/facade/editor_policy_api.py +108 -0
  203. cutecanvas-1.0.0/src/cutecanvas/facade/effect_api.py +74 -0
  204. cutecanvas-1.0.0/src/cutecanvas/facade/effect_handles.py +64 -0
  205. cutecanvas-1.0.0/src/cutecanvas/facade/effects.py +122 -0
  206. cutecanvas-1.0.0/src/cutecanvas/facade/handles.py +258 -0
  207. cutecanvas-1.0.0/src/cutecanvas/facade/image_export_api.py +44 -0
  208. cutecanvas-1.0.0/src/cutecanvas/facade/interaction_api.py +185 -0
  209. cutecanvas-1.0.0/src/cutecanvas/facade/layer_api.py +302 -0
  210. cutecanvas-1.0.0/src/cutecanvas/facade/layer_handles.py +199 -0
  211. cutecanvas-1.0.0/src/cutecanvas/facade/mask_api.py +327 -0
  212. cutecanvas-1.0.0/src/cutecanvas/facade/move_api.py +45 -0
  213. cutecanvas-1.0.0/src/cutecanvas/facade/persistence.py +136 -0
  214. cutecanvas-1.0.0/src/cutecanvas/facade/placed_api.py +225 -0
  215. cutecanvas-1.0.0/src/cutecanvas/facade/projection_api.py +120 -0
  216. cutecanvas-1.0.0/src/cutecanvas/facade/raster_api.py +686 -0
  217. cutecanvas-1.0.0/src/cutecanvas/facade/resource_api.py +186 -0
  218. cutecanvas-1.0.0/src/cutecanvas/facade/selection_api.py +263 -0
  219. cutecanvas-1.0.0/src/cutecanvas/facade/snapping_api.py +78 -0
  220. cutecanvas-1.0.0/src/cutecanvas/facade/tool_modes.py +52 -0
  221. cutecanvas-1.0.0/src/cutecanvas/facade/transform_api.py +66 -0
  222. cutecanvas-1.0.0/src/cutecanvas/facade/vector_api.py +481 -0
  223. cutecanvas-1.0.0/src/cutecanvas/facade/view_api.py +104 -0
  224. cutecanvas-1.0.0/src/cutecanvas/facade/viewport_api.py +67 -0
  225. cutecanvas-1.0.0/src/cutecanvas/fill/__init__.py +38 -0
  226. cutecanvas-1.0.0/src/cutecanvas/fill/coordinator.py +241 -0
  227. cutecanvas-1.0.0/src/cutecanvas/fill/evaluation.py +42 -0
  228. cutecanvas-1.0.0/src/cutecanvas/fill/flood.py +263 -0
  229. cutecanvas-1.0.0/src/cutecanvas/fill/selection_fill.py +70 -0
  230. cutecanvas-1.0.0/src/cutecanvas/fill/sources.py +182 -0
  231. cutecanvas-1.0.0/src/cutecanvas/masks/__init__.py +43 -0
  232. cutecanvas-1.0.0/src/cutecanvas/masks/activation.py +289 -0
  233. cutecanvas-1.0.0/src/cutecanvas/masks/autosave.py +581 -0
  234. cutecanvas-1.0.0/src/cutecanvas/masks/autosave_coordination.py +199 -0
  235. cutecanvas-1.0.0/src/cutecanvas/masks/autosave_products.py +103 -0
  236. cutecanvas-1.0.0/src/cutecanvas/masks/canvas_aperture.py +187 -0
  237. cutecanvas-1.0.0/src/cutecanvas/masks/combiner.py +69 -0
  238. cutecanvas-1.0.0/src/cutecanvas/masks/component_adjustment.py +114 -0
  239. cutecanvas-1.0.0/src/cutecanvas/masks/component_graph.py +269 -0
  240. cutecanvas-1.0.0/src/cutecanvas/masks/coordinates.py +112 -0
  241. cutecanvas-1.0.0/src/cutecanvas/masks/coverage_history.py +107 -0
  242. cutecanvas-1.0.0/src/cutecanvas/masks/coverage_preview_source.py +140 -0
  243. cutecanvas-1.0.0/src/cutecanvas/masks/coverage_transactions.py +198 -0
  244. cutecanvas-1.0.0/src/cutecanvas/masks/delegate.py +453 -0
  245. cutecanvas-1.0.0/src/cutecanvas/masks/descriptor_factory.py +127 -0
  246. cutecanvas-1.0.0/src/cutecanvas/masks/edge_edits.py +94 -0
  247. cutecanvas-1.0.0/src/cutecanvas/masks/edit_service.py +714 -0
  248. cutecanvas-1.0.0/src/cutecanvas/masks/export.py +180 -0
  249. cutecanvas-1.0.0/src/cutecanvas/masks/file_io.py +48 -0
  250. cutecanvas-1.0.0/src/cutecanvas/masks/floating_layers.py +193 -0
  251. cutecanvas-1.0.0/src/cutecanvas/masks/generated_edits.py +62 -0
  252. cutecanvas-1.0.0/src/cutecanvas/masks/history.py +483 -0
  253. cutecanvas-1.0.0/src/cutecanvas/masks/history_presentation.py +100 -0
  254. cutecanvas-1.0.0/src/cutecanvas/masks/history_size.py +68 -0
  255. cutecanvas-1.0.0/src/cutecanvas/masks/hybrid_source.py +242 -0
  256. cutecanvas-1.0.0/src/cutecanvas/masks/image_ops.py +195 -0
  257. cutecanvas-1.0.0/src/cutecanvas/masks/install.py +130 -0
  258. cutecanvas-1.0.0/src/cutecanvas/masks/layer_coordination.py +359 -0
  259. cutecanvas-1.0.0/src/cutecanvas/masks/layer_workflows.py +373 -0
  260. cutecanvas-1.0.0/src/cutecanvas/masks/live_preview_geometry.py +69 -0
  261. cutecanvas-1.0.0/src/cutecanvas/masks/live_preview_raster.py +274 -0
  262. cutecanvas-1.0.0/src/cutecanvas/masks/live_preview_store.py +87 -0
  263. cutecanvas-1.0.0/src/cutecanvas/masks/mask.py +468 -0
  264. cutecanvas-1.0.0/src/cutecanvas/masks/mask_controller.py +193 -0
  265. cutecanvas-1.0.0/src/cutecanvas/masks/mask_diagnostics.py +473 -0
  266. cutecanvas-1.0.0/src/cutecanvas/masks/mask_patch_history.py +181 -0
  267. cutecanvas-1.0.0/src/cutecanvas/masks/mask_service.py +586 -0
  268. cutecanvas-1.0.0/src/cutecanvas/masks/mask_undo.py +189 -0
  269. cutecanvas-1.0.0/src/cutecanvas/masks/mixed_stroke.py +92 -0
  270. cutecanvas-1.0.0/src/cutecanvas/masks/paint_preparation.py +181 -0
  271. cutecanvas-1.0.0/src/cutecanvas/masks/paint_target.py +214 -0
  272. cutecanvas-1.0.0/src/cutecanvas/masks/pixel_edits.py +379 -0
  273. cutecanvas-1.0.0/src/cutecanvas/masks/pixel_translation.py +342 -0
  274. cutecanvas-1.0.0/src/cutecanvas/masks/presentation_clip.py +64 -0
  275. cutecanvas-1.0.0/src/cutecanvas/masks/projection.py +390 -0
  276. cutecanvas-1.0.0/src/cutecanvas/masks/raster_mutations.py +391 -0
  277. cutecanvas-1.0.0/src/cutecanvas/masks/raster_structure_history.py +54 -0
  278. cutecanvas-1.0.0/src/cutecanvas/masks/rasterizer.py +42 -0
  279. cutecanvas-1.0.0/src/cutecanvas/masks/render_cache.py +1365 -0
  280. cutecanvas-1.0.0/src/cutecanvas/masks/render_coordination.py +842 -0
  281. cutecanvas-1.0.0/src/cutecanvas/masks/render_product_geometry.py +51 -0
  282. cutecanvas-1.0.0/src/cutecanvas/masks/render_products.py +153 -0
  283. cutecanvas-1.0.0/src/cutecanvas/masks/resource_changes.py +28 -0
  284. cutecanvas-1.0.0/src/cutecanvas/masks/sam_feature.py +353 -0
  285. cutecanvas-1.0.0/src/cutecanvas/masks/source_resolver.py +434 -0
  286. cutecanvas-1.0.0/src/cutecanvas/masks/spatial_paint.py +267 -0
  287. cutecanvas-1.0.0/src/cutecanvas/masks/spatial_paint_history.py +209 -0
  288. cutecanvas-1.0.0/src/cutecanvas/masks/spatial_paint_layers.py +58 -0
  289. cutecanvas-1.0.0/src/cutecanvas/masks/status_diagnostics.py +95 -0
  290. cutecanvas-1.0.0/src/cutecanvas/masks/stroke_history.py +103 -0
  291. cutecanvas-1.0.0/src/cutecanvas/masks/stroke_interactions.py +212 -0
  292. cutecanvas-1.0.0/src/cutecanvas/masks/stroke_models.py +66 -0
  293. cutecanvas-1.0.0/src/cutecanvas/masks/stroke_preview.py +296 -0
  294. cutecanvas-1.0.0/src/cutecanvas/masks/stroke_regions.py +100 -0
  295. cutecanvas-1.0.0/src/cutecanvas/masks/stroke_rendering.py +56 -0
  296. cutecanvas-1.0.0/src/cutecanvas/masks/stroke_requests.py +149 -0
  297. cutecanvas-1.0.0/src/cutecanvas/masks/strokes.py +853 -0
  298. cutecanvas-1.0.0/src/cutecanvas/masks/surface_history.py +54 -0
  299. cutecanvas-1.0.0/src/cutecanvas/masks/workflow.py +848 -0
  300. cutecanvas-1.0.0/src/cutecanvas/overlay_contracts.py +83 -0
  301. cutecanvas-1.0.0/src/cutecanvas/painting/__init__.py +103 -0
  302. cutecanvas-1.0.0/src/cutecanvas/painting/clone_compositor.py +73 -0
  303. cutecanvas-1.0.0/src/cutecanvas/painting/clone_model.py +158 -0
  304. cutecanvas-1.0.0/src/cutecanvas/painting/clone_operation.py +427 -0
  305. cutecanvas-1.0.0/src/cutecanvas/painting/clone_source.py +154 -0
  306. cutecanvas-1.0.0/src/cutecanvas/painting/compositor.py +144 -0
  307. cutecanvas-1.0.0/src/cutecanvas/painting/configuration.py +93 -0
  308. cutecanvas-1.0.0/src/cutecanvas/painting/dab_engine.py +155 -0
  309. cutecanvas-1.0.0/src/cutecanvas/painting/model.py +295 -0
  310. cutecanvas-1.0.0/src/cutecanvas/painting/operations.py +124 -0
  311. cutecanvas-1.0.0/src/cutecanvas/painting/piecewise_tip_coordinates.py +71 -0
  312. cutecanvas-1.0.0/src/cutecanvas/painting/qt_dab_painter.py +338 -0
  313. cutecanvas-1.0.0/src/cutecanvas/painting/regions.py +36 -0
  314. cutecanvas-1.0.0/src/cutecanvas/painting/rendering.py +183 -0
  315. cutecanvas-1.0.0/src/cutecanvas/painting/sample_mapping.py +72 -0
  316. cutecanvas-1.0.0/src/cutecanvas/painting/stroke_session.py +215 -0
  317. cutecanvas-1.0.0/src/cutecanvas/painting/target_contracts.py +207 -0
  318. cutecanvas-1.0.0/src/cutecanvas/painting/target_geometry.py +60 -0
  319. cutecanvas-1.0.0/src/cutecanvas/painting/targets.py +521 -0
  320. cutecanvas-1.0.0/src/cutecanvas/painting/tip_cache.py +238 -0
  321. cutecanvas-1.0.0/src/cutecanvas/painting/tip_geometry.py +60 -0
  322. cutecanvas-1.0.0/src/cutecanvas/painting/tip_preview.py +84 -0
  323. cutecanvas-1.0.0/src/cutecanvas/painting/tip_projection.py +218 -0
  324. cutecanvas-1.0.0/src/cutecanvas/painting/tools/__init__.py +29 -0
  325. cutecanvas-1.0.0/src/cutecanvas/painting/tools/brush.py +697 -0
  326. cutecanvas-1.0.0/src/cutecanvas/painting/tools/brush_preview.py +219 -0
  327. cutecanvas-1.0.0/src/cutecanvas/painting/tools/brush_signals.py +82 -0
  328. cutecanvas-1.0.0/src/cutecanvas/painting/tools/clone_feedback.py +105 -0
  329. cutecanvas-1.0.0/src/cutecanvas/painting/tools/clone_stamp.py +171 -0
  330. cutecanvas-1.0.0/src/cutecanvas/painting/tools/eraser.py +44 -0
  331. cutecanvas-1.0.0/src/cutecanvas/persistence/__init__.py +30 -0
  332. cutecanvas-1.0.0/src/cutecanvas/persistence/capture.py +144 -0
  333. cutecanvas-1.0.0/src/cutecanvas/persistence/codec.py +1129 -0
  334. cutecanvas-1.0.0/src/cutecanvas/persistence/coverage_codec.py +259 -0
  335. cutecanvas-1.0.0/src/cutecanvas/persistence/effect_codec.py +106 -0
  336. cutecanvas-1.0.0/src/cutecanvas/persistence/layer_codec.py +181 -0
  337. cutecanvas-1.0.0/src/cutecanvas/persistence/layer_geometry_codec.py +73 -0
  338. cutecanvas-1.0.0/src/cutecanvas/persistence/layer_mapping_codec.py +119 -0
  339. cutecanvas-1.0.0/src/cutecanvas/persistence/legacy_shared_edges.py +292 -0
  340. cutecanvas-1.0.0/src/cutecanvas/persistence/model.py +101 -0
  341. cutecanvas-1.0.0/src/cutecanvas/persistence/restore.py +172 -0
  342. cutecanvas-1.0.0/src/cutecanvas/persistence/service.py +122 -0
  343. cutecanvas-1.0.0/src/cutecanvas/persistence/vector_object_codec.py +260 -0
  344. cutecanvas-1.0.0/src/cutecanvas/placed/__init__.py +26 -0
  345. cutecanvas-1.0.0/src/cutecanvas/placed/descriptor_factory.py +80 -0
  346. cutecanvas-1.0.0/src/cutecanvas/placed/history.py +83 -0
  347. cutecanvas-1.0.0/src/cutecanvas/placed/model.py +81 -0
  348. cutecanvas-1.0.0/src/cutecanvas/placed/mutations.py +170 -0
  349. cutecanvas-1.0.0/src/cutecanvas/placed/rasterization.py +327 -0
  350. cutecanvas-1.0.0/src/cutecanvas/placed/reload.py +77 -0
  351. cutecanvas-1.0.0/src/cutecanvas/placed/source_capabilities.py +108 -0
  352. cutecanvas-1.0.0/src/cutecanvas/placed/store.py +371 -0
  353. cutecanvas-1.0.0/src/cutecanvas/placed/workflow.py +631 -0
  354. cutecanvas-1.0.0/src/cutecanvas/presentation/__init__.py +37 -0
  355. cutecanvas-1.0.0/src/cutecanvas/presentation/comparison_catalog.py +122 -0
  356. cutecanvas-1.0.0/src/cutecanvas/presentation/comparison_overlays.py +107 -0
  357. cutecanvas-1.0.0/src/cutecanvas/presentation/contracts.py +58 -0
  358. cutecanvas-1.0.0/src/cutecanvas/presentation/grid_interaction.py +118 -0
  359. cutecanvas-1.0.0/src/cutecanvas/presentation/grid_surface.py +246 -0
  360. cutecanvas-1.0.0/src/cutecanvas/presentation/grid_viewports.py +49 -0
  361. cutecanvas-1.0.0/src/cutecanvas/presentation/native_comparison.py +365 -0
  362. cutecanvas-1.0.0/src/cutecanvas/presentation/surfaces.py +55 -0
  363. cutecanvas-1.0.0/src/cutecanvas/presentation/target_mount.py +46 -0
  364. cutecanvas-1.0.0/src/cutecanvas/presentation/target_pool.py +202 -0
  365. cutecanvas-1.0.0/src/cutecanvas/presentation/widget_lifetime.py +101 -0
  366. cutecanvas-1.0.0/src/cutecanvas/presentation/workspace.py +724 -0
  367. cutecanvas-1.0.0/src/cutecanvas/projection.py +353 -0
  368. cutecanvas-1.0.0/src/cutecanvas/py.typed +1 -0
  369. cutecanvas-1.0.0/src/cutecanvas/raster/__init__.py +20 -0
  370. cutecanvas-1.0.0/src/cutecanvas/raster/assets.py +224 -0
  371. cutecanvas-1.0.0/src/cutecanvas/raster/clone_sampling.py +200 -0
  372. cutecanvas-1.0.0/src/cutecanvas/raster/clone_target.py +328 -0
  373. cutecanvas-1.0.0/src/cutecanvas/raster/color_surface.py +424 -0
  374. cutecanvas-1.0.0/src/cutecanvas/raster/content_bounds.py +42 -0
  375. cutecanvas-1.0.0/src/cutecanvas/raster/descriptor_factory.py +80 -0
  376. cutecanvas-1.0.0/src/cutecanvas/raster/floating_layers.py +176 -0
  377. cutecanvas-1.0.0/src/cutecanvas/raster/layers.py +302 -0
  378. cutecanvas-1.0.0/src/cutecanvas/raster/paint_geometry.py +95 -0
  379. cutecanvas-1.0.0/src/cutecanvas/raster/paint_history.py +151 -0
  380. cutecanvas-1.0.0/src/cutecanvas/raster/paint_target.py +440 -0
  381. cutecanvas-1.0.0/src/cutecanvas/raster/pixel_edits.py +277 -0
  382. cutecanvas-1.0.0/src/cutecanvas/raster/pixel_translation.py +308 -0
  383. cutecanvas-1.0.0/src/cutecanvas/raster/presentation_state.py +40 -0
  384. cutecanvas-1.0.0/src/cutecanvas/raster/revision_reader.py +137 -0
  385. cutecanvas-1.0.0/src/cutecanvas/raster/source_resolver.py +203 -0
  386. cutecanvas-1.0.0/src/cutecanvas/raster/sparse_grid.py +471 -0
  387. cutecanvas-1.0.0/src/cutecanvas/raster/stroke_session.py +87 -0
  388. cutecanvas-1.0.0/src/cutecanvas/raster/structure_mutations.py +417 -0
  389. cutecanvas-1.0.0/src/cutecanvas/raster/structure_products.py +63 -0
  390. cutecanvas-1.0.0/src/cutecanvas/rendering/__init__.py +20 -0
  391. cutecanvas-1.0.0/src/cutecanvas/rendering/floating_pixels.py +268 -0
  392. cutecanvas-1.0.0/src/cutecanvas/rendering/layer_edge_preview.py +90 -0
  393. cutecanvas-1.0.0/src/cutecanvas/rendering/mapped_mask_transitions.py +171 -0
  394. cutecanvas-1.0.0/src/cutecanvas/rendering/raster_transitions.py +246 -0
  395. cutecanvas-1.0.0/src/cutecanvas/rendering/sampled_transition_tiles.py +236 -0
  396. cutecanvas-1.0.0/src/cutecanvas/rendering/transient_rasters.py +340 -0
  397. cutecanvas-1.0.0/src/cutecanvas/resources/__init__.py +39 -0
  398. cutecanvas-1.0.0/src/cutecanvas/resources/active_raster.py +136 -0
  399. cutecanvas-1.0.0/src/cutecanvas/resources/active_raster_coordinates.py +99 -0
  400. cutecanvas-1.0.0/src/cutecanvas/resources/composition_rasterization.py +333 -0
  401. cutecanvas-1.0.0/src/cutecanvas/resources/composition_rendering.py +347 -0
  402. cutecanvas-1.0.0/src/cutecanvas/resources/composition_resources.py +99 -0
  403. cutecanvas-1.0.0/src/cutecanvas/resources/descriptor_factory.py +93 -0
  404. cutecanvas-1.0.0/src/cutecanvas/resources/document_core.py +205 -0
  405. cutecanvas-1.0.0/src/cutecanvas/resources/image_documents.py +137 -0
  406. cutecanvas-1.0.0/src/cutecanvas/resources/image_export.py +116 -0
  407. cutecanvas-1.0.0/src/cutecanvas/resources/install.py +334 -0
  408. cutecanvas-1.0.0/src/cutecanvas/resources/layer_operations.py +152 -0
  409. cutecanvas-1.0.0/src/cutecanvas/resources/lifecycle.py +66 -0
  410. cutecanvas-1.0.0/src/cutecanvas/resources/model.py +83 -0
  411. cutecanvas-1.0.0/src/cutecanvas/resources/pixel_history.py +258 -0
  412. cutecanvas-1.0.0/src/cutecanvas/resources/raster_instances.py +59 -0
  413. cutecanvas-1.0.0/src/cutecanvas/resources/rasterization.py +116 -0
  414. cutecanvas-1.0.0/src/cutecanvas/resources/source_capabilities.py +272 -0
  415. cutecanvas-1.0.0/src/cutecanvas/resources/store.py +340 -0
  416. cutecanvas-1.0.0/src/cutecanvas/runtime/__init__.py +52 -0
  417. cutecanvas-1.0.0/src/cutecanvas/runtime/accessors.py +585 -0
  418. cutecanvas-1.0.0/src/cutecanvas/runtime/canvas_resampling.py +292 -0
  419. cutecanvas-1.0.0/src/cutecanvas/runtime/coverage_modification_contracts.py +105 -0
  420. cutecanvas-1.0.0/src/cutecanvas/runtime/coverage_modification_preview.py +408 -0
  421. cutecanvas-1.0.0/src/cutecanvas/runtime/document_events.py +652 -0
  422. cutecanvas-1.0.0/src/cutecanvas/runtime/document_runtime.py +188 -0
  423. cutecanvas-1.0.0/src/cutecanvas/runtime/execution_binding.py +101 -0
  424. cutecanvas-1.0.0/src/cutecanvas/runtime/headroom_monitor.py +191 -0
  425. cutecanvas-1.0.0/src/cutecanvas/runtime/latest_requests.py +122 -0
  426. cutecanvas-1.0.0/src/cutecanvas/runtime/lifecycle.py +822 -0
  427. cutecanvas-1.0.0/src/cutecanvas/runtime/scene_interaction_sync.py +52 -0
  428. cutecanvas-1.0.0/src/cutecanvas/runtime/view_state.py +319 -0
  429. cutecanvas-1.0.0/src/cutecanvas/runtime/viewport_activation.py +43 -0
  430. cutecanvas-1.0.0/src/cutecanvas/sam/__init__.py +31 -0
  431. cutecanvas-1.0.0/src/cutecanvas/sam/checkpoint.py +72 -0
  432. cutecanvas-1.0.0/src/cutecanvas/sam/checkpoint_coordination.py +130 -0
  433. cutecanvas-1.0.0/src/cutecanvas/sam/delegate.py +243 -0
  434. cutecanvas-1.0.0/src/cutecanvas/sam/manager.py +648 -0
  435. cutecanvas-1.0.0/src/cutecanvas/sam/products.py +80 -0
  436. cutecanvas-1.0.0/src/cutecanvas/sam/segmentation_request.py +71 -0
  437. cutecanvas-1.0.0/src/cutecanvas/sam/service.py +428 -0
  438. cutecanvas-1.0.0/src/cutecanvas/sam/session.py +204 -0
  439. cutecanvas-1.0.0/src/cutecanvas/scene/__init__.py +31 -0
  440. cutecanvas-1.0.0/src/cutecanvas/scene/canvas_bounds.py +36 -0
  441. cutecanvas-1.0.0/src/cutecanvas/scene/geometry.py +56 -0
  442. cutecanvas-1.0.0/src/cutecanvas/scene/identity.py +39 -0
  443. cutecanvas-1.0.0/src/cutecanvas/scene/layer_assembly.py +103 -0
  444. cutecanvas-1.0.0/src/cutecanvas/scene/layer_edge_preview.py +133 -0
  445. cutecanvas-1.0.0/src/cutecanvas/scene/layer_effects.py +30 -0
  446. cutecanvas-1.0.0/src/cutecanvas/scene/layer_geometry.py +143 -0
  447. cutecanvas-1.0.0/src/cutecanvas/scene/layer_move.py +263 -0
  448. cutecanvas-1.0.0/src/cutecanvas/scene/layer_selection.py +164 -0
  449. cutecanvas-1.0.0/src/cutecanvas/scene/mapping_edit.py +114 -0
  450. cutecanvas-1.0.0/src/cutecanvas/scene/mapping_mutations.py +150 -0
  451. cutecanvas-1.0.0/src/cutecanvas/scene/mapping_preview.py +192 -0
  452. cutecanvas-1.0.0/src/cutecanvas/scene/movement_interaction.py +223 -0
  453. cutecanvas-1.0.0/src/cutecanvas/scene/mutations.py +517 -0
  454. cutecanvas-1.0.0/src/cutecanvas/scene/pixel_edits.py +162 -0
  455. cutecanvas-1.0.0/src/cutecanvas/scene/pixel_extraction.py +73 -0
  456. cutecanvas-1.0.0/src/cutecanvas/scene/pixel_fragments.py +128 -0
  457. cutecanvas-1.0.0/src/cutecanvas/scene/pixel_move_preview.py +53 -0
  458. cutecanvas-1.0.0/src/cutecanvas/scene/pixel_owners.py +181 -0
  459. cutecanvas-1.0.0/src/cutecanvas/scene/pixel_transitions.py +104 -0
  460. cutecanvas-1.0.0/src/cutecanvas/scene/raster_mutations.py +210 -0
  461. cutecanvas-1.0.0/src/cutecanvas/scene/source_capabilities.py +233 -0
  462. cutecanvas-1.0.0/src/cutecanvas/scene/transform_session.py +374 -0
  463. cutecanvas-1.0.0/src/cutecanvas/scene/viewport_selection.py +157 -0
  464. cutecanvas-1.0.0/src/cutecanvas/selection/__init__.py +45 -0
  465. cutecanvas-1.0.0/src/cutecanvas/selection/boundary.py +69 -0
  466. cutecanvas-1.0.0/src/cutecanvas/selection/compositor.py +130 -0
  467. cutecanvas-1.0.0/src/cutecanvas/selection/geometry.py +92 -0
  468. cutecanvas-1.0.0/src/cutecanvas/selection/history.py +53 -0
  469. cutecanvas-1.0.0/src/cutecanvas/selection/model.py +37 -0
  470. cutecanvas-1.0.0/src/cutecanvas/selection/modification.py +82 -0
  471. cutecanvas-1.0.0/src/cutecanvas/selection/modification_coordinator.py +291 -0
  472. cutecanvas-1.0.0/src/cutecanvas/selection/paint_target.py +159 -0
  473. cutecanvas-1.0.0/src/cutecanvas/selection/projection.py +238 -0
  474. cutecanvas-1.0.0/src/cutecanvas/selection/service.py +317 -0
  475. cutecanvas-1.0.0/src/cutecanvas/selection/smart_segmentation.py +92 -0
  476. cutecanvas-1.0.0/src/cutecanvas/selection/translation_interaction.py +178 -0
  477. cutecanvas-1.0.0/src/cutecanvas/snapping/__init__.py +42 -0
  478. cutecanvas-1.0.0/src/cutecanvas/snapping/authoring.py +330 -0
  479. cutecanvas-1.0.0/src/cutecanvas/snapping/axis_resolution.py +270 -0
  480. cutecanvas-1.0.0/src/cutecanvas/snapping/candidates.py +156 -0
  481. cutecanvas-1.0.0/src/cutecanvas/snapping/configuration.py +158 -0
  482. cutecanvas-1.0.0/src/cutecanvas/snapping/edge_candidates.py +200 -0
  483. cutecanvas-1.0.0/src/cutecanvas/snapping/edge_index.py +132 -0
  484. cutecanvas-1.0.0/src/cutecanvas/snapping/edge_model.py +245 -0
  485. cutecanvas-1.0.0/src/cutecanvas/snapping/engine.py +223 -0
  486. cutecanvas-1.0.0/src/cutecanvas/snapping/feedback.py +50 -0
  487. cutecanvas-1.0.0/src/cutecanvas/snapping/model.py +149 -0
  488. cutecanvas-1.0.0/src/cutecanvas/snapping/movement.py +115 -0
  489. cutecanvas-1.0.0/src/cutecanvas/snapping/oriented_resolution.py +273 -0
  490. cutecanvas-1.0.0/src/cutecanvas/snapping/rail_resolution.py +254 -0
  491. cutecanvas-1.0.0/src/cutecanvas/snapping/rail_targets.py +170 -0
  492. cutecanvas-1.0.0/src/cutecanvas/snapping/scale.py +43 -0
  493. cutecanvas-1.0.0/src/cutecanvas/snapping/system.py +137 -0
  494. cutecanvas-1.0.0/src/cutecanvas/snapping/transform.py +150 -0
  495. cutecanvas-1.0.0/src/cutecanvas/snapping/transform_oriented_scale.py +137 -0
  496. cutecanvas-1.0.0/src/cutecanvas/snapping/transform_scale.py +366 -0
  497. cutecanvas-1.0.0/src/cutecanvas/tools/__init__.py +49 -0
  498. cutecanvas-1.0.0/src/cutecanvas/tools/activation.py +316 -0
  499. cutecanvas-1.0.0/src/cutecanvas/tools/activation_controller.py +126 -0
  500. cutecanvas-1.0.0/src/cutecanvas/tools/affine_ports.py +70 -0
  501. cutecanvas-1.0.0/src/cutecanvas/tools/base.py +52 -0
  502. cutecanvas-1.0.0/src/cutecanvas/tools/coverage_operation.py +52 -0
  503. cutecanvas-1.0.0/src/cutecanvas/tools/coverage_preview.py +48 -0
  504. cutecanvas-1.0.0/src/cutecanvas/tools/cursor_controller.py +232 -0
  505. cutecanvas-1.0.0/src/cutecanvas/tools/cursor_feedback.py +31 -0
  506. cutecanvas-1.0.0/src/cutecanvas/tools/delegate.py +488 -0
  507. cutecanvas-1.0.0/src/cutecanvas/tools/dependencies.py +85 -0
  508. cutecanvas-1.0.0/src/cutecanvas/tools/input/__init__.py +21 -0
  509. cutecanvas-1.0.0/src/cutecanvas/tools/keyboard_input.py +136 -0
  510. cutecanvas-1.0.0/src/cutecanvas/tools/modifier_snapshot.py +65 -0
  511. cutecanvas-1.0.0/src/cutecanvas/tools/move.py +280 -0
  512. cutecanvas-1.0.0/src/cutecanvas/tools/overlay_controller.py +79 -0
  513. cutecanvas-1.0.0/src/cutecanvas/tools/paint_bucket.py +107 -0
  514. cutecanvas-1.0.0/src/cutecanvas/tools/polygon_coverage.py +452 -0
  515. cutecanvas-1.0.0/src/cutecanvas/tools/polygon_coverage_hit_testing.py +88 -0
  516. cutecanvas-1.0.0/src/cutecanvas/tools/polygon_coverage_overlay.py +197 -0
  517. cutecanvas-1.0.0/src/cutecanvas/tools/polygon_coverage_publication.py +66 -0
  518. cutecanvas-1.0.0/src/cutecanvas/tools/polygon_coverage_session.py +190 -0
  519. cutecanvas-1.0.0/src/cutecanvas/tools/polygon_edit_session.py +193 -0
  520. cutecanvas-1.0.0/src/cutecanvas/tools/ports.py +458 -0
  521. cutecanvas-1.0.0/src/cutecanvas/tools/selection_shapes.py +577 -0
  522. cutecanvas-1.0.0/src/cutecanvas/tools/selection_shortcuts.py +51 -0
  523. cutecanvas-1.0.0/src/cutecanvas/tools/shared_edge_resize.py +189 -0
  524. cutecanvas-1.0.0/src/cutecanvas/tools/shortcuts.py +47 -0
  525. cutecanvas-1.0.0/src/cutecanvas/tools/smart_segmentation.py +352 -0
  526. cutecanvas-1.0.0/src/cutecanvas/tools/tools.py +207 -0
  527. cutecanvas-1.0.0/src/cutecanvas/tools/transform.py +357 -0
  528. cutecanvas-1.0.0/src/cutecanvas/tools/transient_input.py +144 -0
  529. cutecanvas-1.0.0/src/cutecanvas/types.py +531 -0
  530. cutecanvas-1.0.0/src/cutecanvas/ui/__init__.py +37 -0
  531. cutecanvas-1.0.0/src/cutecanvas/ui/affine_handles.py +55 -0
  532. cutecanvas-1.0.0/src/cutecanvas/ui/brush_feedback.py +51 -0
  533. cutecanvas-1.0.0/src/cutecanvas/ui/cursor_builder.py +280 -0
  534. cutecanvas-1.0.0/src/cutecanvas/ui/editor_overlays.py +195 -0
  535. cutecanvas-1.0.0/src/cutecanvas/ui/erase_indicator.py +66 -0
  536. cutecanvas-1.0.0/src/cutecanvas/ui/shared_edge.py +75 -0
  537. cutecanvas-1.0.0/src/cutecanvas/ui/transform_box.py +57 -0
  538. cutecanvas-1.0.0/src/cutecanvas/ui/transform_cursor.py +107 -0
  539. cutecanvas-1.0.0/src/cutecanvas/ui/vector_nodes.py +59 -0
  540. cutecanvas-1.0.0/src/cutecanvas/ui/vector_text.py +45 -0
  541. cutecanvas-1.0.0/src/cutecanvas/vector/__init__.py +22 -0
  542. cutecanvas-1.0.0/src/cutecanvas/vector/conversion.py +557 -0
  543. cutecanvas-1.0.0/src/cutecanvas/vector/conversion_products.py +217 -0
  544. cutecanvas-1.0.0/src/cutecanvas/vector/descriptor_factory.py +78 -0
  545. cutecanvas-1.0.0/src/cutecanvas/vector/document_core.py +67 -0
  546. cutecanvas-1.0.0/src/cutecanvas/vector/editing.py +337 -0
  547. cutecanvas-1.0.0/src/cutecanvas/vector/effects.py +220 -0
  548. cutecanvas-1.0.0/src/cutecanvas/vector/facade.py +593 -0
  549. cutecanvas-1.0.0/src/cutecanvas/vector/install.py +223 -0
  550. cutecanvas-1.0.0/src/cutecanvas/vector/interaction.py +189 -0
  551. cutecanvas-1.0.0/src/cutecanvas/vector/layers.py +234 -0
  552. cutecanvas-1.0.0/src/cutecanvas/vector/mask_cache.py +277 -0
  553. cutecanvas-1.0.0/src/cutecanvas/vector/node_edit.py +423 -0
  554. cutecanvas-1.0.0/src/cutecanvas/vector/node_tool.py +112 -0
  555. cutecanvas-1.0.0/src/cutecanvas/vector/presentation.py +74 -0
  556. cutecanvas-1.0.0/src/cutecanvas/vector/projection.py +151 -0
  557. cutecanvas-1.0.0/src/cutecanvas/vector/public.py +146 -0
  558. cutecanvas-1.0.0/src/cutecanvas/vector/selection.py +70 -0
  559. cutecanvas-1.0.0/src/cutecanvas/vector/source_capabilities.py +126 -0
  560. cutecanvas-1.0.0/src/cutecanvas/vector/store.py +119 -0
  561. cutecanvas-1.0.0/src/cutecanvas/vector/targets.py +156 -0
  562. cutecanvas-1.0.0/src/cutecanvas/vector/text_edit.py +525 -0
  563. cutecanvas-1.0.0/src/cutecanvas/vector/text_paths.py +148 -0
  564. cutecanvas-1.0.0/src/cutecanvas/vector/text_tool.py +104 -0
  565. cutecanvas-1.0.0/src/cutecanvas/vector/tools.py +360 -0
  566. cutecanvas-1.0.0/src/cutecanvas.egg-info/PKG-INFO +284 -0
  567. cutecanvas-1.0.0/src/cutecanvas.egg-info/SOURCES.txt +823 -0
  568. cutecanvas-1.0.0/src/cutecanvas.egg-info/dependency_links.txt +1 -0
  569. cutecanvas-1.0.0/src/cutecanvas.egg-info/not-zip-safe +1 -0
  570. cutecanvas-1.0.0/src/cutecanvas.egg-info/requires.txt +9 -0
  571. cutecanvas-1.0.0/src/cutecanvas.egg-info/scm_file_list.json +819 -0
  572. cutecanvas-1.0.0/src/cutecanvas.egg-info/scm_version.json +8 -0
  573. cutecanvas-1.0.0/src/cutecanvas.egg-info/top_level.txt +1 -0
  574. cutecanvas-1.0.0/tests/conftest.py +113 -0
  575. cutecanvas-1.0.0/tests/cutecanvas_test_support/__init__.py +17 -0
  576. cutecanvas-1.0.0/tests/cutecanvas_test_support/config.py +24 -0
  577. cutecanvas-1.0.0/tests/cutecanvas_test_support/execution_backend.py +375 -0
  578. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/README.md +122 -0
  579. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/__init__.py +65 -0
  580. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/__main__.py +137 -0
  581. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/abuse_model.py +260 -0
  582. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/abuse_runner.py +882 -0
  583. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/campaign.py +146 -0
  584. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/editor_workflow.py +435 -0
  585. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/high_dpi_navigation.py +350 -0
  586. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/high_dpi_viewport_resize.py +112 -0
  587. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/input_driver.py +275 -0
  588. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/minimizer.py +72 -0
  589. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/mounted_qpane.py +598 -0
  590. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/pointer_transition_probe.py +149 -0
  591. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/process_lock.py +206 -0
  592. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/qt_lifetime.py +32 -0
  593. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/release_probe.py +168 -0
  594. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/scenarios.py +420 -0
  595. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/timing.py +138 -0
  596. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/viewport_resize_probe.py +138 -0
  597. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness/visual_oracle.py +158 -0
  598. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/__init__.py +17 -0
  599. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/comparison_pan_abuse_harness.py +295 -0
  600. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/cutecanvas_navigation_trace_harness.py +1330 -0
  601. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/cutecanvas_pan_performance_harness.py +1120 -0
  602. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/pan_performance_analysis.py +254 -0
  603. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/pan_performance_harness.py +407 -0
  604. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/pan_performance_runtime.py +468 -0
  605. cutecanvas-1.0.0/tests/cutecanvas_test_support/harness_tools/pan_render_harness.py +596 -0
  606. cutecanvas-1.0.0/tests/cutecanvas_test_support/mask_test_utils.py +83 -0
  607. cutecanvas-1.0.0/tests/cutecanvas_test_support/mask_workflow.py +152 -0
  608. cutecanvas-1.0.0/tests/cutecanvas_test_support/render_compare.py +108 -0
  609. cutecanvas-1.0.0/tests/cutecanvas_test_support/render_plan.py +214 -0
  610. cutecanvas-1.0.0/tests/cutecanvas_test_support/repository.py +36 -0
  611. cutecanvas-1.0.0/tests/demos/contract/test_demo_canvas_geometry.py +86 -0
  612. cutecanvas-1.0.0/tests/demos/contract/test_demo_config.py +327 -0
  613. cutecanvas-1.0.0/tests/demos/contract/test_demo_editor_policy.py +49 -0
  614. cutecanvas-1.0.0/tests/demos/integration/test_cutecanvas_demo_bootstrap.py +126 -0
  615. cutecanvas-1.0.0/tests/demos/integration/test_demo_brush_controls.py +119 -0
  616. cutecanvas-1.0.0/tests/demos/integration/test_demo_clone_stamp_controls.py +180 -0
  617. cutecanvas-1.0.0/tests/demos/integration/test_demo_composition_browser.py +583 -0
  618. cutecanvas-1.0.0/tests/demos/integration/test_demo_document_saves.py +61 -0
  619. cutecanvas-1.0.0/tests/demos/integration/test_demo_editor_shortcuts.py +606 -0
  620. cutecanvas-1.0.0/tests/demos/integration/test_demo_image_loading.py +136 -0
  621. cutecanvas-1.0.0/tests/demos/integration/test_demo_layer_inspector.py +514 -0
  622. cutecanvas-1.0.0/tests/demos/integration/test_demo_settings.py +147 -0
  623. cutecanvas-1.0.0/tests/demos/integration/test_demo_tool_focus.py +130 -0
  624. cutecanvas-1.0.0/tests/demos/integration/test_product_demos.py +46 -0
  625. cutecanvas-1.0.0/tests/demos/qt/test_demo_edit_session_controls.py +176 -0
  626. cutecanvas-1.0.0/tests/demos/qt/test_demo_presentations.py +80 -0
  627. cutecanvas-1.0.0/tests/demos/qt/test_demo_shared_edge_resize.py +111 -0
  628. cutecanvas-1.0.0/tests/demos/qt/test_demo_touch_and_pen.py +123 -0
  629. cutecanvas-1.0.0/tests/documents/abuse/test_canvas_resampling_abuse.py +126 -0
  630. cutecanvas-1.0.0/tests/documents/integration/test_autosave.py +358 -0
  631. cutecanvas-1.0.0/tests/documents/integration/test_canvas_content_references.py +264 -0
  632. cutecanvas-1.0.0/tests/documents/integration/test_canvas_crop_persistence.py +58 -0
  633. cutecanvas-1.0.0/tests/documents/integration/test_canvas_crop_rendering.py +43 -0
  634. cutecanvas-1.0.0/tests/documents/integration/test_canvas_document_sessions.py +371 -0
  635. cutecanvas-1.0.0/tests/documents/integration/test_canvas_geometry_workflows.py +358 -0
  636. cutecanvas-1.0.0/tests/documents/integration/test_canvas_projection.py +114 -0
  637. cutecanvas-1.0.0/tests/documents/integration/test_canvas_resampling_runtime.py +112 -0
  638. cutecanvas-1.0.0/tests/documents/integration/test_canvas_workspace.py +799 -0
  639. cutecanvas-1.0.0/tests/documents/integration/test_canvas_workspace_inspection_activation.py +153 -0
  640. cutecanvas-1.0.0/tests/documents/integration/test_composition_archive.py +1054 -0
  641. cutecanvas-1.0.0/tests/documents/integration/test_composition_documents.py +229 -0
  642. cutecanvas-1.0.0/tests/documents/integration/test_composition_edit_history.py +208 -0
  643. cutecanvas-1.0.0/tests/documents/integration/test_composition_layer_edits.py +137 -0
  644. cutecanvas-1.0.0/tests/documents/integration/test_composition_layers.py +212 -0
  645. cutecanvas-1.0.0/tests/documents/integration/test_document_execution_runtime.py +197 -0
  646. cutecanvas-1.0.0/tests/documents/integration/test_headless_image_document_replacement.py +110 -0
  647. cutecanvas-1.0.0/tests/documents/integration/test_project_document_persistence.py +292 -0
  648. cutecanvas-1.0.0/tests/documents/integration/test_project_resources.py +535 -0
  649. cutecanvas-1.0.0/tests/documents/integration/test_workspace_target_budget.py +72 -0
  650. cutecanvas-1.0.0/tests/documents/performance/test_canvas_resampling_performance.py +54 -0
  651. cutecanvas-1.0.0/tests/documents/qt/test_viewport_resize_projection.py +336 -0
  652. cutecanvas-1.0.0/tests/documents/unit/test_layer_geometry_codec.py +53 -0
  653. cutecanvas-1.0.0/tests/documents/unit/test_layer_mapping_codec.py +96 -0
  654. cutecanvas-1.0.0/tests/documents/unit/test_legacy_shared_edges.py +94 -0
  655. cutecanvas-1.0.0/tests/editor/abuse/test_abuse_harness_entrypoint.py +46 -0
  656. cutecanvas-1.0.0/tests/editor/abuse/test_abuse_timing.py +62 -0
  657. cutecanvas-1.0.0/tests/editor/abuse/test_comparison_zoom_abuse.py +389 -0
  658. cutecanvas-1.0.0/tests/editor/abuse/test_native_comparison_pan_abuse.py +74 -0
  659. cutecanvas-1.0.0/tests/editor/abuse/test_pan_performance_harness.py +188 -0
  660. cutecanvas-1.0.0/tests/editor/contract/test_config_strictness.py +98 -0
  661. cutecanvas-1.0.0/tests/editor/contract/test_editor_facade.py +349 -0
  662. cutecanvas-1.0.0/tests/editor/contract/test_editor_policy.py +106 -0
  663. cutecanvas-1.0.0/tests/editor/contract/test_feature_config_descriptors.py +60 -0
  664. cutecanvas-1.0.0/tests/editor/contract/test_feature_config_validation.py +232 -0
  665. cutecanvas-1.0.0/tests/editor/contract/test_feature_config_view.py +102 -0
  666. cutecanvas-1.0.0/tests/editor/contract/test_package_import_order.py +45 -0
  667. cutecanvas-1.0.0/tests/editor/contract/test_performance_isolation.py +58 -0
  668. cutecanvas-1.0.0/tests/editor/contract/test_public_api.py +282 -0
  669. cutecanvas-1.0.0/tests/editor/contract/test_viewport_activation_policy.py +50 -0
  670. cutecanvas-1.0.0/tests/editor/integration/test_active_raster_coordinates.py +90 -0
  671. cutecanvas-1.0.0/tests/editor/integration/test_cycle_interaction_mode.py +159 -0
  672. cutecanvas-1.0.0/tests/editor/integration/test_diagnostics.py +413 -0
  673. cutecanvas-1.0.0/tests/editor/integration/test_editor_overlay_performance.py +70 -0
  674. cutecanvas-1.0.0/tests/editor/integration/test_fallbacks.py +70 -0
  675. cutecanvas-1.0.0/tests/editor/integration/test_feature_coordinator.py +92 -0
  676. cutecanvas-1.0.0/tests/editor/integration/test_headroom_monitor.py +257 -0
  677. cutecanvas-1.0.0/tests/editor/integration/test_navigation_trace.py +261 -0
  678. cutecanvas-1.0.0/tests/editor/integration/test_operation_resolution.py +324 -0
  679. cutecanvas-1.0.0/tests/editor/integration/test_scene_phase8.py +258 -0
  680. cutecanvas-1.0.0/tests/editor/integration/test_source_capabilities.py +120 -0
  681. cutecanvas-1.0.0/tests/editor/integration/test_sparse_raster_grid.py +107 -0
  682. cutecanvas-1.0.0/tests/editor/integration/test_ui_helpers.py +121 -0
  683. cutecanvas-1.0.0/tests/editor/packaging/test_cutecanvas_packaging.py +109 -0
  684. cutecanvas-1.0.0/tests/editor/qt/test_editor_cursor_theme.py +156 -0
  685. cutecanvas-1.0.0/tests/editor/qt/test_editor_lifecycle.py +83 -0
  686. cutecanvas-1.0.0/tests/editor/qt/test_erase_cursor_feedback.py +231 -0
  687. cutecanvas-1.0.0/tests/editor/qt/test_overlays.py +61 -0
  688. cutecanvas-1.0.0/tests/editor/qt/test_pointer_input.py +1388 -0
  689. cutecanvas-1.0.0/tests/editor/qt/test_viewport.py +221 -0
  690. cutecanvas-1.0.0/tests/editor/unit/test_edit_session_coordination.py +225 -0
  691. cutecanvas-1.0.0/tests/editor/unit/test_provisional_history.py +104 -0
  692. cutecanvas-1.0.0/tests/masks/abuse/test_hybrid_mask_edit_continuity.py +310 -0
  693. cutecanvas-1.0.0/tests/masks/abuse/test_hybrid_mask_rendering_abuse.py +862 -0
  694. cutecanvas-1.0.0/tests/masks/abuse/test_mask_abuse_harness.py +1690 -0
  695. cutecanvas-1.0.0/tests/masks/abuse/test_mask_tool_composition_abuse.py +610 -0
  696. cutecanvas-1.0.0/tests/masks/integration/test_coverage_boundary.py +72 -0
  697. cutecanvas-1.0.0/tests/masks/integration/test_coverage_canvas_aperture.py +287 -0
  698. cutecanvas-1.0.0/tests/masks/integration/test_coverage_document.py +346 -0
  699. cutecanvas-1.0.0/tests/masks/integration/test_coverage_filters.py +173 -0
  700. cutecanvas-1.0.0/tests/masks/integration/test_coverage_operations.py +99 -0
  701. cutecanvas-1.0.0/tests/masks/integration/test_coverage_spatial_constraints.py +76 -0
  702. cutecanvas-1.0.0/tests/masks/integration/test_coverage_surface.py +173 -0
  703. cutecanvas-1.0.0/tests/masks/integration/test_host_mask_admission_history.py +113 -0
  704. cutecanvas-1.0.0/tests/masks/integration/test_live_mask_feedback.py +1100 -0
  705. cutecanvas-1.0.0/tests/masks/integration/test_mask_canvas_aperture.py +392 -0
  706. cutecanvas-1.0.0/tests/masks/integration/test_mask_diagnostics.py +60 -0
  707. cutecanvas-1.0.0/tests/masks/integration/test_mask_image_ops.py +133 -0
  708. cutecanvas-1.0.0/tests/masks/integration/test_mask_patch_history.py +98 -0
  709. cutecanvas-1.0.0/tests/masks/integration/test_mask_projection.py +227 -0
  710. cutecanvas-1.0.0/tests/masks/integration/test_mask_render_geometry.py +511 -0
  711. cutecanvas-1.0.0/tests/masks/integration/test_mask_service_io.py +421 -0
  712. cutecanvas-1.0.0/tests/masks/integration/test_mask_service_prefetch.py +565 -0
  713. cutecanvas-1.0.0/tests/masks/integration/test_mask_tools.py +738 -0
  714. cutecanvas-1.0.0/tests/masks/integration/test_masking.py +44 -0
  715. cutecanvas-1.0.0/tests/masks/integration/test_shared_mask_view_invalidation.py +267 -0
  716. cutecanvas-1.0.0/tests/masks/integration/test_stale_mask_flash_diagnostic.py +184 -0
  717. cutecanvas-1.0.0/tests/masks/integration/test_vector_mask_cache.py +185 -0
  718. cutecanvas-1.0.0/tests/masks/performance/test_spatial_paint_latency.py +113 -0
  719. cutecanvas-1.0.0/tests/masks/qt/test_mask_cursor_refresh.py +50 -0
  720. cutecanvas-1.0.0/tests/masks/qt/test_mask_transform_rotation.py +367 -0
  721. cutecanvas-1.0.0/tests/masks/qt/test_mask_workflow_details.py +229 -0
  722. cutecanvas-1.0.0/tests/masks/qt/test_mask_workflows.py +3173 -0
  723. cutecanvas-1.0.0/tests/masks/qt/test_spatial_paint_handoff.py +106 -0
  724. cutecanvas-1.0.0/tests/painting/abuse/test_clone_stamp_abuse_harness.py +1294 -0
  725. cutecanvas-1.0.0/tests/painting/abuse/test_paint_abuse_harness.py +609 -0
  726. cutecanvas-1.0.0/tests/painting/abuse/test_pixel_move_abuse_harness.py +1095 -0
  727. cutecanvas-1.0.0/tests/painting/integration/test_clone_stamp_tool.py +267 -0
  728. cutecanvas-1.0.0/tests/painting/integration/test_color_raster_surface.py +65 -0
  729. cutecanvas-1.0.0/tests/painting/integration/test_editable_raster_asset_revisions.py +94 -0
  730. cutecanvas-1.0.0/tests/painting/integration/test_editable_raster_layers.py +394 -0
  731. cutecanvas-1.0.0/tests/painting/integration/test_floating_pixel_edits.py +466 -0
  732. cutecanvas-1.0.0/tests/painting/integration/test_flood_fill.py +135 -0
  733. cutecanvas-1.0.0/tests/painting/integration/test_paint_bucket_tool.py +54 -0
  734. cutecanvas-1.0.0/tests/painting/integration/test_painting_engine.py +1179 -0
  735. cutecanvas-1.0.0/tests/painting/integration/test_pixel_extraction.py +69 -0
  736. cutecanvas-1.0.0/tests/painting/integration/test_pixel_translation.py +244 -0
  737. cutecanvas-1.0.0/tests/painting/integration/test_qt_dab_painter.py +70 -0
  738. cutecanvas-1.0.0/tests/painting/integration/test_raster_surface_api.py +458 -0
  739. cutecanvas-1.0.0/tests/painting/performance/test_pixel_translation_performance.py +106 -0
  740. cutecanvas-1.0.0/tests/painting/qt/test_fill_workflows.py +162 -0
  741. cutecanvas-1.0.0/tests/rendering/abuse/test_large_raster_rendering_abuse.py +136 -0
  742. cutecanvas-1.0.0/tests/rendering/abuse/test_mask_transient_tile_demand.py +236 -0
  743. cutecanvas-1.0.0/tests/rendering/abuse/test_presentation_abuse_harness.py +522 -0
  744. cutecanvas-1.0.0/tests/rendering/contract/test_canvas_overlay_contracts.py +54 -0
  745. cutecanvas-1.0.0/tests/rendering/integration/test_cache_coordinator.py +528 -0
  746. cutecanvas-1.0.0/tests/rendering/integration/test_cache_settings.py +208 -0
  747. cutecanvas-1.0.0/tests/rendering/integration/test_cache_usage_signals.py +120 -0
  748. cutecanvas-1.0.0/tests/rendering/integration/test_canvas_grid_stability.py +194 -0
  749. cutecanvas-1.0.0/tests/rendering/integration/test_layer_edge_modifications.py +289 -0
  750. cutecanvas-1.0.0/tests/rendering/integration/test_layer_mapping_preview.py +167 -0
  751. cutecanvas-1.0.0/tests/rendering/integration/test_pyramid_cache_eviction.py +97 -0
  752. cutecanvas-1.0.0/tests/rendering/integration/test_pyramid_manager.py +138 -0
  753. cutecanvas-1.0.0/tests/rendering/integration/test_renderer_perf_guard.py +55 -0
  754. cutecanvas-1.0.0/tests/rendering/integration/test_renderer_scroll_buffers.py +1390 -0
  755. cutecanvas-1.0.0/tests/rendering/integration/test_renderer_strategy_dispatch.py +133 -0
  756. cutecanvas-1.0.0/tests/rendering/integration/test_sampled_transition_tiles.py +222 -0
  757. cutecanvas-1.0.0/tests/rendering/integration/test_scene_layer_scope.py +60 -0
  758. cutecanvas-1.0.0/tests/rendering/integration/test_tiles_cache_eviction.py +91 -0
  759. cutecanvas-1.0.0/tests/rendering/integration/test_tiles_manager.py +222 -0
  760. cutecanvas-1.0.0/tests/rendering/qt/test_canvas_comparison_presentation.py +843 -0
  761. cutecanvas-1.0.0/tests/rendering/qt/test_canvas_viewport_specs.py +235 -0
  762. cutecanvas-1.0.0/tests/sam/contract/test_mask_sampling_policy.py +82 -0
  763. cutecanvas-1.0.0/tests/sam/integration/test_sam_cache_consumer.py +213 -0
  764. cutecanvas-1.0.0/tests/sam/integration/test_sam_feature.py +501 -0
  765. cutecanvas-1.0.0/tests/sam/integration/test_sam_manager.py +564 -0
  766. cutecanvas-1.0.0/tests/sam/integration/test_sam_service.py +406 -0
  767. cutecanvas-1.0.0/tests/sam/integration/test_sam_tools.py +391 -0
  768. cutecanvas-1.0.0/tests/sam/integration/test_smart_segmentation_tools.py +155 -0
  769. cutecanvas-1.0.0/tests/selection/integration/test_fragment_projection.py +50 -0
  770. cutecanvas-1.0.0/tests/selection/integration/test_pixel_selection.py +238 -0
  771. cutecanvas-1.0.0/tests/selection/integration/test_pixel_selection_modifications.py +378 -0
  772. cutecanvas-1.0.0/tests/selection/integration/test_selected_pixel_movement.py +999 -0
  773. cutecanvas-1.0.0/tests/selection/integration/test_selection_geometry.py +78 -0
  774. cutecanvas-1.0.0/tests/selection/integration/test_selection_modification_products.py +164 -0
  775. cutecanvas-1.0.0/tests/selection/integration/test_selection_projection.py +292 -0
  776. cutecanvas-1.0.0/tests/selection/integration/test_selection_tools.py +537 -0
  777. cutecanvas-1.0.0/tests/selection/integration/test_selection_translation_interaction.py +106 -0
  778. cutecanvas-1.0.0/tests/tools/abuse/test_affine_transform_abuse_harness.py +774 -0
  779. cutecanvas-1.0.0/tests/tools/abuse/test_authoring_snapping_abuse.py +443 -0
  780. cutecanvas-1.0.0/tests/tools/abuse/test_placed_asset_abuse_harness.py +302 -0
  781. cutecanvas-1.0.0/tests/tools/abuse/test_shared_edge_group_abuse.py +106 -0
  782. cutecanvas-1.0.0/tests/tools/abuse/test_snapping_abuse_harness.py +418 -0
  783. cutecanvas-1.0.0/tests/tools/abuse/test_transform_snapping_abuse.py +91 -0
  784. cutecanvas-1.0.0/tests/tools/abuse/test_vector_abuse_harness.py +1013 -0
  785. cutecanvas-1.0.0/tests/tools/integration/test_authoring_snap_resolution.py +274 -0
  786. cutecanvas-1.0.0/tests/tools/integration/test_document_export_snapshots.py +90 -0
  787. cutecanvas-1.0.0/tests/tools/integration/test_host_layer_authoring.py +344 -0
  788. cutecanvas-1.0.0/tests/tools/integration/test_move_correctness_regressions.py +149 -0
  789. cutecanvas-1.0.0/tests/tools/integration/test_move_layer_sets.py +264 -0
  790. cutecanvas-1.0.0/tests/tools/integration/test_move_snapping_regressions.py +98 -0
  791. cutecanvas-1.0.0/tests/tools/integration/test_move_tool.py +320 -0
  792. cutecanvas-1.0.0/tests/tools/integration/test_movement_snapping.py +465 -0
  793. cutecanvas-1.0.0/tests/tools/integration/test_oriented_edge_snapping.py +149 -0
  794. cutecanvas-1.0.0/tests/tools/integration/test_placed_assets.py +293 -0
  795. cutecanvas-1.0.0/tests/tools/integration/test_polygon_coverage_authoring.py +93 -0
  796. cutecanvas-1.0.0/tests/tools/integration/test_polygon_coverage_tool.py +232 -0
  797. cutecanvas-1.0.0/tests/tools/integration/test_rail_snapping.py +215 -0
  798. cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_corner_topology.py +135 -0
  799. cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_discovery.py +311 -0
  800. cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_endpoint_snapping.py +118 -0
  801. cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_geometry.py +401 -0
  802. cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_presentation.py +103 -0
  803. cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_resize_tool.py +263 -0
  804. cutecanvas-1.0.0/tests/tools/integration/test_shared_edge_translation.py +151 -0
  805. cutecanvas-1.0.0/tests/tools/integration/test_snapping_engine.py +298 -0
  806. cutecanvas-1.0.0/tests/tools/integration/test_tool_manager.py +394 -0
  807. cutecanvas-1.0.0/tests/tools/integration/test_transform_snap_resolution.py +344 -0
  808. cutecanvas-1.0.0/tests/tools/integration/test_transform_tool.py +197 -0
  809. cutecanvas-1.0.0/tests/tools/integration/test_vector_editor.py +387 -0
  810. cutecanvas-1.0.0/tests/tools/integration/test_vector_text.py +248 -0
  811. cutecanvas-1.0.0/tests/tools/integration/test_vector_tools.py +213 -0
  812. cutecanvas-1.0.0/tests/tools/performance/test_oriented_edge_index_performance.py +58 -0
  813. cutecanvas-1.0.0/tests/tools/performance/test_shared_edge_session_performance.py +110 -0
  814. cutecanvas-1.0.0/tests/tools/performance/test_shared_edge_translation_performance.py +150 -0
  815. cutecanvas-1.0.0/tests/tools/qt/test_angled_shared_edge_resize.py +284 -0
  816. cutecanvas-1.0.0/tests/tools/qt/test_authoring_snap_input.py +177 -0
  817. cutecanvas-1.0.0/tests/tools/qt/test_bounded_transform_interop.py +305 -0
  818. cutecanvas-1.0.0/tests/tools/qt/test_polygon_coverage.py +113 -0
  819. cutecanvas-1.0.0/tests/tools/qt/test_shared_edge_corner_interaction.py +192 -0
  820. cutecanvas-1.0.0/tests/tools/qt/test_shared_edge_endpoint_continuity.py +242 -0
  821. cutecanvas-1.0.0/tests/tools/qt/test_shared_edge_feedback.py +56 -0
  822. cutecanvas-1.0.0/tests/tools/qt/test_shared_edge_groups.py +239 -0
  823. cutecanvas-1.0.0/tests/tools/qt/test_shared_edge_resize.py +833 -0
  824. cutecanvas-1.0.0/tests/tools/qt/test_transform_snapping.py +301 -0
  825. 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
@@ -0,0 +1,7 @@
1
+ # CHANGELOG
2
+
3
+ <!-- version list -->
4
+
5
+ ## v1.0.0 (2026-08-11)
6
+
7
+ - Initial Release