snapmockit 1.2.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 (503) hide show
  1. snapmockit-1.2.0/.gitignore +42 -0
  2. snapmockit-1.2.0/LICENSE +21 -0
  3. snapmockit-1.2.0/PKG-INFO +179 -0
  4. snapmockit-1.2.0/README.md +145 -0
  5. snapmockit-1.2.0/packaging/appimage/build.py +304 -0
  6. snapmockit-1.2.0/packaging/appimage/entrypoint.sh +5 -0
  7. snapmockit-1.2.0/packaging/appimage/io.github.dbower44022.snapmockit.appdata.xml +36 -0
  8. snapmockit-1.2.0/packaging/appimage/io.github.dbower44022.snapmockit.desktop +13 -0
  9. snapmockit-1.2.0/packaging/appimage/io.github.dbower44022.snapmockit.xml +10 -0
  10. snapmockit-1.2.0/packaging/appimage/smoke.sh +41 -0
  11. snapmockit-1.2.0/packaging/flatpak/build.py +352 -0
  12. snapmockit-1.2.0/packaging/flatpak/io.github.dbower44022.snapmockit.yml +82 -0
  13. snapmockit-1.2.0/packaging/flatpak/python3-deps.json +29 -0
  14. snapmockit-1.2.0/packaging/flatpak/smoke.sh +51 -0
  15. snapmockit-1.2.0/packaging/flatpak/snapmockit.sh +14 -0
  16. snapmockit-1.2.0/pyproject.toml +114 -0
  17. snapmockit-1.2.0/snapmock/__init__.py +3 -0
  18. snapmockit-1.2.0/snapmock/__main__.py +6 -0
  19. snapmockit-1.2.0/snapmock/app.py +131 -0
  20. snapmockit-1.2.0/snapmock/capture/__init__.py +66 -0
  21. snapmockit-1.2.0/snapmock/capture/backend.py +315 -0
  22. snapmockit-1.2.0/snapmock/capture/cli.py +62 -0
  23. snapmockit-1.2.0/snapmock/capture/compositing.py +99 -0
  24. snapmockit-1.2.0/snapmock/capture/countdown.py +73 -0
  25. snapmockit-1.2.0/snapmock/capture/macos.py +69 -0
  26. snapmockit-1.2.0/snapmock/capture/manager.py +705 -0
  27. snapmockit-1.2.0/snapmock/capture/models.py +259 -0
  28. snapmockit-1.2.0/snapmock/capture/onboarding.py +197 -0
  29. snapmockit-1.2.0/snapmock/capture/overlay.py +672 -0
  30. snapmockit-1.2.0/snapmock/capture/single_instance.py +154 -0
  31. snapmockit-1.2.0/snapmock/capture/sound.py +32 -0
  32. snapmockit-1.2.0/snapmock/capture/tray.py +12 -0
  33. snapmockit-1.2.0/snapmock/capture/wayland_portal.py +217 -0
  34. snapmockit-1.2.0/snapmock/capture/window_state.py +103 -0
  35. snapmockit-1.2.0/snapmock/capture/windows.py +738 -0
  36. snapmockit-1.2.0/snapmock/capture/x11.py +651 -0
  37. snapmockit-1.2.0/snapmock/commands/__init__.py +5 -0
  38. snapmockit-1.2.0/snapmock/commands/add_item.py +37 -0
  39. snapmockit-1.2.0/snapmock/commands/arrange_commands.py +278 -0
  40. snapmockit-1.2.0/snapmock/commands/blur_commands.py +52 -0
  41. snapmockit-1.2.0/snapmock/commands/canvas_property_commands.py +63 -0
  42. snapmockit-1.2.0/snapmock/commands/canvas_transform_commands.py +113 -0
  43. snapmockit-1.2.0/snapmock/commands/eyedropper_commands.py +56 -0
  44. snapmockit-1.2.0/snapmock/commands/geometry_commands.py +138 -0
  45. snapmockit-1.2.0/snapmock/commands/group_commands.py +221 -0
  46. snapmockit-1.2.0/snapmock/commands/guide_commands.py +86 -0
  47. snapmockit-1.2.0/snapmock/commands/layer_commands.py +259 -0
  48. snapmockit-1.2.0/snapmock/commands/macro_command.py +23 -0
  49. snapmockit-1.2.0/snapmock/commands/marker_commands.py +136 -0
  50. snapmockit-1.2.0/snapmock/commands/merge_commands.py +163 -0
  51. snapmockit-1.2.0/snapmock/commands/modify_property.py +93 -0
  52. snapmockit-1.2.0/snapmock/commands/move_item_layer.py +51 -0
  53. snapmockit-1.2.0/snapmock/commands/move_items.py +45 -0
  54. snapmockit-1.2.0/snapmock/commands/move_tail_command.py +93 -0
  55. snapmockit-1.2.0/snapmock/commands/raster_commands.py +335 -0
  56. snapmockit-1.2.0/snapmock/commands/remove_item.py +36 -0
  57. snapmockit-1.2.0/snapmock/commands/scale_geometry_command.py +27 -0
  58. snapmockit-1.2.0/snapmock/commands/text_edit_command.py +109 -0
  59. snapmockit-1.2.0/snapmock/commands/text_format_command.py +85 -0
  60. snapmockit-1.2.0/snapmock/commands/transform_item.py +39 -0
  61. snapmockit-1.2.0/snapmock/config/__init__.py +1 -0
  62. snapmockit-1.2.0/snapmock/config/constants.py +487 -0
  63. snapmockit-1.2.0/snapmock/config/migration.py +294 -0
  64. snapmockit-1.2.0/snapmock/config/packaging.py +174 -0
  65. snapmockit-1.2.0/snapmock/config/settings.py +718 -0
  66. snapmockit-1.2.0/snapmock/config/shortcuts.py +112 -0
  67. snapmockit-1.2.0/snapmock/core/__init__.py +1 -0
  68. snapmockit-1.2.0/snapmock/core/clipboard_manager.py +131 -0
  69. snapmockit-1.2.0/snapmock/core/command_stack.py +206 -0
  70. snapmockit-1.2.0/snapmock/core/document.py +120 -0
  71. snapmockit-1.2.0/snapmock/core/document_manager.py +137 -0
  72. snapmockit-1.2.0/snapmock/core/emoji_data.py +258 -0
  73. snapmockit-1.2.0/snapmock/core/guides.py +81 -0
  74. snapmockit-1.2.0/snapmock/core/layer.py +137 -0
  75. snapmockit-1.2.0/snapmock/core/layer_manager.py +212 -0
  76. snapmockit-1.2.0/snapmock/core/path_utils.py +430 -0
  77. snapmockit-1.2.0/snapmock/core/process_memory.py +56 -0
  78. snapmockit-1.2.0/snapmock/core/render_engine.py +314 -0
  79. snapmockit-1.2.0/snapmock/core/rich_text_mixin.py +275 -0
  80. snapmockit-1.2.0/snapmock/core/scene.py +247 -0
  81. snapmockit-1.2.0/snapmock/core/selection_manager.py +90 -0
  82. snapmockit-1.2.0/snapmock/core/stamp_library.py +362 -0
  83. snapmockit-1.2.0/snapmock/core/theme_manager.py +430 -0
  84. snapmockit-1.2.0/snapmock/core/tool_themes.py +900 -0
  85. snapmockit-1.2.0/snapmock/core/update_check.py +246 -0
  86. snapmockit-1.2.0/snapmock/core/view.py +1451 -0
  87. snapmockit-1.2.0/snapmock/io/__init__.py +1 -0
  88. snapmockit-1.2.0/snapmock/io/exporter.py +467 -0
  89. snapmockit-1.2.0/snapmock/io/importer.py +53 -0
  90. snapmockit-1.2.0/snapmock/io/project_serializer.py +344 -0
  91. snapmockit-1.2.0/snapmock/io/rtf_utils.py +123 -0
  92. snapmockit-1.2.0/snapmock/io/snagit_reader.py +400 -0
  93. snapmockit-1.2.0/snapmock/io/snagit_writer.py +570 -0
  94. snapmockit-1.2.0/snapmock/items/__init__.py +1 -0
  95. snapmockit-1.2.0/snapmock/items/arc_item.py +338 -0
  96. snapmockit-1.2.0/snapmock/items/arrow_item.py +576 -0
  97. snapmockit-1.2.0/snapmock/items/base_item.py +310 -0
  98. snapmockit-1.2.0/snapmock/items/blur_item.py +671 -0
  99. snapmockit-1.2.0/snapmock/items/callout_item.py +786 -0
  100. snapmockit-1.2.0/snapmock/items/ellipse_item.py +80 -0
  101. snapmockit-1.2.0/snapmock/items/emoji_item.py +257 -0
  102. snapmockit-1.2.0/snapmock/items/freehand_item.py +578 -0
  103. snapmockit-1.2.0/snapmock/items/group_item.py +258 -0
  104. snapmockit-1.2.0/snapmock/items/highlight_item.py +205 -0
  105. snapmockit-1.2.0/snapmock/items/line_item.py +91 -0
  106. snapmockit-1.2.0/snapmock/items/mask_utils.py +178 -0
  107. snapmockit-1.2.0/snapmock/items/numbered_step_item.py +655 -0
  108. snapmockit-1.2.0/snapmock/items/polygon_item.py +317 -0
  109. snapmockit-1.2.0/snapmock/items/raster_region_item.py +105 -0
  110. snapmockit-1.2.0/snapmock/items/rectangle_item.py +245 -0
  111. snapmockit-1.2.0/snapmock/items/shadow.py +298 -0
  112. snapmockit-1.2.0/snapmock/items/stamp_item.py +351 -0
  113. snapmockit-1.2.0/snapmock/items/text_item.py +591 -0
  114. snapmockit-1.2.0/snapmock/items/vector_item.py +353 -0
  115. snapmockit-1.2.0/snapmock/library/__init__.py +1 -0
  116. snapmockit-1.2.0/snapmock/library/commands.py +129 -0
  117. snapmockit-1.2.0/snapmock/library/file_info.py +84 -0
  118. snapmockit-1.2.0/snapmock/library/manager.py +632 -0
  119. snapmockit-1.2.0/snapmock/library/model.py +574 -0
  120. snapmockit-1.2.0/snapmock/library/render.py +80 -0
  121. snapmockit-1.2.0/snapmock/main_window.py +4478 -0
  122. snapmockit-1.2.0/snapmock/resources/__init__.py +1 -0
  123. snapmockit-1.2.0/snapmock/resources/emoji/LICENSE +41 -0
  124. snapmockit-1.2.0/snapmock/resources/emoji/README.md +27 -0
  125. snapmockit-1.2.0/snapmock/resources/emoji/emoji.json +1 -0
  126. snapmockit-1.2.0/snapmock/resources/icons/snapmockit.svg +16 -0
  127. snapmockit-1.2.0/snapmock/resources/icons/tabler/LICENSE +21 -0
  128. snapmockit-1.2.0/snapmock/resources/icons/tabler/README.md +17 -0
  129. snapmockit-1.2.0/snapmock/resources/icons/tabler/app-window.svg +21 -0
  130. snapmockit-1.2.0/snapmock/resources/icons/tabler/arrow-back-up.svg +20 -0
  131. snapmockit-1.2.0/snapmock/resources/icons/tabler/arrow-bar-to-down.svg +22 -0
  132. snapmockit-1.2.0/snapmock/resources/icons/tabler/arrow-bar-to-up.svg +22 -0
  133. snapmockit-1.2.0/snapmock/resources/icons/tabler/arrow-down.svg +21 -0
  134. snapmockit-1.2.0/snapmock/resources/icons/tabler/arrow-forward-up.svg +20 -0
  135. snapmockit-1.2.0/snapmock/resources/icons/tabler/arrow-up-right.svg +20 -0
  136. snapmockit-1.2.0/snapmock/resources/icons/tabler/arrow-up.svg +21 -0
  137. snapmockit-1.2.0/snapmock/resources/icons/tabler/aspect-ratio.svg +21 -0
  138. snapmockit-1.2.0/snapmock/resources/icons/tabler/blur.svg +25 -0
  139. snapmockit-1.2.0/snapmock/resources/icons/tabler/book.svg +23 -0
  140. snapmockit-1.2.0/snapmock/resources/icons/tabler/border-inner.svg +32 -0
  141. snapmockit-1.2.0/snapmock/resources/icons/tabler/bug.svg +27 -0
  142. snapmockit-1.2.0/snapmock/resources/icons/tabler/camera.svg +20 -0
  143. snapmockit-1.2.0/snapmock/resources/icons/tabler/chevron-left.svg +19 -0
  144. snapmockit-1.2.0/snapmock/resources/icons/tabler/chevron-right.svg +19 -0
  145. snapmockit-1.2.0/snapmock/resources/icons/tabler/circle-number-1.svg +20 -0
  146. snapmockit-1.2.0/snapmock/resources/icons/tabler/circle.svg +19 -0
  147. snapmockit-1.2.0/snapmock/resources/icons/tabler/clipboard-check.svg +21 -0
  148. snapmockit-1.2.0/snapmock/resources/icons/tabler/clipboard.svg +20 -0
  149. snapmockit-1.2.0/snapmock/resources/icons/tabler/color-picker.svg +20 -0
  150. snapmockit-1.2.0/snapmock/resources/icons/tabler/color-swatch.svg +22 -0
  151. snapmockit-1.2.0/snapmock/resources/icons/tabler/components-off.svg +23 -0
  152. snapmockit-1.2.0/snapmock/resources/icons/tabler/components.svg +22 -0
  153. snapmockit-1.2.0/snapmock/resources/icons/tabler/copy-plus.svg +22 -0
  154. snapmockit-1.2.0/snapmock/resources/icons/tabler/copy.svg +20 -0
  155. snapmockit-1.2.0/snapmock/resources/icons/tabler/crop.svg +20 -0
  156. snapmockit-1.2.0/snapmock/resources/icons/tabler/crosshair.svg +24 -0
  157. snapmockit-1.2.0/snapmock/resources/icons/tabler/cut.svg +22 -0
  158. snapmockit-1.2.0/snapmock/resources/icons/tabler/deselect.svg +35 -0
  159. snapmockit-1.2.0/snapmock/resources/icons/tabler/device-desktop.svg +22 -0
  160. snapmockit-1.2.0/snapmock/resources/icons/tabler/device-floppy.svg +21 -0
  161. snapmockit-1.2.0/snapmock/resources/icons/tabler/download.svg +21 -0
  162. snapmockit-1.2.0/snapmock/resources/icons/tabler/external-link.svg +21 -0
  163. snapmockit-1.2.0/snapmock/resources/icons/tabler/eye-off.svg +21 -0
  164. snapmockit-1.2.0/snapmock/resources/icons/tabler/eye.svg +20 -0
  165. snapmockit-1.2.0/snapmock/resources/icons/tabler/file-export.svg +20 -0
  166. snapmockit-1.2.0/snapmock/resources/icons/tabler/file-plus.svg +22 -0
  167. snapmockit-1.2.0/snapmock/resources/icons/tabler/flip-horizontal.svg +21 -0
  168. snapmockit-1.2.0/snapmock/resources/icons/tabler/flip-vertical.svg +21 -0
  169. snapmockit-1.2.0/snapmock/resources/icons/tabler/focus-centered.svg +23 -0
  170. snapmockit-1.2.0/snapmock/resources/icons/tabler/folder-open.svg +19 -0
  171. snapmockit-1.2.0/snapmock/resources/icons/tabler/folder-plus.svg +21 -0
  172. snapmockit-1.2.0/snapmock/resources/icons/tabler/folder-symlink.svg +21 -0
  173. snapmockit-1.2.0/snapmock/resources/icons/tabler/folder.svg +19 -0
  174. snapmockit-1.2.0/snapmock/resources/icons/tabler/grid-dots.svg +27 -0
  175. snapmockit-1.2.0/snapmock/resources/icons/tabler/hand-move.svg +24 -0
  176. snapmockit-1.2.0/snapmock/resources/icons/tabler/highlight.svg +22 -0
  177. snapmockit-1.2.0/snapmock/resources/icons/tabler/history.svg +20 -0
  178. snapmockit-1.2.0/snapmock/resources/icons/tabler/home.svg +21 -0
  179. snapmockit-1.2.0/snapmock/resources/icons/tabler/info-circle.svg +21 -0
  180. snapmockit-1.2.0/snapmock/resources/icons/tabler/keyboard.svg +26 -0
  181. snapmockit-1.2.0/snapmock/resources/icons/tabler/lasso.svg +21 -0
  182. snapmockit-1.2.0/snapmock/resources/icons/tabler/layers-difference.svg +23 -0
  183. snapmockit-1.2.0/snapmock/resources/icons/tabler/layers-intersect.svg +20 -0
  184. snapmockit-1.2.0/snapmock/resources/icons/tabler/layers-union.svg +19 -0
  185. snapmockit-1.2.0/snapmock/resources/icons/tabler/layout-align-bottom.svg +20 -0
  186. snapmockit-1.2.0/snapmock/resources/icons/tabler/layout-align-center.svg +21 -0
  187. snapmockit-1.2.0/snapmock/resources/icons/tabler/layout-align-left.svg +20 -0
  188. snapmockit-1.2.0/snapmock/resources/icons/tabler/layout-align-middle.svg +21 -0
  189. snapmockit-1.2.0/snapmock/resources/icons/tabler/layout-align-right.svg +20 -0
  190. snapmockit-1.2.0/snapmock/resources/icons/tabler/layout-align-top.svg +20 -0
  191. snapmockit-1.2.0/snapmock/resources/icons/tabler/layout-bottombar.svg +20 -0
  192. snapmockit-1.2.0/snapmock/resources/icons/tabler/layout-dashboard.svg +22 -0
  193. snapmockit-1.2.0/snapmock/resources/icons/tabler/layout-distribute-horizontal.svg +21 -0
  194. snapmockit-1.2.0/snapmock/resources/icons/tabler/layout-distribute-vertical.svg +21 -0
  195. snapmockit-1.2.0/snapmock/resources/icons/tabler/line.svg +21 -0
  196. snapmockit-1.2.0/snapmock/resources/icons/tabler/link-off.svg +22 -0
  197. snapmockit-1.2.0/snapmock/resources/icons/tabler/link.svg +21 -0
  198. snapmockit-1.2.0/snapmock/resources/icons/tabler/lock-open.svg +21 -0
  199. snapmockit-1.2.0/snapmock/resources/icons/tabler/lock.svg +21 -0
  200. snapmockit-1.2.0/snapmock/resources/icons/tabler/magnet.svg +21 -0
  201. snapmockit-1.2.0/snapmock/resources/icons/tabler/marquee-2.svg +19 -0
  202. snapmockit-1.2.0/snapmock/resources/icons/tabler/message-2.svg +21 -0
  203. snapmockit-1.2.0/snapmock/resources/icons/tabler/minus.svg +19 -0
  204. snapmockit-1.2.0/snapmock/resources/icons/tabler/mood-smile.svg +22 -0
  205. snapmockit-1.2.0/snapmock/resources/icons/tabler/moon.svg +19 -0
  206. snapmockit-1.2.0/snapmock/resources/icons/tabler/new-section.svg +21 -0
  207. snapmockit-1.2.0/snapmock/resources/icons/tabler/palette.svg +22 -0
  208. snapmockit-1.2.0/snapmock/resources/icons/tabler/pencil.svg +20 -0
  209. snapmockit-1.2.0/snapmock/resources/icons/tabler/photo-plus.svg +24 -0
  210. snapmockit-1.2.0/snapmock/resources/icons/tabler/plus.svg +20 -0
  211. snapmockit-1.2.0/snapmock/resources/icons/tabler/pointer.svg +19 -0
  212. snapmockit-1.2.0/snapmock/resources/icons/tabler/polygon.svg +22 -0
  213. snapmockit-1.2.0/snapmock/resources/icons/tabler/power.svg +20 -0
  214. snapmockit-1.2.0/snapmock/resources/icons/tabler/printer.svg +21 -0
  215. snapmockit-1.2.0/snapmock/resources/icons/tabler/refresh.svg +20 -0
  216. snapmockit-1.2.0/snapmock/resources/icons/tabler/resize.svg +20 -0
  217. snapmockit-1.2.0/snapmock/resources/icons/tabler/rotate-clockwise.svg +19 -0
  218. snapmockit-1.2.0/snapmock/resources/icons/tabler/rotate.svg +19 -0
  219. snapmockit-1.2.0/snapmock/resources/icons/tabler/rubber-stamp.svg +20 -0
  220. snapmockit-1.2.0/snapmock/resources/icons/tabler/ruler.svg +25 -0
  221. snapmockit-1.2.0/snapmock/resources/icons/tabler/scissors.svg +22 -0
  222. snapmockit-1.2.0/snapmock/resources/icons/tabler/screenshot.svg +27 -0
  223. snapmockit-1.2.0/snapmock/resources/icons/tabler/select-all.svg +35 -0
  224. snapmockit-1.2.0/snapmock/resources/icons/tabler/settings.svg +20 -0
  225. snapmockit-1.2.0/snapmock/resources/icons/tabler/square.svg +19 -0
  226. snapmockit-1.2.0/snapmock/resources/icons/tabler/text-recognition.svg +24 -0
  227. snapmockit-1.2.0/snapmock/resources/icons/tabler/trash.svg +23 -0
  228. snapmockit-1.2.0/snapmock/resources/icons/tabler/typography.svg +23 -0
  229. snapmockit-1.2.0/snapmock/resources/icons/tabler/vector-bezier-arc.svg +21 -0
  230. snapmockit-1.2.0/snapmock/resources/icons/tabler/x.svg +20 -0
  231. snapmockit-1.2.0/snapmock/resources/icons/tabler/zoom-in-area.svg +27 -0
  232. snapmockit-1.2.0/snapmock/resources/icons/tabler/zoom-in.svg +22 -0
  233. snapmockit-1.2.0/snapmock/resources/icons/tabler/zoom-out.svg +21 -0
  234. snapmockit-1.2.0/snapmock/resources/icons/tabler/zoom-reset.svg +21 -0
  235. snapmockit-1.2.0/snapmock/resources/icons/tabler/zoom-scan.svg +24 -0
  236. snapmockit-1.2.0/snapmock/resources/sounds/shutter.wav +0 -0
  237. snapmockit-1.2.0/snapmock/resources/stamps/LICENSE +21 -0
  238. snapmockit-1.2.0/snapmock/resources/stamps/README.md +84 -0
  239. snapmockit-1.2.0/snapmock/resources/stamps/arrows/curved-arrow-ccw.svg +14 -0
  240. snapmockit-1.2.0/snapmock/resources/stamps/arrows/curved-arrow-cw.svg +14 -0
  241. snapmockit-1.2.0/snapmock/resources/stamps/arrows/double-arrow-horizontal.svg +16 -0
  242. snapmockit-1.2.0/snapmock/resources/stamps/arrows/double-arrow-vertical.svg +16 -0
  243. snapmockit-1.2.0/snapmock/resources/stamps/arrows/magnifying-glass.svg +17 -0
  244. snapmockit-1.2.0/snapmock/resources/stamps/arrows/pointer-hand.svg +17 -0
  245. snapmockit-1.2.0/snapmock/resources/stamps/arrows/target.svg +16 -0
  246. snapmockit-1.2.0/snapmock/resources/stamps/arrows/thick-arrow-down.svg +14 -0
  247. snapmockit-1.2.0/snapmock/resources/stamps/arrows/thick-arrow-left.svg +14 -0
  248. snapmockit-1.2.0/snapmock/resources/stamps/arrows/thick-arrow-right.svg +14 -0
  249. snapmockit-1.2.0/snapmock/resources/stamps/arrows/thick-arrow-up.svg +14 -0
  250. snapmockit-1.2.0/snapmock/resources/stamps/decorative/box-highlight.svg +2 -0
  251. snapmockit-1.2.0/snapmock/resources/stamps/decorative/bracket-left.svg +2 -0
  252. snapmockit-1.2.0/snapmock/resources/stamps/decorative/bracket-right.svg +2 -0
  253. snapmockit-1.2.0/snapmock/resources/stamps/decorative/brackets.svg +2 -0
  254. snapmockit-1.2.0/snapmock/resources/stamps/decorative/circle-highlight.svg +2 -0
  255. snapmockit-1.2.0/snapmock/resources/stamps/decorative/ribbon.svg +2 -0
  256. snapmockit-1.2.0/snapmock/resources/stamps/decorative/speech-bubble.svg +14 -0
  257. snapmockit-1.2.0/snapmock/resources/stamps/decorative/starburst.svg +2 -0
  258. snapmockit-1.2.0/snapmock/resources/stamps/decorative/swoosh.svg +2 -0
  259. snapmockit-1.2.0/snapmock/resources/stamps/decorative/thought-bubble.svg +2 -0
  260. snapmockit-1.2.0/snapmock/resources/stamps/shapes/bolt.svg +14 -0
  261. snapmockit-1.2.0/snapmock/resources/stamps/shapes/bookmark.svg +14 -0
  262. snapmockit-1.2.0/snapmock/resources/stamps/shapes/checkmark.svg +14 -0
  263. snapmockit-1.2.0/snapmock/resources/stamps/shapes/eye-off.svg +16 -0
  264. snapmockit-1.2.0/snapmock/resources/stamps/shapes/eye.svg +15 -0
  265. snapmockit-1.2.0/snapmock/resources/stamps/shapes/gear.svg +15 -0
  266. snapmockit-1.2.0/snapmock/resources/stamps/shapes/link.svg +16 -0
  267. snapmockit-1.2.0/snapmock/resources/stamps/shapes/lock.svg +16 -0
  268. snapmockit-1.2.0/snapmock/resources/stamps/shapes/minus.svg +14 -0
  269. snapmockit-1.2.0/snapmock/resources/stamps/shapes/pencil.svg +15 -0
  270. snapmockit-1.2.0/snapmock/resources/stamps/shapes/plus.svg +15 -0
  271. snapmockit-1.2.0/snapmock/resources/stamps/shapes/trash.svg +18 -0
  272. snapmockit-1.2.0/snapmock/resources/stamps/shapes/unlink.svg +17 -0
  273. snapmockit-1.2.0/snapmock/resources/stamps/shapes/unlock.svg +16 -0
  274. snapmockit-1.2.0/snapmock/resources/stamps/shapes/warning.svg +16 -0
  275. snapmockit-1.2.0/snapmock/resources/stamps/shapes/x-mark.svg +15 -0
  276. snapmockit-1.2.0/snapmock/resources/stamps/stamp_index.json +1193 -0
  277. snapmockit-1.2.0/snapmock/resources/stamps/status/approved.svg +15 -0
  278. snapmockit-1.2.0/snapmock/resources/stamps/status/attention.svg +16 -0
  279. snapmockit-1.2.0/snapmock/resources/stamps/status/draft.svg +2 -0
  280. snapmockit-1.2.0/snapmock/resources/stamps/status/heart.svg +14 -0
  281. snapmockit-1.2.0/snapmock/resources/stamps/status/info.svg +16 -0
  282. snapmockit-1.2.0/snapmock/resources/stamps/status/question.svg +16 -0
  283. snapmockit-1.2.0/snapmock/resources/stamps/status/rejected.svg +15 -0
  284. snapmockit-1.2.0/snapmock/resources/stamps/status/star.svg +14 -0
  285. snapmockit-1.2.0/snapmock/resources/stamps/status/thumbs-down.svg +14 -0
  286. snapmockit-1.2.0/snapmock/resources/stamps/status/thumbs-up.svg +14 -0
  287. snapmockit-1.2.0/snapmock/resources/stamps/ui/click.svg +2 -0
  288. snapmockit-1.2.0/snapmock/resources/stamps/ui/cursor-arrow.svg +14 -0
  289. snapmockit-1.2.0/snapmock/resources/stamps/ui/cursor-hand.svg +21 -0
  290. snapmockit-1.2.0/snapmock/resources/stamps/ui/double-click.svg +2 -0
  291. snapmockit-1.2.0/snapmock/resources/stamps/ui/drag.svg +19 -0
  292. snapmockit-1.2.0/snapmock/resources/stamps/ui/key.svg +21 -0
  293. snapmockit-1.2.0/snapmock/resources/stamps/ui/right-click.svg +2 -0
  294. snapmockit-1.2.0/snapmock/resources/stamps/ui/scroll.svg +15 -0
  295. snapmockit-1.2.0/snapmock/resources/stamps/ui/tap.svg +2 -0
  296. snapmockit-1.2.0/snapmock/resources/themes/dark.qss +359 -0
  297. snapmockit-1.2.0/snapmock/resources/themes/light.qss +359 -0
  298. snapmockit-1.2.0/snapmock/tools/__init__.py +1 -0
  299. snapmockit-1.2.0/snapmock/tools/arc_tool.py +347 -0
  300. snapmockit-1.2.0/snapmock/tools/arrow_tool.py +222 -0
  301. snapmockit-1.2.0/snapmock/tools/base_tool.py +342 -0
  302. snapmockit-1.2.0/snapmock/tools/blur_edit.py +161 -0
  303. snapmockit-1.2.0/snapmock/tools/blur_tool.py +659 -0
  304. snapmockit-1.2.0/snapmock/tools/callout_tool.py +347 -0
  305. snapmockit-1.2.0/snapmock/tools/crop_tool.py +305 -0
  306. snapmockit-1.2.0/snapmock/tools/ellipse_tool.py +147 -0
  307. snapmockit-1.2.0/snapmock/tools/emoji_tool.py +482 -0
  308. snapmockit-1.2.0/snapmock/tools/eyedropper_tool.py +400 -0
  309. snapmockit-1.2.0/snapmock/tools/freehand_tool.py +316 -0
  310. snapmockit-1.2.0/snapmock/tools/highlight_tool.py +387 -0
  311. snapmockit-1.2.0/snapmock/tools/lasso_select_tool.py +345 -0
  312. snapmockit-1.2.0/snapmock/tools/line_tool.py +123 -0
  313. snapmockit-1.2.0/snapmock/tools/numbered_step_tool.py +387 -0
  314. snapmockit-1.2.0/snapmock/tools/pan_tool.py +83 -0
  315. snapmockit-1.2.0/snapmock/tools/point_edit.py +687 -0
  316. snapmockit-1.2.0/snapmock/tools/polygon_tool.py +506 -0
  317. snapmockit-1.2.0/snapmock/tools/raster_select_tool.py +341 -0
  318. snapmockit-1.2.0/snapmock/tools/rectangle_tool.py +259 -0
  319. snapmockit-1.2.0/snapmock/tools/select_tool.py +1582 -0
  320. snapmockit-1.2.0/snapmock/tools/stamp_tool.py +468 -0
  321. snapmockit-1.2.0/snapmock/tools/text_tool.py +808 -0
  322. snapmockit-1.2.0/snapmock/tools/tool_manager.py +152 -0
  323. snapmockit-1.2.0/snapmock/tools/zoom_tool.py +165 -0
  324. snapmockit-1.2.0/snapmock/ui/__init__.py +1 -0
  325. snapmockit-1.2.0/snapmock/ui/about_dialog.py +119 -0
  326. snapmockit-1.2.0/snapmock/ui/accessibility.py +271 -0
  327. snapmockit-1.2.0/snapmock/ui/collapsible_section.py +76 -0
  328. snapmockit-1.2.0/snapmock/ui/color_picker.py +687 -0
  329. snapmockit-1.2.0/snapmock/ui/context_menus.py +319 -0
  330. snapmockit-1.2.0/snapmock/ui/crop_overlay.py +197 -0
  331. snapmockit-1.2.0/snapmock/ui/cursors.py +341 -0
  332. snapmockit-1.2.0/snapmock/ui/dimension_overlay.py +260 -0
  333. snapmockit-1.2.0/snapmock/ui/document_tabs.py +269 -0
  334. snapmockit-1.2.0/snapmock/ui/emoji_picker.py +395 -0
  335. snapmockit-1.2.0/snapmock/ui/export_dialog.py +565 -0
  336. snapmockit-1.2.0/snapmock/ui/find_replace_bar.py +328 -0
  337. snapmockit-1.2.0/snapmock/ui/find_replace_color_dialog.py +123 -0
  338. snapmockit-1.2.0/snapmock/ui/icons.py +239 -0
  339. snapmockit-1.2.0/snapmock/ui/item_properties_dialog.py +261 -0
  340. snapmockit-1.2.0/snapmock/ui/layer_panel.py +1117 -0
  341. snapmockit-1.2.0/snapmock/ui/layer_properties_dialog.py +117 -0
  342. snapmockit-1.2.0/snapmock/ui/library_panel.py +1132 -0
  343. snapmockit-1.2.0/snapmock/ui/loupe_overlay.py +311 -0
  344. snapmockit-1.2.0/snapmock/ui/manage_presets_dialog.py +286 -0
  345. snapmockit-1.2.0/snapmock/ui/panel_modes.py +50 -0
  346. snapmockit-1.2.0/snapmock/ui/preferences_dialog.py +748 -0
  347. snapmockit-1.2.0/snapmock/ui/property_panel.py +3156 -0
  348. snapmockit-1.2.0/snapmock/ui/resize_canvas_dialog.py +179 -0
  349. snapmockit-1.2.0/snapmock/ui/resize_image_dialog.py +161 -0
  350. snapmockit-1.2.0/snapmock/ui/ruler_widget.py +229 -0
  351. snapmockit-1.2.0/snapmock/ui/selection_overlay.py +188 -0
  352. snapmockit-1.2.0/snapmock/ui/shortcuts_dialog.py +214 -0
  353. snapmockit-1.2.0/snapmock/ui/stamp_library_panel.py +375 -0
  354. snapmockit-1.2.0/snapmock/ui/status_bar.py +203 -0
  355. snapmockit-1.2.0/snapmock/ui/step_inline_editor.py +169 -0
  356. snapmockit-1.2.0/snapmock/ui/toast.py +73 -0
  357. snapmockit-1.2.0/snapmock/ui/tool_options_bar.py +1514 -0
  358. snapmockit-1.2.0/snapmock/ui/tool_themes_dialog.py +362 -0
  359. snapmockit-1.2.0/snapmock/ui/toolbar.py +329 -0
  360. snapmockit-1.2.0/snapmock/ui/transform_handles.py +314 -0
  361. snapmockit-1.2.0/snapmock/ui/unmet_requirements.py +42 -0
  362. snapmockit-1.2.0/snapmock/ui/unsaved_changes_dialog.py +113 -0
  363. snapmockit-1.2.0/snapmock/ui/welcome_panel.py +391 -0
  364. snapmockit-1.2.0/tests/__init__.py +0 -0
  365. snapmockit-1.2.0/tests/conftest.py +137 -0
  366. snapmockit-1.2.0/tests/test_about_dialog.py +32 -0
  367. snapmockit-1.2.0/tests/test_acceptance.py +834 -0
  368. snapmockit-1.2.0/tests/test_accessibility.py +254 -0
  369. snapmockit-1.2.0/tests/test_app.py +87 -0
  370. snapmockit-1.2.0/tests/test_arc_point_edit.py +109 -0
  371. snapmockit-1.2.0/tests/test_arc_tool.py +295 -0
  372. snapmockit-1.2.0/tests/test_arrange_commands.py +228 -0
  373. snapmockit-1.2.0/tests/test_arrow_heads.py +238 -0
  374. snapmockit-1.2.0/tests/test_arrow_lines.py +257 -0
  375. snapmockit-1.2.0/tests/test_blur_brush.py +276 -0
  376. snapmockit-1.2.0/tests/test_blur_brush_edit.py +271 -0
  377. snapmockit-1.2.0/tests/test_blur_mask.py +209 -0
  378. snapmockit-1.2.0/tests/test_blur_modes.py +334 -0
  379. snapmockit-1.2.0/tests/test_blur_performance.py +127 -0
  380. snapmockit-1.2.0/tests/test_blur_source_modes.py +190 -0
  381. snapmockit-1.2.0/tests/test_canvas_area.py +268 -0
  382. snapmockit-1.2.0/tests/test_canvas_handles.py +219 -0
  383. snapmockit-1.2.0/tests/test_canvas_transform_commands.py +99 -0
  384. snapmockit-1.2.0/tests/test_capture/__init__.py +0 -0
  385. snapmockit-1.2.0/tests/test_capture/test_backend.py +85 -0
  386. snapmockit-1.2.0/tests/test_capture/test_cli_and_channel.py +82 -0
  387. snapmockit-1.2.0/tests/test_capture/test_compositing.py +80 -0
  388. snapmockit-1.2.0/tests/test_capture/test_main_window.py +336 -0
  389. snapmockit-1.2.0/tests/test_capture/test_manager.py +510 -0
  390. snapmockit-1.2.0/tests/test_capture/test_models.py +120 -0
  391. snapmockit-1.2.0/tests/test_capture/test_overlay.py +290 -0
  392. snapmockit-1.2.0/tests/test_capture/test_platform_stubs.py +117 -0
  393. snapmockit-1.2.0/tests/test_capture/test_preferences.py +162 -0
  394. snapmockit-1.2.0/tests/test_capture/test_wayland_portal.py +237 -0
  395. snapmockit-1.2.0/tests/test_capture/test_windows.py +335 -0
  396. snapmockit-1.2.0/tests/test_capture/test_x11.py +146 -0
  397. snapmockit-1.2.0/tests/test_ci_workflow.py +217 -0
  398. snapmockit-1.2.0/tests/test_clipboard.py +116 -0
  399. snapmockit-1.2.0/tests/test_clipboard_raster.py +133 -0
  400. snapmockit-1.2.0/tests/test_color_picker.py +253 -0
  401. snapmockit-1.2.0/tests/test_command_stack.py +217 -0
  402. snapmockit-1.2.0/tests/test_constants.py +53 -0
  403. snapmockit-1.2.0/tests/test_context_menus.py +437 -0
  404. snapmockit-1.2.0/tests/test_corner_radii.py +168 -0
  405. snapmockit-1.2.0/tests/test_corner_radius.py +101 -0
  406. snapmockit-1.2.0/tests/test_cursors.py +300 -0
  407. snapmockit-1.2.0/tests/test_dimension_tooltip.py +473 -0
  408. snapmockit-1.2.0/tests/test_documents.py +213 -0
  409. snapmockit-1.2.0/tests/test_drawing_preview_and_hints.py +487 -0
  410. snapmockit-1.2.0/tests/test_emoji_data.py +173 -0
  411. snapmockit-1.2.0/tests/test_emoji_item.py +190 -0
  412. snapmockit-1.2.0/tests/test_export_dialog.py +317 -0
  413. snapmockit-1.2.0/tests/test_eyedropper_apply.py +251 -0
  414. snapmockit-1.2.0/tests/test_eyedropper_bar.py +190 -0
  415. snapmockit-1.2.0/tests/test_eyedropper_loupe.py +228 -0
  416. snapmockit-1.2.0/tests/test_eyedropper_sampling.py +270 -0
  417. snapmockit-1.2.0/tests/test_find_replace_color.py +107 -0
  418. snapmockit-1.2.0/tests/test_freehand_cursor.py +203 -0
  419. snapmockit-1.2.0/tests/test_freehand_fit.py +447 -0
  420. snapmockit-1.2.0/tests/test_freehand_pipeline.py +258 -0
  421. snapmockit-1.2.0/tests/test_freehand_point_edit.py +206 -0
  422. snapmockit-1.2.0/tests/test_freehand_preview.py +319 -0
  423. snapmockit-1.2.0/tests/test_group.py +730 -0
  424. snapmockit-1.2.0/tests/test_guides.py +449 -0
  425. snapmockit-1.2.0/tests/test_help_check_updates.py +295 -0
  426. snapmockit-1.2.0/tests/test_highlight_straightening.py +370 -0
  427. snapmockit-1.2.0/tests/test_integration.py +151 -0
  428. snapmockit-1.2.0/tests/test_inter_tool.py +230 -0
  429. snapmockit-1.2.0/tests/test_io/__init__.py +0 -0
  430. snapmockit-1.2.0/tests/test_io/test_exporter.py +361 -0
  431. snapmockit-1.2.0/tests/test_io/test_importer.py +113 -0
  432. snapmockit-1.2.0/tests/test_io/test_project_serializer.py +179 -0
  433. snapmockit-1.2.0/tests/test_io/test_snagit_reader.py +76 -0
  434. snapmockit-1.2.0/tests/test_item_blend_mode.py +130 -0
  435. snapmockit-1.2.0/tests/test_item_properties_dialog.py +138 -0
  436. snapmockit-1.2.0/tests/test_items.py +196 -0
  437. snapmockit-1.2.0/tests/test_layer_commands.py +44 -0
  438. snapmockit-1.2.0/tests/test_layer_manager.py +208 -0
  439. snapmockit-1.2.0/tests/test_layer_menu_actions.py +315 -0
  440. snapmockit-1.2.0/tests/test_layer_panel.py +449 -0
  441. snapmockit-1.2.0/tests/test_layer_properties_dialog.py +115 -0
  442. snapmockit-1.2.0/tests/test_library_manager.py +512 -0
  443. snapmockit-1.2.0/tests/test_library_panel.py +561 -0
  444. snapmockit-1.2.0/tests/test_line_spacing.py +124 -0
  445. snapmockit-1.2.0/tests/test_locked_layer_edits.py +243 -0
  446. snapmockit-1.2.0/tests/test_main_toolbar.py +231 -0
  447. snapmockit-1.2.0/tests/test_manage_presets_dialog.py +168 -0
  448. snapmockit-1.2.0/tests/test_menus.py +251 -0
  449. snapmockit-1.2.0/tests/test_merge_commands.py +179 -0
  450. snapmockit-1.2.0/tests/test_navigation_keys.py +342 -0
  451. snapmockit-1.2.0/tests/test_numbered_step_editing.py +369 -0
  452. snapmockit-1.2.0/tests/test_numbered_step_item.py +433 -0
  453. snapmockit-1.2.0/tests/test_packaging_appimage.py +221 -0
  454. snapmockit-1.2.0/tests/test_packaging_flatpak.py +259 -0
  455. snapmockit-1.2.0/tests/test_packaging_form.py +217 -0
  456. snapmockit-1.2.0/tests/test_packaging_pypi.py +125 -0
  457. snapmockit-1.2.0/tests/test_paint_cost.py +119 -0
  458. snapmockit-1.2.0/tests/test_placement_hint_timers.py +94 -0
  459. snapmockit-1.2.0/tests/test_point_edit.py +279 -0
  460. snapmockit-1.2.0/tests/test_polygon_point_edit.py +142 -0
  461. snapmockit-1.2.0/tests/test_polygon_tool.py +316 -0
  462. snapmockit-1.2.0/tests/test_post_creation.py +227 -0
  463. snapmockit-1.2.0/tests/test_preferences_dialog.py +274 -0
  464. snapmockit-1.2.0/tests/test_preset_dropdown.py +222 -0
  465. snapmockit-1.2.0/tests/test_process_memory.py +39 -0
  466. snapmockit-1.2.0/tests/test_property_panel.py +328 -0
  467. snapmockit-1.2.0/tests/test_property_panel_phase6.py +255 -0
  468. snapmockit-1.2.0/tests/test_raster_commands.py +241 -0
  469. snapmockit-1.2.0/tests/test_raster_operations.py +423 -0
  470. snapmockit-1.2.0/tests/test_render_engine.py +106 -0
  471. snapmockit-1.2.0/tests/test_responsive.py +214 -0
  472. snapmockit-1.2.0/tests/test_rich_text.py +1372 -0
  473. snapmockit-1.2.0/tests/test_scene.py +42 -0
  474. snapmockit-1.2.0/tests/test_shape_drawing_lifecycle.py +347 -0
  475. snapmockit-1.2.0/tests/test_shape_modifiers.py +339 -0
  476. snapmockit-1.2.0/tests/test_shortcuts_dialog.py +46 -0
  477. snapmockit-1.2.0/tests/test_stamp_item.py +261 -0
  478. snapmockit-1.2.0/tests/test_stamp_library.py +251 -0
  479. snapmockit-1.2.0/tests/test_status_bar.py +131 -0
  480. snapmockit-1.2.0/tests/test_storage_migration.py +312 -0
  481. snapmockit-1.2.0/tests/test_text_item_properties.py +146 -0
  482. snapmockit-1.2.0/tests/test_theme.py +283 -0
  483. snapmockit-1.2.0/tests/test_tool_options_bar.py +349 -0
  484. snapmockit-1.2.0/tests/test_tool_options_overflow.py +123 -0
  485. snapmockit-1.2.0/tests/test_tool_themes.py +413 -0
  486. snapmockit-1.2.0/tests/test_tool_themes_dialog.py +224 -0
  487. snapmockit-1.2.0/tests/test_tools/__init__.py +0 -0
  488. snapmockit-1.2.0/tests/test_tools/test_emoji_tool.py +439 -0
  489. snapmockit-1.2.0/tests/test_tools/test_highlight_tool.py +240 -0
  490. snapmockit-1.2.0/tests/test_tools/test_numbered_step_tool.py +446 -0
  491. snapmockit-1.2.0/tests/test_tools/test_rectangle_tool.py +12 -0
  492. snapmockit-1.2.0/tests/test_tools/test_select_tool.py +533 -0
  493. snapmockit-1.2.0/tests/test_tools/test_stamp_tool.py +462 -0
  494. snapmockit-1.2.0/tests/test_tools/test_tool_manager.py +53 -0
  495. snapmockit-1.2.0/tests/test_tools/test_zoom_tool.py +120 -0
  496. snapmockit-1.2.0/tests/test_transform_resize.py +208 -0
  497. snapmockit-1.2.0/tests/test_update_check.py +250 -0
  498. snapmockit-1.2.0/tests/test_vector_bar_presets.py +257 -0
  499. snapmockit-1.2.0/tests/test_vector_panel.py +196 -0
  500. snapmockit-1.2.0/tests/test_vector_properties.py +329 -0
  501. snapmockit-1.2.0/tests/test_welcome_panel.py +221 -0
  502. snapmockit-1.2.0/tests/test_window_layout.py +91 -0
  503. snapmockit-1.2.0/tests/test_window_management.py +164 -0
