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

245 commits

Author SHA1 Message Date
Emmanouil Papadeas d7cfa87ffa Optimize Magic Wand tool based on #667 and #672 2022-05-20 17:47:19 +03:00
Emmanouil Papadeas a98424e474 Rename "confirm" and "cancel" input events
Into "transformation_confirm" and "transformation_cancel" respectively.
2022-05-16 20:01:17 +03:00
Emmanouil Papadeas f509dfb9f6
Implement the Keychain Plugin (#700)
* Start implementing the godot_better_input plugin

* Update ShortcutEdit.gd

* Load & save preset option

* Add some groups and fix action events not being deleted on load

* Add MenuInputAction class for multiple menu accelerators

* Create a proper plugin and a BetterInput autoload

* Update menu accelerators

* Move settings to BetterInput

* Move menu enums to Global, make more MenuInputActions

* Add more menu events

* Add new groups

* Optimize BetterInput _input() method

* Remove a lot of lines of code

* Change some previous events, add ignore actions and a View menu group

* Change update_item_accelerator to update_ui

* Move MenuInputAction initialization to BetterInput.gd

* Update hint tooltips when a shortcut changes

Temporarily comment out some code regarding the configurable modifiers

* Some MenuInputAction variable name changes

* Add handle_input() to InputAction

* Update the shortcuts of buttons

* Fix shortcut selector menu position

* Change plugin name into Keychain

* Fix keyboard input dialog exiting when Enter or Space is being pressed

* Add two more groups

* Make groups folded by default

* Temporarily make tool modifier shortcuts not configurable

A temporary change, they will be made configurable again, with different actions that are currently mapped to the same events, local/independent from each other.

* Add license for Keychain

* Fix issue where a key event would be added in other input types

* Fix bug where the assigned state was not updated when the dialog appeared again

* Update Main.tscn

* Add a disabled line edit in keyboard shortcut selector to grab focus

* Load presets in the Keychain autoload

This way, the input actions get updated from the start, instead of only at the ShortcutEdit scene.

WARNING, this currently causes crashes if the menu items have no shortcut binded to them.

* Move custom settings away from Keychain.gd

To keep it the same as the upstream plugin

* Change menu enum names

* Made action_get_first_key() more general

* Use arrays for menu items instead of dictionaries, fixes crash

* Move moveable panels to Window menu

* Format

* Optimize hint tooltip updating

* Add support for translations in Keychain

* Translation changes

* Made tool modifiers configurable

Needs more testing.

* Made camera arrow key movement configurable & joypad axis support

This commit removes the ability to press Shift and Control+Shift to adjust the camera arrow key movement speed. Instead, the speed depends on the zoom level.

The right joypad analog stick is configured to move the camera by default.

* Rename presets into shortcut profiles, use Resources and let users create their own

* [skip ci] Update addons README

* Update Global.gd
2022-05-16 15:07:51 +03:00
Variable c1759c74eb
Draw UI improvements (#671)
* add limit change with brush

* Delete Draw.gd

* Delete BaseTool.gd

* Some improvements

1) A Smarter Placement of "brushes_popup"
2) A Different Convention for image brushes (100 % instead of 1px)

* Formatting

