1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-01-31 15:39:49 +00:00
Commit graph

603 commits

Author SHA1 Message Date
Emmanouil Papadeas 85d73bdb5d Allow extensions to create new palettes 2024-04-19 18:50:27 +03:00
Emmanouil Papadeas 0d375631b8 Better static typing in the timeline related methods in Project 2024-04-14 00:57:53 +03:00
Emmanouil Papadeas 92e8666da2 Change layers with Control + Up/Down arrow keys
We already have Control + Left/Right for changing frames, so it makes sense to have Up/Down for layers
2024-04-10 16:58:04 +03:00
Emmanouil Papadeas 1c9c8bf4e3 Add Palettize and Pixelize effects
Pixelize makes the image pixelated, and Palettize maps the color of the input to the nearest color in the selected palette. Useful for limiting color in pixel art and for artistic effects.
2024-04-10 01:20:28 +03:00
Emmanouil Papadeas 8f395b2be7 Create a new Effects menu and move all of the cel-specific effects there, away from the Image menu
Also moves Project properties into Image
2024-04-09 01:52:12 +03:00
Emmanouil Papadeas 785701b093 Add an option to export a JSON file with the project data
Probably temporary, it might be a good idea to add a third "Data" tab in the export dialog, if we add stuff like exporting to Godot resources, such as AnimatedSprite, AnimationPlayer etc.
2024-04-06 03:30:50 +03:00
Emmanouil Papadeas 971fb67db1 When running in headless mode, don't set a custom cursor and don't save window data on exit 2024-04-05 20:36:03 +03:00
Emmanouil Papadeas 1062f88e4c Automatically load an image as a new project, when there is only one empty project
This is also useful for the CLI
2024-04-05 20:16:54 +03:00
Emmanouil Papadeas 0ac7789bf9 Store image data in undo/redo of the move tool, reverts 4f5f37a522
This fixes an issue where, if the user moves pixels outside the canvas and then undos, those cut pixels will not be restored.
2024-04-05 18:02:46 +03:00
Emmanouil Papadeas 596c174c92 Add a project properties dialog
Allows users to change project name and add custom user data. I was not sure where to put this, so I put it under the Edit menu. It might be a good idea to add a new "Project" menu in the future, and perhaps Scale Image, Resize Canvas and Crop to Content/Selection could be placed there, as they always affect the entire project.
2024-04-05 02:24:47 +03:00
Emmanouil Papadeas af01234470 Implement a basic CLI
Supports exporting images & spritesheets with frame, direction, scale and output file name specification. Also added some informative arguments that simply print out some data.
2024-04-02 00:36:33 +03:00
Emmanouil Papadeas 183bee6a0f Load preferences from the config file before waiting for process_frame 2024-04-02 00:02:20 +03:00
Emmanouil Papadeas 53e4ebc668 Fix spritesheet exporting from bug introduced in 6fa4a27589 2024-04-01 23:50:50 +03:00
Emmanouil Papadeas ea8748ca55 Use a dictionary in Export to group FileFormat enums and their respective file extensions and descriptions 2024-04-01 23:16:12 +03:00
Emmanouil Papadeas 473dabf004 Replace "{name}" with the project name when exporting 2024-04-01 21:45:39 +03:00
Emmanouil Papadeas bf14ac1565 Add an ExportFrames enum in Export to make code clearer 2024-04-01 21:45:11 +03:00
Emmanouil Papadeas 1d262c62f7 Don't include the ".pxo" extension in the project's name, when opening or saving 2024-04-01 20:11:27 +03:00
Emmanouil Papadeas 6fa4a27589 Directly export the final blended images from the pxo, if they exist
This only happens when the pxo file contains the final blended images (happens when "include blended" is enabled when saving), project has been saved, it hasn't been changed and "Visible layers" is selected.
2024-04-01 19:39:10 +03:00
Emmanouil Papadeas 77bea9a6e3 Re-add old layer blending logic from 0.x, if running on headless mode
Only meant to prevent crashes when trying to export from headless mode. This blending logic does not support blend modes, clipping masks, and layer effects.
2024-04-01 17:31:10 +03:00
Emmanouil Papadeas 1cb4d22233 Fix the same frames being exported multiple times when "Selected frames" is selected, and multiple cels of the same frames are currently selected on the timeline - Fixes #1001 2024-03-31 00:55:55 +02:00
Emmanouil Papadeas 11a1428eef Add an Apply button to the font size slider in the Preferences, fix display scale not being applied on startup 2024-03-30 01:25:01 +02:00
Emmanouil Papadeas 94fdfd8f02 Hide and show dynamics properties when dynamics are enabled 2024-03-24 15:35:40 +02:00
Emmanouil Papadeas b620cf2a9e Lazy load the preferences dialog
Speeds up the initial loading time of Pixelorama. It's now almost as fast as 0.x on my computer (a bit more than 2 seconds). Lazy loading the preferences dialog also drastically reduces memory usage and node count (when preferences have not been opened), from 150MB, 13634 objects and 3680 nodes, to 94MB, 8207 objects and 1823 nodes. This essentially cuts the initial node count to half!
2024-03-24 02:46:57 +02:00
Emmanouil Papadeas 8c9a01feae Move theme handling code in a new Themes autoload
The preferences code only handles the UI related stuff, while the Themes autoload is now solely responsible for theme adding, removing and changing. This makes it possible to handle themes without having the preferences dialog be in the middle.
2024-03-24 02:08:54 +02:00
Emmanouil Papadeas 11fb2c2b65 Move language handling code in Global, remove HandleLanguages.gd
This makes it possible to handle language without having the preferences dialog be in the middle.
2024-03-24 01:41:19 +02:00
Emmanouil Papadeas f3ca6d1c33 Separate extension handling code from the Preferences UI
The preferences code only handles the UI related stuff, while HandleExtensions is now solely responsible for extension enabling, loading and uninstalling. This makes it possible to handle extensions without having the preferences dialog be in the middle.
2024-03-24 01:20:51 +02:00
RorotoSic 8bfd474613
Add flip X and Flip Y, and Rotation (90, 180, 270) buttons to BaseTool (#988)
* Add Flip X, Flip Y, Rotate 90, Rotate 180, Rotate 270

* node placement

* flip_rotate for BrushButton

* flip corrected for BrushButton (x, y was reversed)

* code changed for github static checks

* github static checks

* github static checks 2

* remove " _ " before my variable name

hope this was the problem

* var brush_texture_rotation

* Hide Flip/Rotate buttons where it is unnecessary

* btns flip/rotate  hide when a non-image brush is selected

* rotate ButtonGroup (radio btn)

* expand button for flip/rotate

* radio btn grp 2

* expand button (forgot to add the tscn )

* cursor shape to pointing hand

* tooltip R90 R180 R270

i dont add txt to the Translations.pot bc not sure to understand and dont want to make mistake

* shading.tscn  (nodes placement debreaking)

back as before

* Revert "expand button (forgot to add the tscn )"

This reverts commit 3062afe73f.

* Revert "expand button for flip/rotate"

This reverts commit 51189ac793.

* Collapsible Container

change "expend buton" to the pixelorama custum node "CollapsibleContainer"

* remove thick white outline when CollapseContainer is pressed and focus

* styleboxflat when CollapseContainer is pressed and empty for checkbox

* Revert "styleboxflat when CollapseContainer is pressed and empty for checkbox"

This reverts commit 0af0e1f427.

* StyleboxEmpty for normal /  keep hover unchanged

* Revert "StyleboxEmpty for normal /  keep hover unchanged"

This reverts commit 14b3745053.

* Revert "remove thick white outline when CollapseContainer is pressed and focus"

This reverts commit b80ab1ad5c.

* "flip_rotateD" + "Flat CollapsibleContainer'"

* conflicts Resolved

signal color_changed(color: Color, button: int)

---------

Co-authored-by: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com>
2024-03-23 16:39:44 +02:00
Emmanouil Papadeas 572fabbe66 Remove Global.reference_panel
Slowly trying to remove nodes from Global
2024-03-23 02:52:27 +02:00
Emmanouil Papadeas 48145b7f61 Use signals to move some code away from Project.change_project()
WIP, more code can be moved
2024-03-22 21:05:00 +02:00
Emmanouil Papadeas dd8145d369 Greatly simplify backup code, got rid of OpenSave's current_save_paths and backup_save_paths
The previous backup code was unnecessarily complicated, hard to read/understand and prone to errors. The new system simply stores the save and backup paths in the `Project` class, and stores the backup files inside `user://backups`, instead of having their file paths be in `cache.ini`.
2024-03-22 18:24:41 +02:00
Emmanouil Papadeas 42bce917dc Never change window title and save path when loading a backup 2024-03-22 15:54:00 +02:00
Emmanouil Papadeas 6e0d4eb660 Fix Project.export_directory_path being set incorrectly in open_pxo_file() 2024-03-22 15:30:00 +02:00
Emmanouil Papadeas ad85c8dd3e Minor open/save dialog path related code cleaning 2024-03-22 15:12:27 +02:00
Emmanouil Papadeas 6c8b2ae36b Rename Project.directory_path to Project.export_directory_path 2024-03-22 14:42:47 +02:00
Emmanouil Papadeas 64983b0404 Some static typing improvements 2024-03-22 03:07:21 +02:00
Emmanouil Papadeas 07fa1266d3 Remove three calls to Global.preferences_dialog 2024-03-21 03:00:21 +02:00
Emmanouil Papadeas 491d81f393 Minor config file section key re-organization 2024-03-21 01:51:19 +02:00
Emmanouil Papadeas 377c24c981 Make Pixelorama load slightly faster by not calling some setters of Global's variables if the value is the same 2024-03-21 00:02:54 +02:00
Emmanouil Papadeas f1ef01bb87 Replace Camera2D with a custom CanvasCamera to reduce idle GPU usage
Necessary workaround because of https://github.com/godotengine/godot/issues/89514
2024-03-19 15:39:34 +02:00
Emmanouil Papadeas 03b173b76e Optimize cel switching by avoiding changing the stylebox of every CelButton 2024-03-15 01:31:12 +02:00
Emmanouil Papadeas c1b78e4c01 Implement basic clipping masks
A very simple implementation, not as complex as something like #768 yet, but it can be done in the future.

The main current limitation is that it doesn't work with group layers as of right now.
2024-03-14 01:08:57 +02:00
Emmanouil Papadeas dc9ba6dd9c Implement alpha lock as a global tool option 2024-03-09 02:47:13 +02:00
Emmanouil Papadeas c225553042 Fix linked cels not working when importing a pxo file
Godot 4 has changed how ImageTexture works, as now it doesn't work when the Image is empty. Thus, we need to add Images to PixelCels right when they are created, before the linked cel logic is being handled.
2024-03-08 02:15:58 +02:00
Emmanouil Papadeas 90f7df0f5d Exporting each layer as a different file is now possible 2024-03-07 16:08:20 +02:00
Emmanouil Papadeas cb58cf7163 Minor refactor of Export & ExportDialog to combine processed_images and durations into a single ProcessedImage class 2024-03-07 02:10:21 +02:00
Emmanouil Papadeas 20fecc5a7a Export spritesheets based on animation tags 2024-03-06 19:49:05 +02:00
Emmanouil Papadeas 55df23e400 Fix exporting not including the last frame of a tag and "Selected layers" not including the non-selected frames 2024-03-06 01:47:00 +02:00
Emmanouil Papadeas 36d4b0fa18 Fix crash when importing a corrupt pxo 2024-03-05 16:05:13 +02:00
Emmanouil Papadeas b0a8ad17d4 Revert using Image.rotate_90() from the previous commit
Image.rotate_90() is also changing the size of the image, which we don't want to, at least not yet
2024-03-02 18:03:06 +02:00
Emmanouil Papadeas 4a404b2883 Use Image.rotate_90() and Image.rotate_180() on CPU rotation algorithms when the angle is 90, 180 or 270 degrees 2024-03-01 20:25:37 +02:00
Emmanouil Papadeas 57856ed327 Update ExtensionsApi.gd 2024-02-29 23:54:19 +02:00
Emmanouil Papadeas 9b439327b8 Fix ExtensionsAPI's new_project() not working, and add a new new_empty_project() method 2024-02-24 15:25:54 +02:00
Emmanouil Papadeas d3db8f5be7 Rename project_changed to project_data_changed signal, add a new method for this signal in ExtensionsAPI 2024-02-22 17:43:47 +02:00
Emmanouil Papadeas a06d6a2909 Improve static typing in the ExtensionsAPI 2024-02-22 00:46:28 +02:00
Emmanouil Papadeas 22ddc96962 Use getters to lazy-load cleanEdge and OmniScale shaders 2024-02-19 02:09:35 +02:00
Emmanouil Papadeas 9a313821dc When exporting, Pixelorama now remembers the last exported path 2024-02-15 18:41:24 +02:00
Emmanouil Papadeas f56d536b36 Create a get_mirrored_positions() method in Tools
Reduces some code replication across tools
2024-02-13 02:31:48 +02:00
Emmanouil Papadeas 9f82c85b73 Fix issue when uploading a shader on the Web version 2024-02-12 00:29:30 +02:00
Emmanouil Papadeas c9ddde7194 Use FFMPEG to import videos and gifs
Haven't tried large videos, but I imagine Pixelorama would run out of memory quickly. Maybe we should safeguard against that somehow. We also need to get the fps from the imported video and use it in the new project.
2024-02-05 03:32:43 +02:00
Emmanouil Papadeas 85ac0897a9 Remove unused method parameter in Palettes' copy_palette() 2024-02-05 00:17:56 +02:00
Emmanouil Papadeas fb948c33b4 Add a "Create a new palette" option on the sort palette button
Enabled by default, every time you sort a palette it creates a copy of the original palette and it sorts that, instead of sorting the original palette directly. This reduces the risk of destructive change, as the palette system does not have undo/redo support. If disabled, sorting affects the original palette directly, without creating a new one.
2024-02-05 00:16:22 +02:00
Emmanouil Papadeas 5dfe1cc271 Set Selection.gd process input false by default, fix cursor still being set to a cross when entering the canvas if it's disabled in the preferences 2024-02-04 00:12:19 +02:00
Emmanouil Papadeas 4c39e29b67 Fix UI not staying dimmed after opening a native file dialog 2024-02-03 13:55:17 +02:00
Emmanouil Papadeas da0066259e [WIP] Copy default layouts to the layout directory so they can be modified
Moved some logic away from TopMenuContainer to Main.gd and the layout array to Global.gd.
2024-02-02 01:42:29 +02:00
Emmanouil Papadeas ffd729486f Expose window transparency as an option in the preferences, keep it disabled by default
I had to disable it, because for some reason having it be enabled by default does not seem to be working. This may be a good idea anyway, as many people will not need this feature, and having this enabled affects performance.

This commit also allows for changing project setting related options in the preferences to also work when running Pixelorama inside Godot.
2024-02-02 00:19:53 +02:00
Emmanouil Papadeas e648d0d612 Some code improvements in DrawingAlgos
Should also result in minor optimizations
2024-01-31 02:26:49 +02:00
Emmanouil Papadeas 399fc8dfbd Make similar_colors() in DrawingAlgos faster
We finally found some use for Godot 4's new Vector4, let Godot's built-in functions handle the math, since they run in native C++.
2024-01-31 01:41:58 +02:00
Emmanouil Papadeas 63691cacaf Load pxo files from the Web version - Fixes #820 2024-01-30 21:17:31 +02:00
Emmanouil Papadeas 6345c52b5f Fix override.cfg being created in the wrong location if Pixelorama is launched through a launcher or a shortcut 2024-01-29 16:35:23 +02:00
OverloadedOrama a7cf93d1e5 Fix not being able to draw when closing the splash screen
Regression from b08420d0
2024-01-26 04:05:37 +02:00
Emmanouil Papadeas b126e95b64 Almost made selection rotation with gizmos functional
Not exposed yet
2024-01-25 02:33:41 +02:00
Emmanouil Papadeas ce7a5e77ba Add a single window mode setting in the preferences
True by default, when set to false the UI uses multiple windows
2024-01-24 18:31:22 +02:00
Emmanouil Papadeas 4bc0fba941 Add a variable in Global for setting file dialogs as native, and add a "FileDialogs" node group
This settings is not exposed in the preferences in this commit
2024-01-24 03:57:40 +02:00
Emmanouil Papadeas b08420d09d Don't change the value of can_draw in Global.dialog_open()
In Godot 4 dialogs seem to be blocking the input to the rest of the UI, so this may not be needed
2024-01-24 03:19:57 +02:00
Emmanouil Papadeas 4e9b657077 Remove Global.has_focus completely
Might be a risky change, but I haven't noticed any bugs so far
2024-01-24 03:14:11 +02:00
Emmanouil Papadeas 42de5ccb29 Remove unneeded has_focus checks 2024-01-24 03:06:09 +02:00
Emmanouil Papadeas 3a852e44ff Add a popup_error() method in Global
Just to reduce code duplication and make error appearing easier
2024-01-24 02:27:57 +02:00
Emmanouil Papadeas 43d241a5c2
Video exporting by calling FFMPEG externally (#980)
* Basic mp4 exporting, needs ffmpeg

* Add avi, ogv and mkv file exporting

* Add webm exporting

* Set ffmpeg path in the preferences

* Show an error message if the video fails to export

* Make sure to delete the temp files even if video exporting fails
2024-01-24 02:00:17 +02:00
Emmanouil Papadeas 204eff8184 Fix selection being incorrect when the image is being scaled (mostly when being made smaller). 2024-01-23 19:38:21 +02:00
Emmanouil Papadeas e7a469fa4d Refactor scale methods of DrawingAlgos 2024-01-23 19:25:32 +02:00
Emmanouil Papadeas 6448b7ee7c Remove unnecessary Array casting in DrawingAlgos 2024-01-23 19:07:35 +02:00
Emmanouil Papadeas bc8fadb67c Fix cel button image texture breaking when the image gets resized 2024-01-19 18:25:50 +02:00
Emmanouil Papadeas 72bec41e63 Add icons to some Help menu items, add a new "Support Pixelorama's Development" item and remove "Donate" from the About dialog 2024-01-10 00:30:27 +02:00
Emmanouil Papadeas 4d113dbc75 Change some method names in the SignalsAPI, improve docs of some signals in Global 2024-01-09 16:32:17 +02:00
TheLsbt f373dae714
Better signal representation (#971)
* Update 3DShapeEdit.tscn

Change the menu button to flat to indicate that it is a button that you can press and not a label

* Changed Signal names to make sense

Note: I did not change functions in the ExtensionsAPI

Changed signals in Global.gd (and everywhere else they are referenced) from *_changed to *_switched

* Bonus Signal

Added a signal in Global.gd that gets emitted just before the project is changed.

Added project_changed to Global.gd which also emits what project was changed by an action (not switched).

* Formatting
2024-01-09 00:22:56 +02:00
Emmanouil Papadeas 4f54ffc987 Rename "Crop Image" to "Crop to Selection" and "Trim Image" to "Crop to Content"
Same names as the GNU Image Manipulation Program, much more clear as to what each option does.
2024-01-04 16:28:39 +02:00
TheLsbt c8f37943d8
Reference Image Improvements (#961)
* Reference Image Updates

* Fixed static typing

Fixed static typing in "src\UI
\ReferenceImages\ReferenceEditPanel.gd"
Changed "ri == null" to "!ri" in "src\UI\Canvas\ReferenceImages.gd"

* Tried fixing the static typing again

Removed lambda functions for the confirmation dialog.
Removed irrelevant print statement.

* Tried fixing static typing again

I think its fixed now

* Changed Spacing

* Fixed Trailing Whitespaces and tabs

* Fixed Final Trailing Whitespace

* Fixed styling and removed useless enum

* Removed double tabs left over from previous commit

* Fixed remove ConfirmDialog Showing on startusp

* Tried Fixing gdlint issues

* Fixed Linting

* Fixed Spelling issues

* Drag and drop to rearrange reference images

Added the ability to drag and drop Reference Images similar to dragging and dropping layers. These can be dragged or used with buttons (similar to the buttons that move frames). With full undo/redo support.

Added tool buttons these should help people who draw on tablets that cannot use keyboard shortcuts (icons still need to be created)

Renamed ReferenceEditPanel.gd to ReferenceEdit.gd (because it is no longer the script of a panel) and changed the base class of the Reference Panel.

Added some more translations.

Remade ReferenceImageButton.tscn to allow for drag and drop

Added drag highlight

* Added Icons

Added icons for the tools of the Reference Images

* Applied the icons to the UI

* Fix Scripting Issues

* Fixed Linting

* Rename Move.png to move.png

* Update Canvas.gd

* Updated the tooltips

Also added the correct translations

* Rename Select.png to select.png

* Rename Select.png.import to select.png.import

* Rename Move.png.import to move.png.import

* Rename Rotate.png to rotate.png

* Rename Rotate.png.import to rotate.png.import

* Fixed import files

* Rename Scale.png to scale.png

* Rename Scale.png.import to scale.png.import

* Added logic to update the reference panel when the project changes

Also fixed visual bugs related to highlighting the current reference image.

Made it so the reference image that was selected in a project get selected again when the project opens instead of going back to -1 (nothing)

* Update Project.gd
2023-12-31 14:12:37 +02:00
Clara Hobbs 3d2d9e47a8
Add support for InputEventMouseMotion.pen_inverted (#966)
* Add support for InputEventMouseMotion.pen_inverted

This commit adds support for stylus erasers, both for drawing and
choosing tools.  This may be supported on some styli by inverting them
as the property name suggests, or by holding a button while drawing with
the nib.

* Formatting fixes
2023-12-25 02:50:10 +02:00
Emmanouil Papadeas d36f89365c Change "Crop Image" to "Trim Image" and add a new "Crop Image" that actually crops the image based on the active selection 2023-12-24 01:11:12 +02:00
Emmanouil Papadeas 06b405dae8 Implements palette sorting 2023-12-23 19:00:24 +02:00
Emmanouil Papadeas 0cb98f6e2e
Revert palette file format back to JSON (#967)
* Some static typing and use notification to check if the theme has changed in swatches

* Use Vector2i for scrolling, hide scrollbars in the node properties

* More static typing improvements

* More static typing & docstring improvements, remove some methods from Palettes.gd

* [WIP] Go back to json for palettes instead of tres

* Revert back to using dictionaries for palette colors instead of array

Reverts part of the previous commit

* Read width & height from files, don't store the name

* Fix palette renaming

* Copy non-json palettes into json files

* Fix palette duplication

* Add a new _fill_imported_palette_with_colors() to avoid duplicate code in import file methods

* Fix palette file importing when not initialising

* Export palettes as images

* Replace "tres" with "json" filter in the open sprite dialog

* When exporting a palette as an image, automatically set the file name to the palette name

* Replace default palette files with json

* Remove the Global.palette_panel variable, use signals instead.

* Static typing in signals

* Fix warning in Palettes.gd

* Fix formatting

* Add missing comments to the palette files

* Update Palettes.gd

* A few more static typing improvements
2023-12-23 00:28:35 +02:00
Variable 54604fa0af
Allow Internal extensions (#963)
* Moved tools to Extension

* removed accidental change

* code re-arrangement

* some improvements

* Restored tools and some improvements

* typo

* re-arranged tools

* formatting
2023-12-20 16:23:20 +02:00
Emmanouil Papadeas 42e8c8cb50 When saving, don't include ".pxo" in the project name 2023-12-18 20:56:38 +02:00
Emmanouil Papadeas 89b17177a1 Show multiple save confirmation dialogs on quit for each project that has changes 2023-12-18 20:23:55 +02:00
Emmanouil Papadeas 9034b32d44 Use a MenuBar node in the top menu container
I didn't know this was a new node in Godot 4, very cool
2023-12-16 22:25:06 +02:00
Emmanouil Papadeas b42c2d4cae Fix crash reported in #960 2023-12-15 18:54:10 +02:00
Variable 8d09713774
ExtensionApi Improvements (#959)
* Improved signal api

* added two more signals

* Improved debug messaging system

* fix typo
2023-12-14 03:44:50 +02:00
Variable 17ee10a131
[ExtensionsAPI] Implement an Import API (#957)
* Added ImportAPI

* Delete src/UI/Dialogs/PreviewDialog.gd

* Delete src/UI/Dialogs/PreviewDialog.tscn
2023-12-12 16:04:49 +02:00
Emmanouil Papadeas 495c3b8ebe Don't call project_changed() whenever a reference image gets imported 2023-12-07 16:09:00 +02:00
Emmanouil Papadeas aacd41f2e5 More z-index layer ordering fixes 2023-12-06 15:11:04 +02:00