* Blend group layers on `DrawingAlgos.blend_layers()`
* Support group layer blending on the canvas
* Allow editing of group layer properties
* Fix issues with group layer blending in canvas, and unite common code
* Group layers can now be used as clipping masks
* Make move tool preview work on child layers
* Change OffsetImage's `blend_layers()` to support group layer blending
* Support group layer blending in the canvas preview
* Fix layer blending mode, clipping mask opacity and cel opacity not being updated automatically if the layer/cel changed is not selected
* Add a pass through blending mode to layer groups
Fingers crossed that no bugs were introduced
* Fix issue with layers that belong to pass through groups not updating their textures on the canvas automatically on undo
You currently cannot move multiple cels on different layers, they still act as swapping. Eventually I'd also like to implement moving cels between different layers, but they would also have to be on the same frame. I don't think moving cels between different layers and frames at the same time is possible.
A slightly breaking change for a minor update, but one that needed to be done. The bucket tool's "similarity" (now renamed to "tolerance") used to work the opposite way from all other software, the maximum value meant exact color match and 0 meant no color match. Now it works the inverse way to make it be consistent with other software, and the range is now 0-255 instead of 0-100. 0 means exact color match, 255 means no color match. And tolerance also now works for the "similar area" mode as well.
1) `Palettes`'s `reindex_colors_on_width_increase()` was not changing the `index` of `PaletteColors`, thus resulting in the opened palette itself and the saved file having different indices, which could've caused conflicts with multiple colors sharing the same index, if the user re-arranged the palette after resizing it.
2) If the width was increased but the height increased, the positions of the colors remained the same, which resulted in the colors being in the columns that were removed, to be removed themselves. Now, the colors are taking advantage of the empty space, in order to remove as less as colors as possible. No colors will be removed if the width times the height is equal to or greater than it was before.
Thanks to https://godotshaders.com/shader/color-manipulator/
The shader has more options than just brightness and contrast though, but I didn't know how else to name the effect. "Adjust Brightness/Contrast" makes it immediately obvious as to what the effect is about.
Closes #1061, fixes issue where when Pixelorama's window loses focus, the dialogs disappeared, but the dialogs can no longer close when pressing outside of them.
Before this commit, when these tools were being used on large areas, the software would start being very slow due to the polyline drawing. Now it simply draws an image.
TODO:
- Optimize the lasso, pixel and polygon select tools
- Mirror the previews of ellipse selection and shape tools, for consistency with the lasso, pixel and polygon select tools
- Perhaps somehow remove Previews.gd since its work is even more limited now.
* splash ambient
* change fill to radial
* make import tag work with frame button
* hide Import tag dialog when clicking outside
* Icon shows the first frame of a tag
* formatting
* Add setting for Godots low processor usage mode
* Update name and description of low processor usage mode setting in preferences
* Fix a tiny mistake
Added missing strings to Translations.pot and fixed a few ones that were broken either because of missing periods, differences in capitalization or because of trailing newlines (the latter seems to get automatically trimmed in tooltips during runtime)
A few buttons and labels in Pixelorama weren't getting updated when changing languages, they'd just remain at the language the program started up with or only update when changing projects.
This fixes that and ensures they get updated as soon as the user changes languages.
This has no effect on non-Steam builds. Steam achievements are mostly for fun, but can also be educational because they can let users know of certain features and functionalities. It's using the GodotSteam GDExtension, but because I do not want to bloat the GitHub repository with things that are not needed for most builds, I decided not to include the GDExtension files, and instead check if the `Steam` class exists in `ClassDB`. The new SteamManager class pretty much does nothing on non-Steam builds, so do not worry about bloat.
In the future we could even take advantage of more of Steam's features, such as Cloud storage for pxo files.
* removed some redundant code
(not sure how it got there), made tracker toggle obey the variable
* Changed perspective editor from Control to PanelContainer to avoid some UI issues
This is just an added step for security. Now, if an extension file gets compromised, Pixelorama can detect the mismatch between the file's SHA256 and the SHA256 from the extension repository, and refuse to install the extension.
For example, someone with malicious intent could gain access in the repository where the extension file is hosted, and replace it with a different file. Before this commit, the malicious file would be downloaded normally, but now, since the file will change, so will its SHA-256 hash, so Pixelorama will be able detect the mismatch and recognize that it is potentially malicious.
The reason for removing the other store link is because I am worried that adding more links by default, can make it easier to compromise security. Extensions can be dangerous, and even if one link gets injected by malware, users are in danger, so I think it's better to keep the extensions is one, centralized place. I included all of the extensions listed in Variable's store link in this file.
I also renamed it from store to repository, as I think it's a more fitting name.
The issue is that by default it's mapped to Enter, which is also used to confirm editing of a slider. If we want to keep the shortcut, we need to check if something else does not have focus first.
* Implement Columns field of imported .gpl palettes.
- Fixes Columns field being ignored when imported.
- _fill_imported_palette_with_colors is modified to accept an optional
width parameter, which defaults to Palette.DEFAULT_WIDTH instead of
a hard-coded 8.
- A maximum of width of 16384 is enforced to mitigate maliciously large
values.
* Run gdformat.
* Run gdlint.
* Consume all whitespace between field and value.
This will allow us to implement shearing more easily. Also, for the non-SmearRotxel shaders, normalize their pivot in GDScript, before passing it to the script. Should probably be faster this way
The "Animation plays only on frames of the same tag" button has been moved to the general timeline settings, along with a new slider that resizes the cel buttons in the timeline.
* resolved issue where pixelorama_data folder is to registered on MacOS builds
* Reverted changes to workflows and added Mac Resource directory to search path for palettes
* format Global.gd with gdtoolkit
Similar to 7507206726 but for layers. Layer swapping (with control) only works when one layer is selected. The move up/down buttons in the timeline only work with one layer as of this commit.
This only works for frames at the moment, not layers and cels. Layers may be harder to support because they also have children. Supports both the "move left/right" options and drag and dropping. Frame swapping (with control) only works when one frame is selected, because I am unsure how they should be handled, especially when the selected frames are not continuous.
Didn't encounter any issues on my testing, but more testing is always welcome.
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.
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.
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.
* experimental refactor
* some fixes, some improvements
* some formatting and add check for invalid argument
* formatting
* added similarity option
* linting
Supports exporting images & spritesheets with frame, direction, scale and output file name specification. Also added some informative arguments that simply print out some data.
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.
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.
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!
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.
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.
* 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>