Commit Graph

138 Commits

Author SHA1 Message Date
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
Igor Zinken
02d4690380 Selections can now be repositioned and resized in the tool panel for added accuracy 2022-01-21 15:01:55 +01:00
Igor Zinken
7631d61844 Added view control to toggle anti-aliasing 2022-01-21 08:09:00 +01:00
Igor Zinken
8c2c23d77a Tool panels are now individually collapsable for mobile view optimization 2022-01-14 19:28:05 +01:00
Igor Zinken
f01f7c8258 Separated right panel into individual panels for tool options and layers 2022-01-09 12:34:36 +01:00
Igor Zinken
31924343e5 Added support for WEBP file format 2022-01-08 11:15:49 +01:00
Igor Zinken
eb05086116 Snap and align now also works on rotated content. Moved math utilities to appropriate namespaces 2021-09-13 21:10:35 +02:00
Igor Zinken
f875a1fc92 Invisible layers are excluded from alignment list 2021-09-13 20:39:32 +02:00
Igor Zinken
1c66d77123 Implemented guidelines and snap functionality 2021-09-11 19:48:08 +02:00
Igor Zinken
c0ee51bff5 Implemented inverting of selections 2021-05-08 14:17:26 +02:00