Commit graph

1132 commits

Author SHA1 Message Date
dolphin6k
c0da1f0e94 Removed "#ifdef WIN32" block around label embedding.
It has likely become unneccessary by recent fix for the common part.

Also backported a fix for uppercase issue from sdl2.0 branch (Define Windows native
function for mbstowcs/wcstombs).
2022-02-11 08:33:29 +09:00
Bill Kendrick
4ec43dcff2 Address fscanf eating space at beginning of Labels
When reading label text (on non-Windows, at least), fscanf("%lc")
was being used.  It seemed to be skipping the initial space,
causing strings to be shifted left one, and end up with garbage
bytes at the far right.

Fixes https://sourceforge.net/p/tuxpaint/bugs/247/ I hope!
2022-02-10 02:28:50 -08:00
Bill Kendrick
5d064297d4 WIP: More work on Apply Label functionality
"Apply Label" mode of Label tool can be activated/deactivated,
though it doesn't currently do the work yet.

Also

* Modularized routine to select a Label (via click or [Enter] key):
   `select_label_node()`

 * Starting routine for applying a Label to the canvas
   (via click or [Enter] key): `apply_label_node()`

 * Modularized routine for repositioning the on-screen keyboard based on
   where we're typing: `reposition_onscreen_keyboard()`

Seems likely that I broke some things.
2022-02-10 01:01:40 -08:00
Bill Kendrick
e0922a14e1 WIP Apply label: Show apply label button 2022-02-09 23:25:46 -08:00
Bill Kendrick
d682044ce0 Commentary for text input handling routines
Also, sound effect when deleting a Label (select existing label (node),
[Backspace] to delete every character, then [Enter] or [Tab] to commit).
2022-02-09 22:58:54 -08:00
Bill Kendrick
f787cb0f75 WIP Label "apply" option
Starting work towards
https://sourceforge.net/p/tuxpaint/feature-requests/213/

The ability to 'apply' a label to the canvas, making it permanent
(as if added using the "Text" tool instead).

Removed unused "label rotate" option's code (and hence addressed
a bug we didn't relalize when choosing the "Label" tool while in
in "--nostampcontrols" mode; the unused "rotate" button would appear).
2022-02-09 22:41:13 -08:00
dolphin6k
d0699bdbc9 Redirect stdout and stderror to User's save directory. 2022-02-10 12:24:46 +09:00
Bill Kendrick
9f9a25f98a Brush tips - show when anim/rotate/dir, and spacing
Show tips when choosing brushes, to remind the user when they
are animated, and or rotational/directional.

