147 Commits

Author SHA1 Message Date
Igor Zinken
bca9aa9145 When erasing content from a drawable layer, underlying layers are now preserved correctly during draw 2025-04-06 09:26:34 +02:00
Igor Zinken
f930d43078 Restructure UI, maximize layers panel when filters & effects view is opened (#66)
* Some sizing shenanigans

* Cleanups in ZoomableSprite and inheritance chain

* Ongoing

* Done
2025-04-05 11:50:08 +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
e8eb11fd06 Improve performance of dragging Masks on blended, effected Layers 2025-04-02 21:26:28 +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
641828c035 Move history management functions out of layer renderer and into history utility (#61) 2025-03-29 07:43:47 +01:00
Igor Zinken
26d7fe6593 Fix issue where dragging masks on transformed layers would not respond correctly (#60) 2025-03-28 21:57:09 +01:00
Igor Zinken
e47c0dc297 Fixed bug where cropping would not update Layer dimensions appropriately 2025-03-25 22:08:26 +01:00
Igor Zinken
94cd300259 When reordering or deleting Layers in a Document using blend caching, the cache should be flushed 2025-03-25 21:52:06 +01:00
Igor Zinken
d4dac30a6c Document resize can now be undone in state history. Document crop now cuts pixels of source content 2025-03-23 11:26:55 +01:00
Igor Zinken
b765404704 Update to clipping context while drawing 2025-03-16 12:17:59 +01:00
Igor Zinken
dbafae9984 Clip brush lines while drawing on an offset or transformed Layer 2025-03-16 12:14:31 +01: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
5b79291faf Moving some functions out of class instances to more logical utilities 2025-03-16 07:18:18 +01:00
Igor Zinken
cc2ace1719 Restructure test mocks 2025-03-15 22:09:07 +01:00
Igor Zinken
e39317e47a Fix issue where eyedropper tool would lose accuracy on HDPI screens 2025-03-15 22:04:27 +01:00
Igor Zinken
875edf0d10 Improved performance of selection copying 2025-03-15 11:31:17 +01:00
Igor Zinken
83d8e7af4d Address issue where drawing operations on offset, cropped Layers would not use correct coordinate space 2025-03-15 10:19:27 +01:00
Igor Zinken
9ca9bbb732 Copying selection content onto new Layers reuses the original selections Layer type 2025-03-15 09:53:07 +01:00
Igor Zinken
1d37781855 Prevent drawing outside of the mask on non-graphic Layer types 2025-03-15 09:21:26 +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
3e3570021f Add strict type checks to unit tests (#48)
* Add strict type checks to unit tests
2025-02-15 14:14:48 +01:00
Igor Zinken
480921a481 Fix broken test configuration 2025-02-08 15:44:26 +01:00
Igor Zinken
fd3d1642f5 Fixed bug where slicing a grid to layers would calculate the wrong size and could potentially crash due to memory exhaustion 2025-02-08 11:49:02 +01:00
Igor Zinken
622d13825c Migrate project to Vue 3 (#42)
* Initial update of dependencies
* Fix ToggleButton import
* Prepare i18n and vitest
* Replace deprecated Vue set/delete syntax
* Fix async component loading, address errors caught by failing unit tests
* Fix type errors
* Fix bug with layer panel
* Fixed unit tests
* Fixed cloud file selectors
* Fixed broken notifications
* Fixed broken color picker
* Fix TypeScript configuration files
* Fixed unit test runner configuration
* Fixed type errors in cloud file selector
* Restored broken tooltips
* Show error message on import failure. Ignore Photoshop layers that fail to import
* Solved issues with deprecated Vue 2 syntax
* Fixed bug with compressing documents
* Fix layer refresh
2025-02-08 10:27:48 +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
Igor Zinken
f16c7492e9 Implement support for importing PDF documents (#26)
* Implement support for importing PDF documents
* Optimized lazy loading of third party import services
* Caught issue with corrupt PSD files
* Updated package lockfile
* Added test
2023-04-13 19:50:49 +02:00
Igor Zinken
6d7da9e696 Blend modes are preserved when importing Photoshop PSD documents 2023-04-11 20:36:39 +02:00
Igor Zinken
b3a85bd40b Implemented layer blend modes (#24)
* Initial work on blend modes
* Blend modes are now working
* Some performance improvement
* cleaner code
2023-04-11 20:01:59 +02:00
Igor Zinken
d2b581d2ee Active selections now support multiple non-overlapping shapes
* Renamed Selection data structure. Multiple select begins to work
* Saving and loading of multiple selection shapes implemented
* Renamed Document selection properties to avoid confusion
* Renamed and distributed functions between selection and shape utilities
* Fixes to selection toolbox
* Fixed issue with copying across multiple selections
* Final cleanups
2023-03-31 22:10:41 +02:00
Igor Zinken
ee6dd0b556 Migrated all unit tests to TypeScript 2023-03-23 21:24:56 +01:00
Igor Zinken
8adb358b3b Initial migration from JavaScript to TypeScript 2023-03-20 22:45:49 +01:00
Igor Zinken
1f74f36eed Migrate build from Webpack to Vite 2023-03-19 11:49:18 +01:00
Igor Zinken
4159398352 Implement magic wand tool to select areas by color (#20) 2023-03-12 09:21:35 +01:00
Igor Zinken
63e9676cb1 Added GDPR consent screen prior to using Google Fonts because we can't have nice things 2022-06-30 22:34:33 +02:00
Igor Zinken
7e129fec45 Updated Vuex store unit test to reflect changes made in dialog opening 2022-04-11 21:56:08 +02:00
Igor Zinken
c06798bf85 Save dialog now auto selects last used storage provider 2022-04-11 16:47:16 +02:00
Igor Zinken
7488ab032b Implemented storage support for Google Drive (#17) 2022-04-11 15:33:44 +02:00
Igor Zinken
2f7ad97d7f Optimization of transformation routine 2022-02-14 09:39:14 +01:00
Igor Zinken
a9c8243a48 Fixed regression with document resize 2022-02-13 11:16:59 +01:00
Igor Zinken
e57bc163ac Improve performance by moving transform effects from pre-cache to live rendering
* Selection outline is now rendered by interaction pane, not individual layer sprites
* Updated to zCanvas 4.3.1 to fix issue with bounding box detection on rotated content
* Refactored rectangles to always use left and top
* Layer scaling, rotating and mirroring is now a fast, synchronous operation
* Snapshots are now always of rendered layer content
2022-02-13 09:37:45 +01:00
Igor Zinken
71cad8512a Support wider zoom out scale (allows accurate "Fit to Window" calculation on large screens) 2022-02-06 18:05:50 +01:00
Igor Zinken
b41e0cc967 Updated unit test to match changes in implementation 2022-01-31 10:40:04 +01:00
Igor Zinken
22059511c8 Implemented smart fill 2022-01-31 09:44:17 +01:00
Igor Zinken
224944e8df Text size is now a free number input. Text can now also be specified in points. 2022-01-24 18:06:49 +01:00
Igor Zinken
e688fd42be Added 'Fit to window' option to zoom tool 2022-01-22 22:44:10 +01:00
Igor Zinken
19358255d5 Restructured image and file definitions. Allow fallback to load single layer, merged content on corrupt/unsupported Photoshop files 2022-01-22 15:57:33 +01:00
Igor Zinken
78ef693304 Added support for importing Photoshop files 2022-01-22 12:01:23 +01:00