* some more formatting
2022-05-11 15:46:29 +03:00
Emmanouil Papadeas 9e7dd1210b Fix flood fill bug mentioned in https://github.com/Orama-Interactive/Pixelorama/pull/672#issuecomment-1114762474 2022-05-03 00:58:14 +03:00
Emmanouil Papadeas 539ccb2e58 Fix issue with the bucket tool's "same color pixels" method not working in all selected cels 2022-05-01 03:28:45 +03:00
Matteo Piovanelli c44feb50a7
Refactored bucket.gd (#681)
* Refactored bucket.gd
Separated out the larger functions to ease readability and possible
future improvements.

* Removed debug comment
2022-04-29 00:56:55 +03:00
Variable 16a2abf9b4
Added shortcuts (#673)
* add limit change with brush

* Delete Draw.gd

* Delete BaseTool.gd

* Added all shortcuts

* formatting

* Removed 1 shortcut from "Fullscreen"

* Assigned shortcuts to special behaviours

* formatting

* Added configurable shortcuts to special behaviour

* formatting

* Added special behaviour shortcuts and some code im

provements

* a minor fix
2022-04-27 15:03:39 +03:00
Emmanouil Papadeas 7215f3e0a7 Fix formatting
No linter erros fixed yet
2022-04-22 15:42:36 +03:00
Matteo Piovanelli 1a19c3a297
Further speed up of bucket fill (#672)
* Removed some calls to can_pixel_get_drawn by
managing has_selection condition differently

* Refactored `_set_pixel` to shortcircuit.
This allowed shortcircuiting away some tests to speed up common code
paths.

* Further refactor of `_set_pixel`
Removed unused functions. Made conditions for pattern-fills clearer.

* Refactor.

* Refactor.

* Removed dev timers.
2022-04-21 04:57:39 +03:00
Manolis Papadeas bdd32a8239 Make marching ants shader ratio-independent 2022-04-18 15:32:14 +03:00
Matteo Piovanelli 6a7ee3407c
Upgrade/floodfill (#667)
* Implemented floodfill routine by Shawn Hargreaves

* Removed performance timers used for testing

* Reformatting file after setting "Trim Trailing
Whitespace On Save".

* Refactoring to respect code guidelines.

* More reformatting

* More refactoring

* Refactor: added # gdlint: ignore=max-line-length
to line the parser has me set to longer than 100 chars

* Manage selected areas
2022-04-16 12:22:51 +03:00
Manolis Papadeas 66ad745c52 Minor code changes 2022-03-29 02:35:32 +03:00
Variable 57ea4d25f1
Draw optimizer (#657)
* draw optimizer

* improvements

* some memory improvements

don't think this one's needed but doing it just in case...

* formatting

* add limit change with brush

* fixed a small bug

cache was being kept when frames were changed

* formatting

* change `_cache_limit` on changing `_brush_size`
2022-03-03 14:54:27 +02:00
Manolis Papadeas 68414f5bd9 Made pixel perfect into a global tool option
More global tool options will most likely be added soon, most notably tablet pen pressure sensitivity options.
2022-02-28 19:24:14 +02:00
Manolis Papadeas add9ba926e Remove pre-set tool button nodes, tool setup now being done only in the Tools singleton
Now when making a new tool we only have to set it up in Tools.gd, along with its button and cursor textures and its tool options scene. Previously, we also had to put it in ToolButtons.gd and manually create a button in Tools.tscn
2022-02-21 18:02:02 +02:00
Manolis Papadeas 290e8cdb18 Remove mirror nodes from the tool scenes 2022-02-17 16:12:07 +02:00
Manolis Papadeas 93622d5761 Mirroring buttons now affect both left & right tools 2022-02-17 16:07:03 +02:00
Variable 008683a33a
Novhack fill shader (#649)
* Get same color pixels shader (#2)

* Replace same color pixels bucket code with a shader

* Add pattern fill

Co-authored-by: novhack <42614907+novhack@users.noreply.github.com>

* formatting

* some minor changes and fixed a bug

* added similarity feature

* formatting

* Update Bucket.gd

* added similarity feature in shader

Co-authored-by: novhack <42614907+novhack@users.noreply.github.com>
2022-02-16 00:15:53 +02:00
Manolis Papadeas e2bb0b8440
New UI system using Dockable Containers (#640)
* Add dockable container plugin

Experimenting with it, also added a tabs_visible property to the DockableContainer. Removed some code about Tallscreen from Main.gd, but not all of it.

* Add a panel behind the UI, temporarily restore the dark theme

* Remove tallscreen code

* Add edit mode, toggles DockableContainer's tab visibility on and off

* Split tool options into color pickers, left and right tool options

* Remove alternate_transparent_background

* Re-order tool buttons on resize

* Clip content in timeline

* Changes to the tool panel

* Removed some old unused node variables

* Restore Zen mode

* Set tabs_visible = false by default

* Better way to set tabs_visible = false by default

* Added the license of godot-dockable-container

* Remove unneeded lines

* Update README.md

* Restore window transparency with the canvas

It makes all of the TabContainers transparent however, which may not be what we actually want.

* Change tab names of the UI elements

* Remove unneeded nodes from ColorPickers.tscn

* Update default.tres

* Let the user hide elements individually

* Add some checks in HandleThemes

* Center tool icons

* Remove unneeded custom panel in SplashDialog

* Bump version to v0.10-dev and some other minor changes

* Fix crash on Zen Mode

* Added a hacky way to fix the issue with the palette panel size
2022-01-30 00:47:25 +02:00
Manolis Papadeas f7a6ed0289 Don't draw in unavailable layers if multiple cels are selected 2022-01-09 00:53:42 +02:00
Manolis Papadeas 9fb9d06c38 Clear mask in Draw tools if it's not needed and it already exists 2022-01-08 17:44:15 +02:00
Manolis Papadeas db8ded9d66 Fix Pencil bug with transparent colors immediately blending when Overwrite is setto false 2022-01-08 17:18:59 +02:00
Manolis Papadeas 95ae81eef1 Fix undo error when the user draws on a locked/invisible layer 2021-12-29 21:48:33 +02:00
Manolis Papadeas 93268fef43 Fix another bug with Undo/Redo where the app became unresponsive if the user drew outside the canvas 2021-12-25 19:21:09 +02:00
Manolis Papadeas 6a78351704 Fix undoredo not working if the users draws on a locked/invisible layer 2021-12-21 01:26:58 +02:00
Manolis Papadeas 92c252e22d Fixes #618 2021-12-15 01:39:24 +02:00
JumpJetAvocado fa27d7fbad
Fix drawing bug reported in issue-555 (#603)
* Fix drawing bug reported in issue-555

* Remove unused parameter from commit_undo() in Draw.gd
2021-12-06 18:38:54 +02:00
Manolis Papadeas af86856dc6 Added a clipboard pattern button
It starts empty and gets updated every time the user copies something.
2021-12-05 18:37:15 +02:00
Manolis Papadeas 59ee60151e Change "Rectangle Select" undoredo action to "Select" 2021-12-02 13:25:20 +02:00
Manolis Papadeas 67ec887ad1 Just one method for undo/redo in Global.gd 2021-12-02 02:22:32 +02:00
Manolis Papadeas 246f6f9be1 Minor code changes 2021-11-25 19:10:04 +02:00
Manolis Papadeas 8c9545e183 Preload tool scenes
The app now opens just a bit faster
2021-11-25 17:42:35 +02:00
Manolis Papadeas c6b9a1fb82
Format code and add static checks (#599)
* gdformat .

* Lint code - Part 1

* Format code - Part 2

* Lint code - Part 2

Trying to fix the max allowed line length errors

* Add normal_map_invert_y to the image .import files

Because of Godot 3.4

* Do not call private methods outside of the script's scope

Lint code - Part 3

* Format code - Part 3

* Fixed more line length exceeded errors - Lint code Part 3

* Export array of licenses - Lint code part 4

* Clean hint_tooltip code from Global

Removes a lot of lines of code

* Create static-checks.yml

* Fix FreeType's license
2021-11-25 14:48:30 +02:00
Manolis Papadeas f4c903771d Remove some unneeded yield() calls
And minor changes to make the code a tiny bit more clean. I tested this PR, but it still might be a bit risky.
2021-11-17 19:59:14 +02:00
Manolis Papadeas 1fa0b1e1b7 Hide the "Brush colors from" option from the Eraser tool 2021-11-15 02:03:05 +02:00
Manolis Papadeas 9cfa8c82b1 Make the eraser tool's transparency settings work with brushes 2021-11-14 16:19:38 +02:00
Manolis Papadeas 4f02ea1b97 Alt to pick colors with draw tools - Closes #125 2021-11-14 03:30:00 +02:00
Manolis Papadeas 24d25d49ea Implement #429 2021-11-11 03:21:34 +02:00
Manolis Papadeas 6e5c4fc99f Do not keep decreasing opacity with the Eraser without releasing the mouse first
Only relevant if the opacity strength is less than 255 in the tool options
2021-11-08 19:26:00 +02:00
Manolis Papadeas 77996c769e Implement #540 and a part of #429 for the zoom tool 2021-11-03 02:33:45 +02:00
Variable 087387a700
Minor adjs to eraser (#548) 2021-10-15 16:31:24 +03:00
Manolis Papadeas c7f238ff19 Don't show the brush color from option in the Shading tool 2021-10-15 15:49:23 +03:00
Manolis Papadeas cdb7ff1004 Add an opacity option for the Eraser's tool options
This lets the user change the strength of the tool. When it has an opacity of 255, the eraser will completely delete the underlying pixels. If it has less than 255, it will simply subtruct that value from the underlying pixel's alpha.
2021-10-12 23:12:05 +03:00
Manolis Papadeas 680ab481f3 Don't transform content if layer is locked or invisible 2021-08-30 01:22:13 +03:00
Manolis Papadeas 2518f72319 Fix Select by Color not working properly on non-square canvases 2021-08-25 16:43:04 +03:00
mrtripie de28a9d68e
Shading Tool Hue Shift Fixes + Tweaks (#522)
* Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode

* Shading tool hue shifting fixes and tweaks

Co-authored-by: MrTriPie <MrTriPie>
2021-08-23 07:04:52 -07:00
Manolis Papadeas ed45c86649 Remove unused variables from Shading.gd 2021-08-21 17:00:37 +03:00
mrtripie c196a32ebc
Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode (#519)
Co-authored-by: MrTriPie <MrTriPie>
2021-08-19 06:49:14 -07:00
Manolis Papadeas 58b1da41a1 Fix hue shifting brightening and darkening on colors between yellow and purple
By yellow and purple I mean hue 60 and hue 270 respectively
2021-08-18 21:53:42 +03:00
Manolis Papadeas 3dfd597de4 Fix shading tool not working properly with multiple selected cels 2021-08-18 14:42:26 +03:00
Manolis Papadeas 4292fcc51f Change behavior of selection quick-copy (Ctrl+Alt+mouse movement)
It should now keep the same image data until the transformation gets confirmed
2021-07-31 02:03:51 +03:00
Manolis Papadeas 06bd56866d Change selection shortcuts: Alt is now used to only move selection and Ctrl+Alt makes a quick copy of the selected content 2021-07-29 16:15:02 +03:00
Manolis Papadeas 1d20295f7d Keep images unlocked after editing them - Should close #331
Not sure if this actually solves the issue or just makes it more rare, but I haven't been able to reproduce any PoolVector locking issues so far. The problem was that images were remained locked essentially all the time, which seemed to cause issues. Maybe other PoolVectors could not get locked?
2021-07-25 21:49:37 +03:00
Manolis Papadeas 68cbf4cfb3 Remove unused method in Draw.gd
Global search for "restore_image" doesn't return anything, so I assume it's unused
2021-07-24 18:42:07 +03:00
Manolis Papadeas 763a063de7 Made brushes work with the shading tool 2021-07-21 02:19:46 +03:00
Manolis Papadeas 353702ebc4 Make top bar shape-related text disappear after shape has been drawn with the shape tools 2021-07-21 00:45:57 +03:00
Manolis Papadeas 2c90991482 Closes #509 2021-07-18 14:28:33 +03:00
Manolis Papadeas 6de6c4b800 Closes #506 2021-07-14 18:06:07 +03:00
Manolis Papadeas a40203e5cc Bucket flood fill no longer affects separated selected parts of the canvas 2021-07-11 20:20:37 +03:00
Manolis Papadeas 240e582070 Shape tool blue indicators now reflect their proper shape 2021-07-08 22:26:32 +03:00
Manolis Papadeas 873e2b8e9e The indicator's size of the shape tools should now change depending on the tool's thickness 2021-07-08 21:48:47 +03:00
Manolis Papadeas f5d07e660d Do not clear content from selection in selected cels when moving if Alt has been pressed beforehand
This is about Alt + mouse click when moving a selection. See https://github.com/Orama-Interactive/Pixelorama/issues/129#issuecomment-756799706 for more info
2021-06-23 20:38:17 +03:00
Manolis Papadeas de850ce8a1 Ability to select multiple cels and edit them all at once
A rather significant change, so, while I have tested it, it might still be buggy. Implements a part of #306.
2021-06-12 01:06:13 +03:00
Manolis Papadeas 88e95ce35f Very minor code cleanup in 4 tools 2021-06-09 17:31:58 +03:00
Manolis Papadeas ec1b29eb5e Let the user change icon colors regardless of theme 2021-06-04 21:44:05 +03:00
Manolis Papadeas 12ce12a292 Replace button icons with single-color textures that change color automatically depending on the theme
There is no longer any need for having specific graphics for each theme, as white colored textures can change their modulation to any color.
2021-06-03 22:42:08 +03:00
Manolis Papadeas fd45344e6b Escape cancels polygon selection making 2021-06-02 03:33:19 +03:00
Manolis Papadeas 43e733fe65 Fix Move tool's snap to grid movement and take grid offset into account 2021-05-28 17:43:50 +03:00
Manolis Papadeas bd84fbbe39 Rename the Lighten/Darken tool to Shading tool 2021-05-26 02:17:49 +03:00
Manolis Papadeas 4e8acdf002 Updated Translations.pot and some tool hint tooltips 2021-05-25 02:51:10 +03:00
Variable 62dc608eea
"Fill inside" option in pencil tool (#489)
I modified some code from  "EIRTeam/Pixelorama" and merged it with pencil tool.
2021-05-23 14:58:19 -07:00
Manolis Papadeas 5b6f4ebe3e Added Polygon selection tool
Cursor icon is temporary. It works by clicking multiple times on the places you want to create edges, and to complete the polygon you either have to click at the first edge (if you hover the mouse, a circle appears in that position), or you can auto-fill by double clicking.
2021-05-18 01:56:55 +03:00
Manolis Papadeas 6499c0d3d5 Auto invert preview colors based on the screen color
Basically, when the background color of the screen at certain points is dark, the preview at that spot is white, and when it is bright, the preview is white at that spot. This helps to keep the previews always distinguishable, regardless of the background color.
2021-05-17 02:24:49 +03:00
Manolis Papadeas 61e7633365 Optimize Lasso tool's draw_preview()
Do not have it run when we're not creating a selection
2021-05-16 18:55:34 +03:00
Manolis Papadeas b8d055fe01 Added lasso / free select tool
Temporary icon, probably. Should work without problems, but more testing would be nice.
2021-05-16 03:52:13 +03:00
Manolis Papadeas 909f9480cc Correct rectangular and elliptical selection mirroring 2021-05-16 03:19:49 +03:00
Manolis Papadeas d13c5c1063 Added ellipse selection tool
Icons most likely temporary. A bit problematic when the selection is in negative coords and the preview does not work well with mirroring and mirror view. Same is true for the shape tools.
2021-05-14 03:48:33 +03:00
Manolis Papadeas 6b9f860618 Fix brushes being drawn flipped horizontally
My bad!
2021-05-13 21:50:55 +03:00
Manolis Papadeas 1827381439 Remove unnecessary image.lock() lines 2021-05-12 15:51:31 +03:00
Manolis Papadeas 99ce07b3ab Added a new line tool
One of the most requested tools has finally been added!
2021-05-12 04:35:20 +03:00
Manolis Papadeas 1b80100588 Stop movement if content transformation has been confirmed while content is being moved 2021-05-11 04:41:30 +03:00
Manolis Papadeas 47e83d7163 Added UndoRedo support for selection transformations for tool options and fixed resize content behavior 2021-05-11 00:27:57 +03:00
Manolis Papadeas e86dde2fb5 Do not require confirmation when transforming a selection with invisible contents 2021-05-10 18:44:12 +03:00
Manolis Papadeas 70d5fad9fd Make selection tool options not editable when there is no selection 2021-05-09 00:56:23 +03:00
Manolis Papadeas 356ddc0038 Implement moving selections with arrow keys
Moves selection with contents by default.
Control + arrow keys = Moves & snaps selection to grid.
Alt + arrow keys = Moves the selection itself without the contents.
2021-05-07 04:33:28 +03:00
Manolis Papadeas e75b6e7d67 Made Rectangle Selection and Magic Wand tools work with symmetry 2021-05-04 21:26:04 +03:00
Manolis Papadeas ea8bfcd25d Remove drawn_rect from Selection.gd and use draw_preview() in RectSelect.gd instead 2021-05-04 19:26:06 +03:00
Manolis Papadeas 6203b3a71c Minor UI changes in the tool options of shape tools 2021-05-04 13:26:07 +03:00
Manolis Papadeas 0ba940c886 Implement snap to grid while moving selections and using the Move tool
Mouse click + Ctrl to snap to grid while moving.
2021-05-04 02:45:14 +03:00
Manolis Papadeas 7cbbf4399d Implement Alt + mouse movement to quickly copy & move selection contents without cutting them from their original position 2021-05-03 21:10:49 +03:00
Manolis Papadeas 20275fc465 Snap movement to axis by holding Shift after mouse clicking
Works with the Move tool and with the Selection tools.
2021-05-03 18:33:51 +03:00
Manolis Papadeas 0a35615c24 Added a displace origin option to Rectangle, Ellipse and Rectangle Selection tools
Works with Mouse Click + Alt. Needs to be documented in the tooltips.
2021-05-03 03:11:12 +03:00
Manolis Papadeas 8f1c6bb3d3 Move selection with contents by default with all selection tools
Now, if you want to move the selection itself without its contents, you have to do Ctrl + Alt + Mouse click. Works the same with all selection tools.
2021-05-03 02:00:07 +03:00
Manolis Papadeas 4a1fcc4ca7 Add position and size as selection tool options
This allows the user to easily move and resize selections
2021-05-01 03:10:23 +03:00
Manolis Papadeas 0b3424be80 Make selection tool scenes inherit from SelectionTool.tscn
Useful for them to be able to share common tool options
2021-04-28 04:00:40 +03:00
Manolis Papadeas 708a1ddc20 Organize the selection tool files in a new folder 2021-04-28 03:06:03 +03:00
Manolis Papadeas b3d581bad4 Create a parent SelectTool script where all selection tools extend from 2021-04-28 02:57:48 +03:00
Manolis Papadeas afd7cc43c9 Rename move_content methods to transform_content 2021-04-23 23:37:07 +03:00
Manolis Papadeas 4412671a08 Add selection intersection with Ctrl + Shift + Mouse click 2021-04-22 18:12:45 +03:00
Manolis Papadeas ecdf689afd Add 1:1 rectangle tool creation and expanding from click position as its center
Works similar to the rectangle & ellipse drawing tools. Shift for 1:1, Ctrl for expanding from center.

Shift + mouse click = add to selection
Ctrl + mouse click = subtract from selection
Mouse click + Shift = Create a 1:1 (square) selection
Mouse click + Ctrl = Create a selection that expands from center
Mouse click + Shift + Ctrl = Create a 1:1 (square) selection that expands from center

A combination like Shift + Mouse Click + Shift will add to selection while also making a 1:1 selection
2021-04-22 16:45:26 +03:00
Manolis Papadeas ea606a072a Make layers uneditable when they're invisible 2021-04-21 00:12:05 +03:00
Manolis Papadeas d70c6a22c4 New tool: Magic Wand (temporary icon) 2021-04-20 15:53:16 +03:00
Manolis Papadeas fccd37360a New tool: Select by Color (temporary icon)
When the user clicks on a pixel, all pixels of the same color are being selected. Shift adds to the selection, Ctrl subtracts. The icon and the hint tooltip are temporary.
2021-04-19 18:50:43 +03:00
Manolis Papadeas 27cb0d2d2f
New selection system (#474)
* Basic move tool

* Added marching ants effect on the selection borders

* Rename SelectionRectangle to SelectionShape, make it have non-rectangular shape and multiple SelectionShapes can exist

- Create multiple selection rectangles
- Merge them together if they intersect
- Move the selections (without contents as of right now)
- Gizmos are being drawn but they are not functional yet

Code is very ugly.

* Sort vectors counter-clockwise to be used as polygon borders

I did this, no idea if it works properly, probably won't be used but I thought I'd keep it saved somewhere

* More experiments I may or may not need

Trying to generate a polygon from the individual selected pixels

* Change default rectangle select behavior and ability to clip polygons using Control

* Fix rectangle selection clipping

* Split polygon into two with selection subtracting

* Move selection with contents with the move tool

Code is still a mess, don't bother looking.

* Move some methods from SelectionShape.gd to Selection.gd

The purpose of this is to generalize some selection code, so that it applies to all polygons, the entire selection. More will follow.

* UndoRedo for border moving

Nothing else in the selections system works properly in UndoRedo right now. Needs:

- UR support for creating selections
- UR support for modifying selections (merging and cutting selections together)
- UR support for removing selection
- UR support for moving content

& for all the rest of the remaining features

* Moving all of the selection shape logic to Selection.gd

Handle all of the polygons there instead of having them as individual nodes. Should be easier to handle undo/redo this way. This commit probably breaks move tool + selection tool and undo/redo. Code is still a mess. For your sanity, I hope you are not reading this. I promise I will clean up.

* Move tool works again

Buggy and messy, of course.

* Remove unneeded code and restore selection move undoredo logic

* Made Selection.gd have one big preview_image for when moving content, instead of each polygon having its own image

Could be further optimized for some specific cases. We could also remove selected_pixels from SelectionPolygon.

* UndoRedo support for creating, deleting, merging and clipping selections

UndoRedo support for moving content not added in this commit. Should work but needs more testing. This PR also removes selected_pixels from the SelectionPolygon class.

* Confirm & cancel selection movement, should support undoredo properly too

Press Enter or do any editing to confirm movement, Escape to cancel. I will most likely add UI buttons for confirm and cancel too.

* Mirror View affects selection

* Restore Cut, Copy, Paste and Clear Selection

Pasting now no longer requires a pre-existing selection and instead copies the selections themselves too.

* Created a new Select menu, which has Select All and Clear Selection as options

Clear Selection now also confirms content moving. TopMenuContainer code has changed to no longer rely on Global for the menu buttons.

* Draw gizmos as rectangles

No functionality yet. They may need to be turned to nodes, so that they can easily resize based on zoom level and check for mouse enter/exit events.

* Made gizmos get drawn in the sides and corners of the big bounding rectangle instead of individual selection parts

Still no functionality yet.

* Restore label text

* Minor optimization when clipping selections

This will execute the for loop less times

* Made a Gizmo class, cursor change on hover, has_focus = false on mouse click

Now I should actually make them resize when dragged, aye?

* Very basic gizmo resizing, still a WIP, does not work properly yet

* Start replacing the array of selected pixels with a BitMap

This should optimize the selection making a lot, and it also allows for easy border drawing without having to deal with polygons, thanks to the MarchingAntsOutline.shader

Still commit is still a WIP, image effects and brushes may not work properly yet.

Because the BitMap has a fixed size, the size of the project, moving the selection outside of canvas boundaries has proven to be a bit tricky. I did implement a hacky way of handling it, but it may be buggy and problematic. I'm still unsure whether this is the best way to handle the situation.

* Selection works with mirror view

* Draw a black rectangle when the user is making a rectangular selection

After they release the mouse, the black rectangle becomes the selection

* Make Selection.gd update when undoing/redoing

* Fix brushes not working properly with non-rectangular selections

* Added invert selection

* Cache has_selection as a variable for a speedup

* Fix conflict issues with the shape tools

* Made the bitmap image squared so the marching ants effect will be the same on both dimensions

There may be a better way to fix the issue, perhaps inside the shader itself.

* Some optimizations to call selection_bitmap_changed() less times

* Restored almost all of the image effects

Left to do:
- Change gradient's behavior. Unsure of how it will work with non-rectangular selections yet, but it should not generate pixels outside of the selection.
- Restore rotation
- Resize bitmap on image resize
- Remove the `pixels` array from the ImageEffect

* Fix Selection.gd not updating when changing project

* Resize the selection bitmap along with image resize

* Restored rotation's old behavior and finally got rid of the selected_pixels array

The rotation does not yet work properly with selections, but at least it now "works".

* Resize selection too when using gizmos

Left to do for gizmos:
- Proper cancel transformation
- Begin transformation
(currently named move_content_start but it should be renamed to something more general) when resizing gizmos
- Keep the original image and selection in memory and resize them. Meaning, gizmos should not resize the already resized data, but only resize the original. This is less destructive as there is no danger of data loss.
- Always resize on InputEventMouseMotion. This is going to be worse for performance, but it will look better for the user.

* Image and bitmap resizing now uses the original data and begin transformation on gizmo click

No matter how many times the user resizes on the current transformation, the original data will not be lost until they either confirm or cancel, so there is no data loss before confirmation/cancel.

* Cancel transformation now works properly when the selection has been resized

* Made gizmos resize on mouse motion, fix issues with negative bounding rectangle and when combined with the move tool

* Resizing can now get out of positive bounds, clearing and inverting now gets limited to the canvas bounds

Resizing currently does not work properly with negative (left & up) canvas boundaries

* Flip image when resizing and the bounding rectangle gets flipped

* Call move_content_confirm() when inverting selection

* Attempt to implement selection resizing that goes outside of the canvas boundaries (not working properly yet)

* Flip selection when resizing to negative bounding rectangle sizes

And fix preview_image vertical flipping

* Fix rotation so that it works (almost) properly with selections

Rotation algorithms now accept and only work with a given image, and the pivot has been added as a parameter

* Experimental gizmo rotation - does not work properly yet

Transforming the selection outside of the canvas is still broken.

* Fix some issues with moving selection out of canvas bounds

* Fix more issues with selection getting resized outside of canvas bounds

* Update marching ants effect properly when switching between projects

And make sure the frequency of the marching ants effect always looks roughly the same on all project sizes

* Made the rotation gizmo part of the gizmos array and resize them based on camera zoom

* Remove unneeded parameter from move_bitmap_values()

* Remove more unneeded parameters

* Move the selection only if the cursor is above it and neither shift nor control are currently pressed

* Gradient generation now works on non-rectangular selections

Although this behavior might not be the intended one

* Copy/paste marching ants effect offset

Useful for when the selection is in negative coords

* Fix issue with clear selection & UndoRedo

* Restore the ability to move selection when it's in negative coords

* Made the marching ants offset a Project variable

This fixes the issue of project switching and keeping the previous project's offset. Again, this is only relevant for when the selection is in negative coords.

* Made the "from current selection" palette preset work with the new selection system

* Fix out of bounds error when using the rectangular select tool on negative coords

* Some code cleanup

* Comment out the rotation gizmo for now, since it does not work properly

* Update marching ants shader params and gizmo sizes when the bitmap changes

* Move some methods around in Selection.gd
2021-04-17 11:30:12 -07:00
Manolis Papadeas bcc0d359dc Restored LightenDarken's previous behavior
Fixes a minor issue from 6cce27a360
2021-04-16 21:47:03 +03:00
Manolis Papadeas 6cce27a360 Do not run update_mask() method if there is no pressure sensitivity option
Major speedup for large images. update_mask() is meant for pen pressure only, so there is no reason to calculate it if we don't have pressure sensitivity enabled
2021-04-01 03:40:35 +03:00
DragonOfWar 943a69c0e3
Add Rectangle and Ellipse tools (#456)
* Add Shapes Tool (WIP)

* Add Alt button + Fill shape + Other stuff

* Add blue theme button textures

* Fix tool not previewing on right button

* Add config functions

* Fix ellipse bug

* Correctly added thickness

* Keep preview with CTRL

* Fix weird PoolVector behaviour

* Make preview follow mouse when pressing CTRL

* Moved shapes class to a separate script

* Update tooltip

* Enable mirrors

* Separate tools + jittery preview fix + more

* Add missing translation

* Add missing icons and keybindings

* Changed shape draw function buttons

Co-authored-by: DragonOfWar <47753585+KawanWeege@users.noreply.github.com>
2021-03-30 10:07:13 -07:00
Manolis Papadeas a9045e317d Apply mirror view to all tools 2021-03-29 23:00:09 +03:00
Manolis Papadeas ce7320ad4f Renamed "Base" to "BaseTool" and made it a class 2021-02-02 17:48:17 +02:00
Manolis Papadeas 40f6a24fdc Made Zoom tool work on the second viewport too 2021-02-01 21:07:09 +02:00
Manolis Papadeas c54b74f829 Having no active selection no longer treats all the pixels of the canvas as selected
A performance boost for when opening large images. Also fixed an issue with pixels being selected outside of the canvas boundaries, when the selection rectangle was outside the canvas and its size got reduced.
2021-01-31 15:09:54 +02:00
kleonc 4001a32f2b
Cache tile mode rects (#443)
* Cache tile mode rects

* Make TransparentChecker don't calculate tile mode rect on its own

* Minor fixes

- typo
- formatting
- moved unlock() call to the method where matching lock() was called
2021-01-28 11:21:48 -08:00
kleonc 85b0611ca0
Speedup Draw.update_mask() (#439) 2021-01-20 13:29:40 -08:00
kleonc 63838964b3
Renamed enums to follow recommended naming convention (#437) 2021-01-20 06:59:42 -08:00
kleonc 9c520a65e9
Refactored isometric grid (#430)
* Move get_tile_mode_rect() method to the Project class

* Refactored isometric grid

Now it should be drawn properly in the target rect.
Settings (in pixels):
- cell's AABB size,
- offset from the canvas origin.
2021-01-18 12:59:26 -08:00
Laurenz Reinthaler 2a7e668976
Add Pan Tool (#399) 2020-12-23 10:41:42 -08:00
Manolis Papadeas 37ee4856ff Fixed an issue with brushes 2020-11-25 01:21:28 +02:00
AbhinavKDev 96454a2d57
Handiling tile modes in each project (#388)
* Handiling tile modes in each project

Co-authored-by: Manolis Papadeas <35376950+OverloadedOrama@users.noreply.github.com>
2020-11-24 08:53:18 -08:00
Manolis Papadeas d7008362b5 Added a "Mirror View" option in the View menu
Which is used to flip the canvas horizontally and non-destructively. Closes #227
2020-11-23 18:53:21 +02:00
Manolis Papadeas 22f4796251 Fix LightenDarken's Hue Shifting colors
- All colors move towards yellow when lighting, and purple when darkening. The logic has become more complex, so it doesn't just increase (or decrease) the hue when lighting (or darkening). This solves issues with green and blue.

- Added limits to the hue when lighting and darkening, limits to the value when darkening, and to the saturation when lighting.

This behavior should eventually be documented to explain how it works to the users.
2020-11-17 04:18:36 +02:00
Darshan Phaldesai 397ef566db
Added Fix for new Tile modes (#384) 2020-11-16 10:57:35 -08:00
Manolis Papadeas fad41bd27b Fix Hue Shifting not working on exported builds 2020-11-07 23:03:37 +02:00
Manolis Papadeas 922c48f50e Fix LightenDarken issue where it did not remember some options when switching tools 2020-11-03 00:43:48 +02:00
Manolis Papadeas ebb6d74d9f Using the lighten/darken on pixels with an alpha value of 0 no longer has an effect on them. 2020-11-02 20:07:31 +02:00
Manolis Papadeas b1b4497ae8 The lighten/darken tool now has a hue shifting mode - Closes #189 2020-11-01 16:00:18 +02:00
Manolis Papadeas 96fc2aa12d Fixed issues where fully transparent color could not be picked
More specifically, the color picked sometimes failed to pick transparent color (and picked black instead), swapping between colors when one of them is fully transparent made it fully opaque, and also when picking a color from a palette which was fully transparent made it fully opaque.

Closes #364
2020-10-23 20:18:39 +03:00
Erevos 41a9107c45
Theme edits (#342)
* Theme edits

Changed all the themes to be more consistent, buttons and panel containers have rounded edges. Note that the spacings have been switched too, so it needs subtle remakes in the placing of each element. Especially the tool buttons. Also check the themes on preferences (need better spacing) and rulers are not included.

* Some UI fixes

* Reduced size of themes

* Fixed more spacing issues and replaced timeline grabber icon

* Removed old theme icons

* Change purple and light rulers

* Fix purple top menu & caramel rulers

Co-authored-by: Erevoid <Erevoid@users.noreply.github.com>
Co-authored-by: OverloadedOrama <35376950+OverloadedOrama@users.noreply.github.com>
2020-09-29 18:00:43 +03:00
OverloadedOrama 10b082434b Removed brush_button.png - May solve #339 2020-09-27 20:35:46 +03:00
OverloadedOrama 687819413d Fixed regression where it was possible to draw on locked layers 2020-08-28 01:42:18 +03:00
OverloadedOrama 850c5606de Added missing translations
And added hint tooltips to "Pixel Perfect" and "Overwrite Color" buttons
2020-08-27 14:30:26 +03:00
OverloadedOrama fe757b3393 Change the max value of the brush size slider to 25
The spinbox can still go up to 100px size.
2020-08-23 18:14:30 +03:00
OverloadedOrama 1ff32f2892 Fixed some leak issues with gdgifexporter
Made scrips extend Reference instead of Node
2020-08-19 01:01:00 +03:00
OverloadedOrama f2136236b1 Moved canvas indicator drawing to a new script
Cursor indicators now appear on top of the grid again
2020-08-18 16:35:05 +03:00
Kinwailo 39808082b6
add follow canvas movement and scale option to transparent checker (#311) 2020-08-17 22:30:58 +03:00
Michael Alexsander f715b566b1
Fix out-of-bounds error when color picking outside the image (#291) 2020-08-06 12:13:45 +03:00
OverloadedOrama 81f9cb4769 Improved performance for bucket filling after the selected_pixels change
0f82be765e should no longer have any performance issues left now.
2020-07-20 22:45:22 +03:00
OverloadedOrama 6c2b7f7067 Improved performance for drawing after the selected_pixels change
It should be as fast as before, if there's not a big selection.
2020-07-20 22:29:58 +03:00
OverloadedOrama 0f82be765e Replaced the _min and _max Project variables with Project.selected_pixels
This will allow us to create more selection tools in the future, that aren't necessarily rectangular (See #129) and even enhance the current rectangle selection tool (See #56)

Current issues spotted so far:
Drawing is slower for large images, and bucket filling is also considerably slower even on a 64x64 image. Optimizations are required.
2020-07-20 22:15:34 +03:00
OverloadedOrama a5a8bf1fe5 Turn Symmetry Guides visibility on and off if mirroring is enabled
Also fixed issue with "Show Guides" view menu option and having multiple projects with guides. Only think remaining is to make the Symmetry Guides look different than regular guides. Closes #133.
2020-07-16 05:05:40 +03:00
OverloadedOrama 9fa91ffd8e Added SymmetryGuides
Two special guides - one horizontal and one vertical - that let you change the axis of symmetry for mirroring. On the next commit(s) I will make them visible only if mirroring is toggled on. Almost solves #133
2020-07-16 04:25:59 +03:00
OverloadedOrama 7529e967e3 Selection no longer affects the mirroring point of symmetry
Instead, x_symmetry_point and y_symmetry_point are being used in Project.gd that determine the points of symmetry. This is necessary for #133
2020-07-15 21:23:15 +03:00
Kinwailo fd3afbfebc
Add overwrite option to pencil. (#282) 2020-07-13 15:10:17 +03:00
OverloadedOrama 671536cbd7 Fixed bucket crash when there were no patterns 2020-07-09 15:52:59 +03:00
Kinwailo 4a668f71f5
Refactoring tools (#281)
* Refactoring tools

* Remove unused code

* Fixed some inferring errors and added translations

* Attempt to fix some Script Errors found in the CI workflow

* Fix bucket crash.

* Fix static type convert.

Co-authored-by: OverloadedOrama <35376950+OverloadedOrama@users.noreply.github.com>
2020-07-09 15:22:17 +03:00