Show tips when brush spacing is changed, specifying the approximate
spacing.  Output is fuzzy, to avoid being overly technical (e.g., it
will never say "2 345/1000 times as big as" or "1/103 the size of")
2022-02-09 02:12:40 -08:00
Bill Kendrick
7313f269ac Show tips & play sound effects w/ Label selector
Closes https://sourceforge.net/p/tuxpaint/bugs/245/
2022-02-07 23:57:36 -08:00
Bill Kendrick
e7d81ef63f Clean up some compile-time warnings/errors
Under Xcode with clang, Mark Kim was getting an error:

  src/tuxpaint.c:23125:44: error: use of undeclared identifier 'i'
                   SDL_MapRGB(img_color_btns[i]->format,
                                             ^

Oddly, I was not getting errors no matter what nonsense I put
in there (e.g., changing "->format" to "->formatXYZ"), under
"gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)"
2022-02-05 16:59:59 -08:00
Mark Kim
7aa000b68a Tux Paint for macOS can localize menus (feature request #183)
Tux Paint for macOS can now localize the macOS menubar.  Translation
files (*.po) will be required for the actual translations to show.
2022-02-05 18:40:36 -05:00
Bill Kendrick
ab01926c27 Oops, left some debug printf() in there 2022-02-03 23:03:02 -08:00
Bill Kendrick
5203c16d34 Forgot to gettext() color mixer tip text fmt str
Forgot to wrap the color mixer's tip text printf() format string
in gettext(), which caused the static part of the text
("Your color is...") to not be translated.  h/t to Shin-ichi for
pointing it out.
2022-02-03 22:42:19 -08:00
Bill Kendrick
964416f476 Color mixer: Showing simplified fractions, too
Say a color is a mix of 5 red, 4 blue, and 1 black.
It will show "5/10 (1/2) red, 4/10 (2/5) blue, 1/10 black."

Also, when adding multiple contributions of only one color (so far),
it will say, e.g., "entirely (3/3) red".
2022-01-28 02:16:33 -08:00
Bill Kendrick
c50fddd604 Color mixer: Undo/Redo seems to be working! 2022-01-28 01:32:29 -08:00
Bill Kendrick
4ae07338bf Color mixer: Break color average calculation out
Needs to be a function that we can also call on Undo & Redo
actions.
2022-01-28 01:00:36 -08:00
Bill Kendrick
3e28289db2 Color mixer: WIP: Undo/Redo feature 2022-01-28 00:55:23 -08:00
Bill Kendrick
336c7cc342 Color mixer: Some better Red/Yellow/Blue primaries
Using HSV values of some subtractive CMYK colors.
2022-01-28 00:24:27 -08:00
Bill Kendrick
a8beb74abe Color mixer: Mixing colors properly
Rather than having a "current color" and averaging it with
the newly-added color, averaging the entire set of colors each time.

Before, if you added R + Y + B, you'd get a different color
than R + B + Y, or Y + B + R, etc.

Now, it starts fresh every time and averages the hues (when applicable),
saturations, and values of each color that's been added to the mix.

R + Y + B (combined in any order) currently always comes out a brownish
orange, as expected.
2022-01-27 23:56:56 -08:00
Bill Kendrick
42ca74df86 Update POT/PO to add new Color Mixer UI elements 2022-01-27 22:54:50 -08:00
Bill Kendrick
4d93bd3177 Color mixer: Display color proportions as you mix
Show the color proportions (e.g., "entirely red", or "1/2 yellow and 1/2 green",
or "1/5 red, 2/5 blue, and 2/5 black") in the Tux tips area.  Show the full
instructions again when the color is reset with the clear button.

(Also, label clear (trash) button with the word "Clear".)
2022-01-27 22:37:13 -08:00
Bill Kendrick
150e524867 Color mixer: Undo/Redo appear properly; color tweaks
Adjust HSV values for Red/Yellow/Blue. When drawing color,
drop V value very slightly (so white appears off-white).

Undo & Redo now have black icons/text if available, else grey.
2022-01-27 21:25:04 -08:00
Bill Kendrick
268d063f71 Color Mixer: Show Undo/Redo & handle cursor shape
Undo/Redo don't do anything yet. Other buttons now cause mouse
to change to 'hand' (vs 'arrow') shape when hovering over them.
2022-01-27 21:07:19 -08:00
Bill Kendrick
793ee8fd50 Color mixer working okay now!
I'd like to add undo/redo, and the trash button needs a label,
but it's usable!
2022-01-27 02:39:46 -08:00
Bill Kendrick
92499d9a70 WIP More work on color mixer
Tweaks to icon. Further modularized how color button rendering works,
so it can handle selector (pipette) and mixer overlay icons.
Mixer function is basically identical to color picker (rainbow palette)
as a placeholder. WORK IN PROGRESS.
2022-01-27 00:08:56 -08:00
Bill Kendrick
db7a8c0124 WIP Starting to make a color mixer tool
Also, modularize color picker's & color selector's method of
generating a fresh version of their active/inactive buttons,
after a color has been chosen by their tool.
2022-01-26 22:43:06 -08:00
Bill Kendrick
83d316a166 Ctrl+click to pick colors immediately
A keyboard shortcut is now available for picking colors from
the canvas more quickly.  Hold either (left or right) [Ctrl] key
while clicking, and the color selector option will appear.
Release the mouse button over a color on the canvas to choose it
(or outside the canvas to abort).
Closes https://sourceforge.net/p/tuxpaint/feature-requests/209/

Also,
 * Don't play 'bubble' paint sound when color picker or selector
   are aborted (e.g., via their "Back" buttons).
 * Replace many instances of "NUM_COLOR - 1" and "NUM_COLOR - 2"
   (which correspond to color chose via picker (palette) and
   selector (canvas), respectively) with #define's that
   represent them. (Avoid magic numbers.)
2022-01-26 01:07:11 -08:00
Bill Kendrick
269f0cfe3a Rigging up do_color_sel() to offer immediate mode
The pick-a-color-from-the-canvas color selection feature
(the option in the color palette showing a pipette icon)
has been extended to support an immediate mode (return on
"mouse-up" event, don't show a "Back" button, and don't animate
the appearance of the color dialog at the bottom),
which will be used by a forthcoming feature that will offer
a keyboard shortcut to bring up this color selection option.
2022-01-26 00:20:14 -08:00
Bill Kendrick
e0d7e0728b Show "pipette"-shaped pointer when selecting colors 2022-01-25 23:57:31 -08:00
Bill Kendrick
6735340566 Stamp performance improvements
+ Stamps are scaled before they are colorized or tinted,
   to increase performance.
 + The current stamp (in its current form: size, orientation,
   and color) is cached, so it may be applied to the canvas
   many times without having to re-render.
   (No longer scaling and tinting every time you click.)

Closes https://sourceforge.net/p/tuxpaint/bugs/147/
(h/t Andre Anckaert)
2022-01-25 22:21:55 -08:00
Bill Kendrick
3518433808 Better onscreen keyboard button sizing
No longer restricted to "the same as other UI buttons"
(e.g., 48x48 default) or "1/4th that size" (e.g., 24x24).
Will scale, allowing for larger buttons when appropriate.
h/t Anat Caspi for pointing out the continuing issue.

Closes https://sourceforge.net/p/tuxpaint/feature-requests/212/
2022-01-25 00:52:14 -08:00
Bill Kendrick
16e7cb1f59 Showing aspect ratio of shapes when stretching them
...in the Tux tips area
2022-01-21 01:33:23 -08:00
Bill Kendrick
71c2404838 Added heptagon (7-sided) shape
Also, using floats more, allowing for proper heptagon support, as
well as a non-skewed starting angle for octagons (22.5 degrees).
2022-01-21 00:34:10 -08:00
Bill Kendrick
e8446d2902 Brush spacing controls work 2022-01-20 00:09:03 -08:00
Bill Kendrick
ccfe3bc074 FIXME about hand cursor over selector controls 2022-01-19 02:12:59 -08:00
Bill Kendrick
29eec0dcb7 Brush spacing ctrl proper position when no scrollbar
(e.g., when running in ~860px tall window with 32px buttonsize)
2022-01-19 02:04:47 -08:00
Bill Kendrick
145c35a95d Get brush selector down-scroll to grok brush spacing 2022-01-19 01:46:44 -08:00
Bill Kendrick
0b18aac985 Decided how brush spacing choice relates to spacing
Max option in the spacing widget will correspond to 2x the maximum
dimension of the brush.
2022-01-19 01:30:08 -08:00
Bill Kendrick
ce9e264713 Initial work to render brush spacing widget
Doesn't do anything yet, and click-detecting code is unaware of it
(so scrollbar click happens in the old location).  WIP! :-)
2022-01-19 00:38:03 -08:00
Bill Kendrick
176749ba9c Grok "[no]brushspacing" commandline/config option
For forthcoming feature
2022-01-19 00:29:05 -08:00
Bill Kendrick
e1a721fb9d Outline for circle-shaped erasers is now also circular
Closes https://sourceforge.net/p/tuxpaint/bugs/244/
2022-01-18 23:28:53 -08:00
Bill Kendrick
af8fd5b8a1 Attempts to improve rotated brushes
* Rotating brush angle is now a double, not an int
 * Don't draw once on click; require some motion
   (does not affect directional brushes, which include
   a "no movement" shape in the middle of the brush bitmap)
2021-11-16 00:13:44 -08:00
Bill Kendrick
6a52e33d35 Improve canvas update w/ rotating brushes 2021-11-15 23:57:12 -08:00
Bill Kendrick
70795bffcd Translate new angle-showing tips (Lines, Shapes)
h/t Pere for noticing they weren't appearing
2021-11-08 13:18:38 -08:00
dolphin6k
46dd77fdb5 Reverted to mtw(). (MultiByteToWideChar() was not safe for the labels on other versions of Windows.) 2021-11-06 01:00:18 +09:00
dolphin6k
1efedfa191 Windows Recycle Bin support seems to be stable. / Replaced mtw() with MultiByteToWideChar(). 2021-11-06 00:29:10 +09:00
dolphin6k
5c669730a9 Re-defined iswprint() using GetStringTypeW on windows. 2021-11-05 16:55:23 +09:00
Bill Kendrick
0a529cea96 Avoid crashing on config file lines lacking =
Instead, emit a warning to stdout (though really we may want to
exit cleanly, like parse.gperf does when coming across an
unrecognized option).
2021-11-04 21:30:07 -07:00
dolphin6k
7c8f6bca80 Addressed warnings when compiling on MinGW/MSYS
Following warnings still remain so far.

src/tuxpaint.c:199:2: warning: #warning "Attempting to define strcasestr(); if errors, build with -DHAVE_STRCASESTR" [-Wcpp]
  199 | #warning "Attempting to define strcasestr(); if errors, build with -DHAVE_STRCASESTR"
      |  ^~~~~~~

src/parse.gperf: In function 'parse_one_option':
src/parse.gperf:306:45: warning: argument to 'sizeof' in 'memcpy' call is the same pointer type 'char *' as the destination; expected 'char' or an explicit length [-Wsizeof-pointer-memaccess]
  306 |   memcpy(offset+(char*)tmpcfg, &opt, sizeof(char*)); /* FIXME: This causes a warning; should it be 'sizeof(char)', or do we need to have the warning suppressed? -bjk 2021.10.14 */
      |                                             ^~~~

src/dirwalk.c: In function 'tp_ftw':
src/dirwalk.c:348:2: warning: #warning Failed to see DT_UNKNOWN [-Wcpp]
  348 | #warning Failed to see DT_UNKNOWN
      |  ^~~~~~~

src/get_fname.c: In function 'get_fname':
src/get_fname.c💯3: warning: 'dir' may be used uninitialized in this function [-Wmaybe-uninitialized]
  100 |   snprintf(f, sizeof(f),
      |   ^~~~~~~~~~~~~~~~~~~~~~
  101 |            "%s%c%s",
      |            ~~~~~~~~~
  102 |     dir, (*name) ? '/' : '\0', /* Some mkdir()'s don't like trailing slashes */
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  103 |     name);
      |     ~~~~~

magic/src/cartoon.c:178:99: warning: unused parameter 'last' [-Wunused-parameter]
  178 | static void do_cartoon(void *ptr, int which ATTRIBUTE_UNUSED, SDL_Surface * canvas, SDL_Surface * last, int x, int y)
      |                                                                                     ~~~~~~~~~~~~~~^~~~
2021-11-05 12:23:09 +09:00
Bill Kendrick
19db5e1b4a Avoid compile-time warnings re: wchar_t comparison
When assembling UTF-8 in render_text_w() (to send to SDL_Pango),
we assumed `wchar_t` could encompass the entirety of Unicode
(up to U+10FFFF); however, on Windows `wchar_t` is only 16-bits,
meaning the test for characters <= U+FFFF was always true.

This reworks the if/elseif/else block, via some "#ifndef WIN32"
tests, to avoid this warning.

In the end, we need to replace our internal use of `wchar_t`
with something 32-bit, to allow for higher Unicode code points
(e.g., to support Emoji via the Text and Label tools).

Additonally, some work will need to be done to ensure that
text stored as Labels within saved Tux Paint images (PNGs) continued
to work correctly, and could be traded between platforms.
(Untested, but right now I assume a picture drawn on Linux where
`wchar_t` is 32-bit would break if you attempt to load it on Windows,
and possibly vice-versa?)

See https://sourceforge.net/p/tuxpaint/feature-requests/210/
2021-11-03 22:16:24 -07:00