Commit graph

38 commits

Author SHA1 Message Date
Bill Kendrick
18f9cad6fe Adding "indent.sh" to re-indent code; ran it!!! 2023-04-23 23:26:00 -07:00
Bill Kendrick
102207b9bc Wrapped up Shaped fill mode (for now) 2023-02-26 00:34:01 -08:00
Bill Kendrick
ecab00d4a9 Reworked Signed Distance Field for shaped fill
Based on http://www.codersnotes.com/notes/signed-distance-fields/
by Richard Mitton
2023-02-25 15:57:18 -08:00
Bill Kendrick
3fc76953d6 [WIP] Shaped fill tool
Similar to radial gradient, but follows the shape of the object).
(Based on https://github.com/mattdesl/image-sdf
by Matt DesLauriers (https://www.mattdesl.com/), MIT License)
2023-02-24 02:18:42 -08:00
Bill Kendrick
c13c6e1dcb Fill: Paint & Radial; bounds check for touched[]
Avoid reading outside of the bounds of the `touched[]` array,
to help prevent crashes.

h/t Miyagi Andel for reporting,
Shin-ichi TOYAMA for pinpointing the issue,
and Pere Pujal i Carabantes for providing a solution

Closes https://sourceforge.net/p/tuxpaint/bugs/269
2022-12-23 00:08:52 -08:00
Bill Kendrick
0517b4392c Update URL to https://tuxpaint.org/ everywhere
Also, add other social media accounts to list of places to
announce Tux Paint in RELEASE docs.

Also, list a ton more options missing from default example config file
"src/tuxpaint.conf"
2022-12-11 01:29:25 -08:00
Bill Kendrick
cc05925d9e Re-ran indent on all .c & .h source code files
Like so --
  find . -name "*.c" -or -name "*.h" -exec  indent -nbfda -npcs -npsl -bli0 --no-tabs {} \;

The `indent` invocation differs from the last one noted in
CHANGES.txt (from 2006!?), in that I've added "--no-tabs",
to ensure indents are all space-based.
2022-09-15 00:14:20 -07:00
Pere Pujal i Carabantes
6007479b0e Merge 'Limit check to avoid crash in flood Fill' form 'master' into sdl2.0 2021-11-21 11:36:48 +01:00
Bill Kendrick
81fff34795 Limit check to avoid crash in flood Fill
Reported by Shin-ichi, repaired by Pere.  Thanks!
2021-11-20 20:57:55 -08:00
Pere Pujal i Carabantes
2609446af1 Merge branch 'master' into sdl2.0
More work on Filling by Bill.
2021-11-20 12:00:25 +01:00
Pere Pujal i Carabantes
705c557f51 Merge branch 'master' into sdl2.0
Work on Fill tool by Bill.
2021-11-20 11:45:07 +01:00
Bill Kendrick
e77c7766cd Fill queue is now actually a stack
Size of queue structure (which contains 3 ints, so is 12 bytes on
my Linux laptop) before & after, when filling a few sample images
when running in a 3000x2000 window:

 * a pattern i drew
   queue:   855,040
   stack:   287,744

 * mosaic
   queue:   908,288
   stack:   398,336

 * mosaic 4x via panel magic tool
   queue: 1,451,008
   stack:   734,208
2021-11-20 01:52:43 -08:00
Bill Kendrick
0431cce21f Fill debug updates
Show final queue structure size at the end.
Watching the fill blit happen is now a separate #define'd option.
2021-11-20 01:47:13 -08:00
Bill Kendrick
5cfc185d77 Globalized a ton of stuff, able to queue-ify flood fill
The queue grows ever large, and should shrink itself once
as the queue gets consumed.  In the meantime, it seems to help.

At 3000x2000, with starters/mosaic.svg cut into four via Panels
magic tool, I get a VERY complicated drawing, which no longer
causes a crash.

(It crashed for me, even after some other improvements -- globalizing
many of the unchanging args to the recursive function, calling the
progress bar animation and sound effects calls less frequently --
helped prevent crashing for me with that starter image as-is.)
2021-11-20 01:17:17 -08:00
Bill Kendrick
e06ead84c5 WIP More work on queue-based flood Fill 2021-11-20 00:14:18 -08:00
Pere Pujal i Carabantes
ebb784199e Merge branch 'master' into sdl2.0 2021-11-19 22:24:12 +01:00
Bill Kendrick
07165fc3ae WIP More work towards span filling
Antialiased edge stuff will be hard to port over :(
2021-11-17 00:55:30 -08:00
Bill Kendrick
2f912bd5d7 WIP Prepare to retrofit fill routine w/ span fill
Add a queue and queue helper functions (disabled via #ifdef
at the moment).
2021-11-17 00:30:35 -08:00
Bill Kendrick
fcf1f66a03 Revert Fill stack explosion prevention
Not the way to do it.
2021-11-16 23:49:52 -08:00
Pere Pujal i Carabantes
6b167caa74 Merge branch 'master' into sdl2.0 2021-11-16 20:16:33 +01:00
Bill Kendrick
1ff75a5c0c Stop recursive flood fill at depth of 20K
Attempt to void crashing (by blowing up the stack) when doing
a flood-fill of a complicated shape on a large canvas
(e.g., `tuxpaint --3000x2000` with `starters/mosaic.svg`).
2021-11-15 20:40:26 -08:00
Pere Pujal i Carabantes
9cf77f684c Merge branch 'master' into sdl2.0
There are problems with im that should be investigated...
2021-10-24 11:47:54 +02:00
Bill Kendrick
94943d9fdd Mend a NEW warning in src/fill.c 2021-10-24 01:04:47 -07:00
Bill Kendrick
7def2a84a0 Address compiler warnings in src/fill.c 2021-10-24 01:03:37 -07:00
Bill Kendrick
dcdebe9882 New Fill tool mode: Brush
Similar to solid fill (classic mode), but allows freehand
filling of an area.

Closes https://sourceforge.net/p/tuxpaint/feature-requests/207/
2021-10-19 00:26:26 -07:00
Pere Pujal i Carabantes
4d27837af0 Fill crash solved and some translations Merge branch 'master' into sdl2.0 2021-05-09 18:02:11 +02:00
Bill Kendrick
2ce07ac9de Fill: Avoid infinite recursion crash
simulate_flood_fill_outside_check() could spin in an
infinite loop because it could sometimes set values in the
`touched[]` array to 0, which means the spot was never seen.

Values going in there are not boolean, but a 0-255 gradient,
for smoother fills on antialiased edges.

This change forces it to be a 1-255 value, ensuring that
a 'touched' spot on the canvas will have a non-zero `touched[]`
value.

h/t Pere for noticing the bug, providing some details,
and best of all providing a sample image to play with which
consistently invoked the crash.  (It made mending this a
10 minute task for me, rather than an hours-long hunt to reproduce!
Big 'thanks' for doing that ahead of time!!!)
2021-05-06 00:05:58 -07:00
Pere Pujal i Carabantes
f54bde3df2 Adapt Fill to SDL2 2021-03-12 00:14:36 +01:00
Bill Kendrick
b7e2aeca34 Remove printf() debugging left in fill.c 2021-03-08 01:39:47 -08:00
Bill Kendrick
f7e9fa2870 Fill antialiasing edges; Not perfect, but improved
Probably can still improve the ratio of
{old pixel's difference to initial color to be replaced}
to {new color being flood-filled}...
2021-03-08 01:36:07 -08:00
Bill Kendrick
866d5190bf Continuing to improve fill anti-aliasing 2021-03-08 01:18:00 -08:00
Bill Kendrick
3b5a0a1586 WIP: Fill tool improvement related to antialiasing
Fill tools do a better job at filling around
antialiased edges, and apply some blending.
(Blending does not yet occur with gradient tools.)
2021-03-07 01:00:53 -08:00
Bill Kendrick
f40dc07f37 Radial gradient fill improvement
Attempting to improve fading out to edges (so the
actual effect is more obvious).
2021-03-05 18:08:19 -08:00
Bill Kendrick
76cb1c5446 Linear gradient fill mode 2021-02-20 21:35:46 -08:00
Bill Kendrick
058191bd04 Radial gradient fill tool added
Note: Need to add to docs.
2021-02-20 18:08:06 -08:00
Bill Kendrick
aade790b1c Remove unused x/y args to would_flood_fill()
Copy-pasta'd them
2019-09-14 12:10:26 -07:00
Bill Kendrick
a54dd570b4 Make sure Fill uses undo (but also intelligently)
"Fill", as a new main-toolbar tool, was not recording snapshots
of the image for the "Undo" tool.  Mended.

However, also updated the tool so that it doesn't _bother_ recording
into the undo buffer if the fill action is a no-op (e.g., clicking
the same spot a second time, or otherwise attempting to fill an
area with a color that's identical to what's already on the canvas).
2019-09-14 11:16:46 -07:00
Bill Kendrick
2911b35a50 Elevate "Fill" from Magic Tool to real Tool
Replace the somewhat-recently-added "nothing" item in the tool bar
with the "Fill" tool, which has been converted back from a Magic tool
to a regular tool.

Also, change bash "==" to sh "=" in "if [ ... ]" tests in Makefile.

Also, link to math library (via "-lm") to make sure "max()" is available to
magic tools.

Also, add missing mention of "--newcolorslast" and "--newcolorsfirst" to manpage.
2019-09-12 23:04:13 -07:00