@@ -0,0 +1,42 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+
7
+ # Distribution / packaging
8
+ dist/
9
+ build/
10
+ *.egg-info/
11
+ *.egg
12
+
13
+ # Virtual environments
14
+ .venv/
15
+
16
+ # Type checking
17
+ .mypy_cache/
18
+
19
+ # Linting
20
+ .ruff_cache/
21
+
22
+ # Testing
23
+ .pytest_cache/
24
+ htmlcov/
25
+ .coverage
26
+ coverage.xml
27
+
28
+ # IDE
29
+ .vscode/
30
+ .idea/
31
+ *.swp
32
+ *.swo
33
+
34
+ # OS
35
+ .DS_Store
36
+ Thumbs.db
37
+
38
+ PRDs/.~lock.SnapMock-General-UI-PRD.docx#
39
+
40
+ *.snagx
41
+
42
+ Example Snag Files/2020-04-25_10-26-43.MP4
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Doug Bower
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,179 @@
1
+ Metadata-Version: 2.5
2
+ Name: snapmockit
3
+ Version: 1.2.0
4
+ Summary: Snapmockit: open-source multi-platform screenshot annotation and UI mockup tool
5
+ Project-URL: Homepage, https://github.com/dbower44022/snapmockit
6
+ Project-URL: Documentation, https://github.com/dbower44022/snapmockit#readme
7
+ Project-URL: Repository, https://github.com/dbower44022/snapmockit
8
+ Project-URL: Issues, https://github.com/dbower44022/snapmockit/issues
9
+ Project-URL: Changelog, https://github.com/dbower44022/snapmockit/releases
10
+ Author: Doug Bower
11
+ License-Expression: MIT
12
+ License-File: LICENSE
13
+ Keywords: annotation,image editor,mockup,qt,screen capture,screenshot,snagit
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Classifier: Environment :: X11 Applications :: Qt
16
+ Classifier: Intended Audience :: End Users/Desktop
17
+ Classifier: Operating System :: MacOS
18
+ Classifier: Operating System :: Microsoft :: Windows
19
+ Classifier: Operating System :: POSIX :: Linux
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3 :: Only
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Topic :: Multimedia :: Graphics
25
+ Classifier: Topic :: Multimedia :: Graphics :: Capture :: Screen Capture
26
+ Classifier: Topic :: Multimedia :: Graphics :: Editors :: Vector-Based
27
+ Requires-Python: >=3.12
28
+ Requires-Dist: numpy>=1.24
29
+ Requires-Dist: pillow>=10.0
30
+ Requires-Dist: psutil>=7.2.2
31
+ Requires-Dist: pyqt6>=6.5
32
+ Requires-Dist: send2trash>=2.1.0
33
+ Description-Content-Type: text/markdown
34
+
35
+ # Snapmockit
36
+
37
+ Snapmockit is an open-source screenshot annotation and user interface mockup tool for Linux, Windows, and macOS, written in Python with PyQt6. Capture a screen, a window, or a region; annotate it with shapes, arrows, text, callouts, highlights, blur, numbered steps, stamps, and emoji on layers; then export it as PNG, JPEG, SVG, or PDF, or save it as a project to come back to. It reads and writes Snagit's `.snagx` files.
38
+
39
+ Status: the application is complete against its nine product requirements documents (the `PRDs/` directory). Release 1.2.0 installs from the Python Package Index on any platform with Python 3.12 or later, and on Linux also ships as an AppImage and a Flatpak bundle. The Windows and macOS capture backends are written but have not yet been tested on those machines.
40
+
41
+ ## Install from the Python Package Index (any platform)
42
+
43
+ With Python 3.12 or later, install Snapmockit as an application of its own with [pipx](https://pipx.pypa.io/) or [uv](https://docs.astral.sh/uv/):
44
+
45
+ ```bash
46
+ pipx install snapmockit
47
+ ```
48
+
49
+ ```bash
50
+ uv tool install snapmockit
51
+ ```
52
+
53
+ Either puts a `snapmockit` command on your path; start the application with it. `snapmockit --version` prints the version, and `snapmockit --capture full` takes a capture straight away and opens it. `pip install snapmockit` into a virtual environment works too.
54
+
55
+ To upgrade, use the tool you installed with: `pipx upgrade snapmockit`, `uv tool upgrade snapmockit`, or `pip install --upgrade snapmockit`. Help > Check for Updates names the right one when a new release is out.
56
+
57
+ On Linux, Qt needs the same system libraries the AppImage lists below, which every desktop installation has. The package installs no menu entry or icon; start it from a terminal or bind the command to a key. Windows and macOS installations run, but the screen capture backends for both are untested.
58
+
59
+ ## Install on Linux
60
+
61
+ Snapmockit ships in two forms on Linux, both for x86_64: an **AppImage**, one file that carries its own Python and Qt, and a **Flatpak**, a 26 MB bundle that runs on the KDE runtime and in a sandbox. Neither needs a package manager or a password. The AppImage runs anywhere with glibc 2.34 or later (Ubuntu 22.04, Debian 12, Fedora 35, RHEL 9, and later); the Flatpak runs anywhere Flatpak does.
62
+
63
+ ### The AppImage
64
+
65
+ 1. Download `Snapmockit-<version>-x86_64.AppImage` from the latest release at https://github.com/dbower44022/snapmockit/releases.
66
+ 2. Make it executable and run it. From a file manager, right-click the file, allow it to run as a program under Properties, and double-click it. From a terminal, with the file in your Downloads folder:
67
+
68
+ ```bash
69
+ chmod +x ~/Downloads/Snapmockit-*.AppImage
70
+ ~/Downloads/Snapmockit-*.AppImage
71
+ ```
72
+
73
+ `--version` prints the version, `--capture full` takes a capture straight away and opens it, and a project file named on the command line opens. Help > Check for Updates in the application reads the latest release.
74
+
75
+ The file needs these libraries from the system, which every desktop installation has and a bare server may not: on Debian and Ubuntu, `libegl1 libgl1 libglib2.0-0 libdbus-1-3 libfontconfig1 libfreetype6 libxkbcommon0 libxkbcommon-x11-0 libxcb-cursor0 libxcb-icccm4 libxcb-keysyms1 libxcb-shape0 libxcb-xkb1 libxcb-render-util0 libxcb-image0 libx11-6 libxfixes3`, plus `libwayland-client0` and `xdg-desktop-portal` with a backend for your desktop under Wayland. Fonts, the colour emoji font included, come from the system. Settings live under `~/.config/Snapmockit`, presets and themes under `~/.config/snapmockit`, and the library at `~/Snapmockit/Library` unless you moved it; a first start moves what earlier builds kept under the SnapMock name and says so once.
76
+
77
+ ### Putting it in the menu
78
+
79
+ The file carries its menu entry and icon but does not install them yet. To have Snapmockit in the desktop's main menu, copy the file to a fixed name, take the icons out of it, and write an entry that points at the copy:
80
+
81
+ ```bash
82
+ mkdir -p ~/Applications ~/.local/share/applications ~/.local/share/icons/hicolor/256x256/apps ~/.local/share/icons/hicolor/scalable/apps
83
+ cp ~/Downloads/Snapmockit-*.AppImage ~/Applications/Snapmockit.AppImage
84
+ (cd /tmp && ~/Applications/Snapmockit.AppImage --appimage-extract 'usr/share/icons/hicolor/*/apps/*')
85
+ cp /tmp/squashfs-root/usr/share/icons/hicolor/256x256/apps/io.github.dbower44022.snapmockit.png ~/.local/share/icons/hicolor/256x256/apps/
86
+ cp /tmp/squashfs-root/usr/share/icons/hicolor/scalable/apps/io.github.dbower44022.snapmockit.svg ~/.local/share/icons/hicolor/scalable/apps/
87
+ rm -rf /tmp/squashfs-root
88
+ cat > ~/.local/share/applications/io.github.dbower44022.snapmockit.desktop <<EOF
89
+ [Desktop Entry]
90
+ Type=Application
91
+ Name=Snapmockit
92
+ GenericName=Screenshot Annotation Tool
93
+ Comment=Capture, annotate, and mock up screenshots
94
+ Exec=$HOME/Applications/Snapmockit.AppImage %F
95
+ Icon=io.github.dbower44022.snapmockit
96
+ Terminal=false
97
+ Categories=Graphics;Utility;
98
+ MimeType=application/x-snapmockit-project;
99
+ Keywords=screenshot;capture;annotate;mockup;
100
+ StartupNotify=true
101
+ StartupWMClass=Snapmockit
102
+ EOF
103
+ update-desktop-database ~/.local/share/applications
104
+ ```
105
+
106
+ The entry appears at once; if its icon does not, the running desktop has not rescanned its icon folders yet, and a restart of the desktop shell (Ctrl+Alt+Esc on Cinnamon under X11) or a fresh login shows it. A later release replaces the copy at `~/Applications/Snapmockit.AppImage` and the entry stays. To remove it, delete the entry file, the two icon files, and the copy.
107
+
108
+ ### The Flatpak
109
+
110
+ ```bash
111
+ cd ~/Downloads
112
+ flatpak install --user Snapmockit-<version>-x86_64.flatpak
113
+ flatpak run io.github.dbower44022.snapmockit
114
+ ```
115
+
116
+ Download the bundle from the same release page. The first install offers to fetch the KDE runtime 6.11 from Flathub, which is most of what the application needs; the bundle itself is 26 MB because Qt is shared with every other KDE application on the machine. The desktop entry and the icon are installed with it, so Snapmockit is in the main menu at once, and `flatpak run io.github.dbower44022.snapmockit --capture full` is the command to bind to a key.
117
+
118
+ The sandbox reaches your whole home directory, the display, the graphics device, and the network, and nothing else. Its settings live under `~/.var/app/io.github.dbower44022.snapmockit/`, copied once from `~/.config/Snapmockit` on the first start if you have been running another form; the library is the same `~/Snapmockit/Library` both forms use. A bundle installed by hand does not update itself: a new version is a new download. Both forms can be installed at once, but they carry one application id, so the desktop shows one menu entry for Snapmockit.
119
+
120
+ ### Other forms
121
+
122
+ Windows and macOS have no package of their own yet; install from the Python Package Index (above) or run from source. The capture backends for both are written but untested. The Flatpak is published as the bundle above and not on Flathub.
123
+
124
+ ## Running from source
125
+
126
+ Requirements: Python 3.12 or later and [uv](https://docs.astral.sh/uv/).
127
+
128
+ ```bash
129
+ git clone https://github.com/dbower44022/snapmockit.git
130
+ cd snapmockit
131
+ uv sync
132
+ uv run python -m snapmock
133
+ ```
134
+
135
+ To take a capture straight from the command line and open it in the application:
136
+
137
+ ```bash
138
+ uv run python -m snapmock --capture full
139
+ ```
140
+
141
+ ## Building the packages
142
+
143
+ The release job builds both Linux forms from a clean runner on every tag, and both recipes run from a checkout with one command each, landing under `dist/`.
144
+
145
+ The AppImage:
146
+
147
+ ```bash
148
+ uv sync --group packaging
149
+ uv run --group packaging python packaging/appimage/build.py
150
+ ```
151
+
152
+ The Flatpak, which needs `flatpak-builder` (or Flathub's `org.flatpak.Builder`), the KDE runtime 6.11 with its SDK, the PyQt base application 6.11, and an SVG loader on the machine that builds:
153
+
154
+ ```bash
155
+ flatpak install flathub org.kde.Platform//6.11 org.kde.Sdk//6.11 \
156
+ com.riverbankcomputing.PyQt.BaseApp//6.11
157
+ uv run python packaging/flatpak/build.py
158
+ ```
159
+
160
+ `packaging/flatpak/build.py --update-deps` regenerates the dependency module from `uv.lock` when a dependency changes.
161
+
162
+ ## Developing
163
+
164
+ ```bash
165
+ uv run pytest # the test suite, about 6 minutes; QT_QPA_PLATFORM=offscreen for a headless run
166
+ uv run ruff check . # lint
167
+ uv run ruff format . # format
168
+ uv run mypy snapmock # type check, strict
169
+ ```
170
+
171
+ The product requirements documents under `PRDs/` are the single source of truth for behaviour; `docs/` holds the implementation notes and kickoff prompts each piece of work was built from; `CLAUDE.md` holds the working conventions.
172
+
173
+ ## Reporting a problem
174
+
175
+ Open an issue at https://github.com/dbower44022/snapmockit/issues. Help > About > Copy Version Info in the application puts the version, the build date, and the platform on the clipboard for the report.
176
+
177
+ ## Licence
178
+
179
+ MIT. Copyright (c) 2026 Doug Bower. Icons are [Tabler Icons](https://tabler.io/icons) by Paweł Kuna, MIT.
@@ -0,0 +1,145 @@
1
+ # Snapmockit
2
+
3
+ Snapmockit is an open-source screenshot annotation and user interface mockup tool for Linux, Windows, and macOS, written in Python with PyQt6. Capture a screen, a window, or a region; annotate it with shapes, arrows, text, callouts, highlights, blur, numbered steps, stamps, and emoji on layers; then export it as PNG, JPEG, SVG, or PDF, or save it as a project to come back to. It reads and writes Snagit's `.snagx` files.
4
+
5
+ Status: the application is complete against its nine product requirements documents (the `PRDs/` directory). Release 1.2.0 installs from the Python Package Index on any platform with Python 3.12 or later, and on Linux also ships as an AppImage and a Flatpak bundle. The Windows and macOS capture backends are written but have not yet been tested on those machines.
6
+
7
+ ## Install from the Python Package Index (any platform)
8
+
9
+ With Python 3.12 or later, install Snapmockit as an application of its own with [pipx](https://pipx.pypa.io/) or [uv](https://docs.astral.sh/uv/):
10
+
11
+ ```bash
12
+ pipx install snapmockit
13
+ ```
14
+
15
+ ```bash
16
+ uv tool install snapmockit
17
+ ```
18
+
19
+ Either puts a `snapmockit` command on your path; start the application with it. `snapmockit --version` prints the version, and `snapmockit --capture full` takes a capture straight away and opens it. `pip install snapmockit` into a virtual environment works too.
20
+
21
+ To upgrade, use the tool you installed with: `pipx upgrade snapmockit`, `uv tool upgrade snapmockit`, or `pip install --upgrade snapmockit`. Help > Check for Updates names the right one when a new release is out.
22
+
23
+ On Linux, Qt needs the same system libraries the AppImage lists below, which every desktop installation has. The package installs no menu entry or icon; start it from a terminal or bind the command to a key. Windows and macOS installations run, but the screen capture backends for both are untested.
24
+
25
+ ## Install on Linux
26
+
27
+ Snapmockit ships in two forms on Linux, both for x86_64: an **AppImage**, one file that carries its own Python and Qt, and a **Flatpak**, a 26 MB bundle that runs on the KDE runtime and in a sandbox. Neither needs a package manager or a password. The AppImage runs anywhere with glibc 2.34 or later (Ubuntu 22.04, Debian 12, Fedora 35, RHEL 9, and later); the Flatpak runs anywhere Flatpak does.
28
+
29
+ ### The AppImage
30
+
31
+ 1. Download `Snapmockit-<version>-x86_64.AppImage` from the latest release at https://github.com/dbower44022/snapmockit/releases.
32
+ 2. Make it executable and run it. From a file manager, right-click the file, allow it to run as a program under Properties, and double-click it. From a terminal, with the file in your Downloads folder:
33
+
34
+ ```bash
35
+ chmod +x ~/Downloads/Snapmockit-*.AppImage
36
+ ~/Downloads/Snapmockit-*.AppImage
37
+ ```
38
+
39
+ `--version` prints the version, `--capture full` takes a capture straight away and opens it, and a project file named on the command line opens. Help > Check for Updates in the application reads the latest release.
40
+
41
+ The file needs these libraries from the system, which every desktop installation has and a bare server may not: on Debian and Ubuntu, `libegl1 libgl1 libglib2.0-0 libdbus-1-3 libfontconfig1 libfreetype6 libxkbcommon0 libxkbcommon-x11-0 libxcb-cursor0 libxcb-icccm4 libxcb-keysyms1 libxcb-shape0 libxcb-xkb1 libxcb-render-util0 libxcb-image0 libx11-6 libxfixes3`, plus `libwayland-client0` and `xdg-desktop-portal` with a backend for your desktop under Wayland. Fonts, the colour emoji font included, come from the system. Settings live under `~/.config/Snapmockit`, presets and themes under `~/.config/snapmockit`, and the library at `~/Snapmockit/Library` unless you moved it; a first start moves what earlier builds kept under the SnapMock name and says so once.
42
+
43
+ ### Putting it in the menu
44
+
45
+ The file carries its menu entry and icon but does not install them yet. To have Snapmockit in the desktop's main menu, copy the file to a fixed name, take the icons out of it, and write an entry that points at the copy:
46
+
47
+ ```bash
48
+ mkdir -p ~/Applications ~/.local/share/applications ~/.local/share/icons/hicolor/256x256/apps ~/.local/share/icons/hicolor/scalable/apps
49
+ cp ~/Downloads/Snapmockit-*.AppImage ~/Applications/Snapmockit.AppImage
50
+ (cd /tmp && ~/Applications/Snapmockit.AppImage --appimage-extract 'usr/share/icons/hicolor/*/apps/*')
51
+ cp /tmp/squashfs-root/usr/share/icons/hicolor/256x256/apps/io.github.dbower44022.snapmockit.png ~/.local/share/icons/hicolor/256x256/apps/
52
+ cp /tmp/squashfs-root/usr/share/icons/hicolor/scalable/apps/io.github.dbower44022.snapmockit.svg ~/.local/share/icons/hicolor/scalable/apps/
53
+ rm -rf /tmp/squashfs-root
54
+ cat > ~/.local/share/applications/io.github.dbower44022.snapmockit.desktop <<EOF
55
+ [Desktop Entry]
56
+ Type=Application
57
+ Name=Snapmockit
58
+ GenericName=Screenshot Annotation Tool
59
+ Comment=Capture, annotate, and mock up screenshots
60
+ Exec=$HOME/Applications/Snapmockit.AppImage %F
61
+ Icon=io.github.dbower44022.snapmockit
62
+ Terminal=false
63
+ Categories=Graphics;Utility;
64
+ MimeType=application/x-snapmockit-project;
65
+ Keywords=screenshot;capture;annotate;mockup;
66
+ StartupNotify=true
67
+ StartupWMClass=Snapmockit
68
+ EOF
69
+ update-desktop-database ~/.local/share/applications
70
+ ```
71
+
72
+ The entry appears at once; if its icon does not, the running desktop has not rescanned its icon folders yet, and a restart of the desktop shell (Ctrl+Alt+Esc on Cinnamon under X11) or a fresh login shows it. A later release replaces the copy at `~/Applications/Snapmockit.AppImage` and the entry stays. To remove it, delete the entry file, the two icon files, and the copy.
73
+
74
+ ### The Flatpak
75
+
76
+ ```bash
77
+ cd ~/Downloads
78
+ flatpak install --user Snapmockit-<version>-x86_64.flatpak
79
+ flatpak run io.github.dbower44022.snapmockit
80
+ ```
81
+
82
+ Download the bundle from the same release page. The first install offers to fetch the KDE runtime 6.11 from Flathub, which is most of what the application needs; the bundle itself is 26 MB because Qt is shared with every other KDE application on the machine. The desktop entry and the icon are installed with it, so Snapmockit is in the main menu at once, and `flatpak run io.github.dbower44022.snapmockit --capture full` is the command to bind to a key.
83
+
84
+ The sandbox reaches your whole home directory, the display, the graphics device, and the network, and nothing else. Its settings live under `~/.var/app/io.github.dbower44022.snapmockit/`, copied once from `~/.config/Snapmockit` on the first start if you have been running another form; the library is the same `~/Snapmockit/Library` both forms use. A bundle installed by hand does not update itself: a new version is a new download. Both forms can be installed at once, but they carry one application id, so the desktop shows one menu entry for Snapmockit.
85
+
86
+ ### Other forms
87
+
88
+ Windows and macOS have no package of their own yet; install from the Python Package Index (above) or run from source. The capture backends for both are written but untested. The Flatpak is published as the bundle above and not on Flathub.
89
+
90
+ ## Running from source
91
+
92
+ Requirements: Python 3.12 or later and [uv](https://docs.astral.sh/uv/).
93
+
94
+ ```bash
95
+ git clone https://github.com/dbower44022/snapmockit.git
96
+ cd snapmockit
97
+ uv sync
98
+ uv run python -m snapmock
99
+ ```
100
+
101
+ To take a capture straight from the command line and open it in the application:
102
+
103
+ ```bash
104
+ uv run python -m snapmock --capture full
105
+ ```
106
+
107
+ ## Building the packages
108
+
109
+ The release job builds both Linux forms from a clean runner on every tag, and both recipes run from a checkout with one command each, landing under `dist/`.
110
+
111
+ The AppImage:
112
+
113
+ ```bash
114
+ uv sync --group packaging
115
+ uv run --group packaging python packaging/appimage/build.py
116
+ ```
117
+
118
+ The Flatpak, which needs `flatpak-builder` (or Flathub's `org.flatpak.Builder`), the KDE runtime 6.11 with its SDK, the PyQt base application 6.11, and an SVG loader on the machine that builds:
119
+
120
+ ```bash
121
+ flatpak install flathub org.kde.Platform//6.11 org.kde.Sdk//6.11 \
122
+ com.riverbankcomputing.PyQt.BaseApp//6.11
123
+ uv run python packaging/flatpak/build.py
124
+ ```
125
+
126
+ `packaging/flatpak/build.py --update-deps` regenerates the dependency module from `uv.lock` when a dependency changes.
127
+
128
+ ## Developing
129
+
130
+ ```bash
131
+ uv run pytest # the test suite, about 6 minutes; QT_QPA_PLATFORM=offscreen for a headless run
132
+ uv run ruff check . # lint
133
+ uv run ruff format . # format
134
+ uv run mypy snapmock # type check, strict
135
+ ```
136
+
137
+ The product requirements documents under `PRDs/` are the single source of truth for behaviour; `docs/` holds the implementation notes and kickoff prompts each piece of work was built from; `CLAUDE.md` holds the working conventions.
138
+
139
+ ## Reporting a problem
140
+
141
+ Open an issue at https://github.com/dbower44022/snapmockit/issues. Help > About > Copy Version Info in the application puts the version, the build date, and the platform on the clipboard for the report.
142
+
143
+ ## Licence
144
+
145
+ MIT. Copyright (c) 2026 Doug Bower. Icons are [Tabler Icons](https://tabler.io/icons) by Paweł Kuna, MIT.