128 Commits

Author SHA1 Message Date
Igor Zinken
b205a553d9 Restructure document model, factories and actions (#93)
Split `definitions/document.ts` into unique files per actor type.
Create `model` folder to store the above types, their factories and the state changing actions.
2026-04-19 20:34:06 +02:00
Igor Zinken
6eeed8c2bd Add support for unique state history per Document (#88)
Long overdue.

State history would only work for the active Document. When opening a new Document (without closing the existing one), the state history would be flushed and initiated anew for every change made in the currently focused Document.

This changeset introduces a state history unique to the Document, meaning you can switch between open Documents and maintain the history associated with your changes.
2026-04-11 12:30:57 +02:00
Igor Zinken
d64ec1ae3e Refactor Layer effects and introduce duotone filter (#64)
* Added Duotone filter to effects
* Renamed Effects actor to Transform
2025-04-04 20:55:34 +02:00
Igor Zinken
00e0b7549a Allow committing effects and filters to a Layer source, control zoom level using pointer, move state changing actions to separate files. (#63)
* Implemented new commit layer effects and transforms action
* Moved all actions out of the application menu component
* Grid to layer slicing moved out of component
* Unified all layer filter toggling into single action
* Moved all layer panel history interactions to separate action files
* Moved mirror, rotation, later addition and document resize state actions to separate files
* Adjust behaviour of layer addition action
* Moved canvas resizing history action to separate file
* Move interaction pane selection logic into separate files
* Move layer positioning utilities to separate actions
* Use correct event variable in ZoomableCanvas
* Zoom tool now responds to clicks and alt+clicks when zoom is selected
2025-04-02 19:21:28 +02:00
Igor Zinken
630ba35b40 Restructure and rename actor/renderers (#57)
* Restructure and rename actor/renderers
* Rename cache flushing functions to reflect their scope
* Move canvas instance management to dedicated service
* Type resize-canvas-window Vue file
2025-03-16 11:32:42 +01:00
Igor Zinken
9d2e89bde1 Create blended layer cache minimising rendering overhead on Documents with blended content (#55)
* Create cache for blended layers to speed up rendering on Documents with blended content
* Manage blend mode caching state through layer changes in Document canvas
* Comments updated
* Moving files around
* Omit invisible layers in snapshot rendering
* Add pausing to blend layer cache
* Cleanups and tests for LayerSprite
* Remove logs
* Use actual LayerSprite in test
* Simplify pending check
* Omit flush calls on (un)pausing of cache
* Extend tests for LayerSprite
* Update modifier key tooltip
* Create reusable function for invalidating blend cache
* Updated tests
* Allow partial cache flushes
* Ensure blended layer cache is flushed appropriately on undo
* Pause blend caching while rotating or scaling
* Fix for Safari rendering issues
2025-03-14 22:54:25 +01:00
Igor Zinken
20f438be84 Updated README 2025-03-09 17:57:26 +01:00
Igor Zinken
fac9edb818 Fixed bug affecting high DPI screens when using clone brush 2025-02-08 16:15:27 +01:00
Igor Zinken
480921a481 Fix broken test configuration 2025-02-08 15:44:26 +01:00
Igor Zinken
df4146ce39 Added threshold filter 2024-07-26 21:41:50 +02:00
Igor Zinken
c2204e0a3e Implement support for S3 based storage providers (#30)
* Initial implementation to retrieve files from S3 bucket
* Addressed type warnings
* Implemented folder creation and deletion
* Add save UI for S3 bucket storage
* Implemented multipart upload to S3
* Implemented recursive deletion of objects when deleting folders from S3 storage
* Third party storage services can now be initialized from the save window
* Limit max keys for folder request
* Updated docs and integration
* Prevent auto open of file browser when connecting to 3rd party service in save modal
* Use alternate client registration for non-AWS based S3 endpoints
* Addressed issues with local MinIO based storage providers
* Added lazy thumbnail generation to S3 type storage
* Bugfixing
* Uniform click handler
* TDD approach then
* Fixed issue with thumbnail path resolving
* Add retry handler to overcome RequestTimeTooSkewed
2023-09-03 16:23:56 +02:00
Igor Zinken
b47ba5bcd0 Allow drawing operations on scaled layers (#29)
Allow drawing operations on scaled layers
2023-04-16 10:58:09 +02:00
Ange Cesari
5d841623d5 Added dockerfile + setup steps in readme.md (#28)
Co-authored-by: Ange Cesari <contact@ange-cesari.com>
2023-04-16 09:41:00 +02:00
Igor Zinken
f97d9d9ba7 Made dragged image URL loader two-step process 2023-04-12 19:16:43 +02:00
Igor Zinken
8adb358b3b Initial migration from JavaScript to TypeScript 2023-03-20 22:45:49 +01:00
Igor Zinken
eb6ccef7c9 Update default threshold for magic wand tool 2023-03-19 12:53:39 +01:00
Igor Zinken
1f74f36eed Migrate build from Webpack to Vite 2023-03-19 11:49:18 +01:00
Igor Zinken
d10625c7a0 Updated README with note on zCanvas, rendering and event handling 2022-12-04 17:10:08 +01:00
Igor Zinken
4d2e2550cc Added keyboard shortcut to toggle layer visibility 2022-01-21 19:59:53 +01:00
Igor Zinken
7aadff2518 Updated README code blocks with language identifiers 2021-09-11 19:49:32 +02:00
Igor Zinken
2fad55d935 Created singular entry points for Blob URL creation/revoking 2021-01-20 18:59:26 +01:00
Igor Zinken
1af4e4e8b7 Implemented Layer sorting 2021-01-19 09:59:08 +01:00
Igor Zinken
adf20efdf9 Moving zcanvas components to rendering namespace 2021-01-18 21:55:12 +01:00
Igor Zinken
2f9013155f Implement continuous brushing (#6)
Implementation of continuous brushing added
2021-01-16 17:21:44 +01:00
Igor Zinken
a07e4e7c46 Implemented layer scaling 2021-01-16 12:21:45 +01:00
Igor Zinken
1a25b0b928 Fixed issue where clone stamp would always draw from the source coordinate on repeated stamps 2021-01-15 15:46:10 +01:00
Igor Zinken
fbe2d995fb Implemented alternating colours for selection outlines 2021-01-14 21:05:33 +01:00
Igor Zinken
5acca694b1 Minor performance improvements and benchmark data 2021-01-14 19:21:17 +01:00
Igor Zinken
a84bbda21f Implemented removal of content under selection 2021-01-14 17:15:14 +01:00
Igor Zinken
822970d7c6 Implemented WebAssembly alternative for filters 2021-01-14 11:34:11 +01:00
Igor Zinken
1b44ac9cf0 Selections are now handled by the interaction pane to be visible on top of all layers and work across layers 2021-01-13 21:00:09 +01:00
Igor Zinken
b55896596c Moving of layers is now stored in state history 2021-01-12 09:16:45 +01:00
Igor Zinken
85b70c12f9 Implemented state history mechanism (still hidden from UI as features need to be hooked up) 2021-01-11 21:45:59 +01:00
Igor Zinken
9df39d1270 Implemented bucket fill and selection constrained draw modes 2021-01-10 21:57:09 +01:00
Igor Zinken
9a46173590 Added fast rounding to text rendering coordinates 2021-01-10 15:39:40 +01:00
Igor Zinken
4d7d8964b6 Rendered text only occupies a Bitmap of the actual text size. Text rendering is also cached 2021-01-09 14:08:20 +01:00
Igor Zinken
1312f6601a Temporarily remove text rendering from bitmap cache 2021-01-09 12:31:28 +01:00
Igor Zinken
d325947ec7 Improved filter and effects rendering by introducing caches 2021-01-09 12:10:54 +01:00
Igor Zinken
f06c4a0402 Implented Document cropping 2021-01-08 18:56:25 +01:00
Igor Zinken
6ed9616107 Improved filter performance by processing ImageData inside a parrallelizable Worker 2021-01-08 16:40:14 +01:00
Igor Zinken
95788d5a6e Options panel only opens on active tool switch when the tool has configurable options 2021-01-08 10:50:47 +01:00
Igor Zinken
cd3acee9e3 Temporarily disabled brush tools on Layers that are both mirrored and rotated 2021-01-07 19:01:06 +01:00
Igor Zinken
19edf4bfbd Fixed issue where drawing on a rotated and panned layer would render at the wrong offset 2021-01-07 18:17:45 +01:00
Igor Zinken
56f0a1bb8b Removed unnecessary Sprite class 2021-01-07 17:51:38 +01:00
Igor Zinken
e31100801d Updated zCanvas dependency to 4.2.0, fixes issue with lasso tool not working on touch screen devices 2021-01-07 17:40:17 +01:00
Igor Zinken
a1ce7def9c Temporarily disabled usage of clone stamp on rotated layer 2021-01-07 12:50:18 +01:00
Igor Zinken
55597ed8bc Implemented modal window in which options can be specified upfront when creating a new Document 2021-01-07 11:07:43 +01:00
Igor Zinken
f4f2f6abee Fixed issues with Document content rescaling 2021-01-06 22:31:12 +01:00
Igor Zinken
2dbeb215d6 Some updates to zoomable canvas to make custom zCanvas overrides better documented 2021-01-06 10:44:16 +01:00
Igor Zinken
86bb61569f Added automatic layer selection on ctrl + click of Document, taking transparency into account 2021-01-05 22:50:50 +01:00