Polyfill - Address compiler warnings, other cleanup

This commit is contained in:
Bill Kendrick 2024-05-14 23:09:18 -07:00
parent 73f66294f4
commit d26b4f28ff
2 changed files with 91 additions and 34 deletions

View file

@ -6,7 +6,7 @@ Copyright (c) 2002-2024
Various contributors (see below, and AUTHORS.txt) Various contributors (see below, and AUTHORS.txt)
https://tuxpaint.org/ https://tuxpaint.org/
2024.May.10 (0.9.33) 2024.May.14 (0.9.33)
* New Magic Tools: * New Magic Tools:
---------------- ----------------
* WIP Specular Reflection: Draws a slightly blurred, wavy, and * WIP Specular Reflection: Draws a slightly blurred, wavy, and

View file

@ -7,7 +7,7 @@
Scanline polygon fill routine based on public-domain code Scanline polygon fill routine based on public-domain code
by Darel Rex Finley, 2007 <https://alienryderflex.com/polygon_fill/> by Darel Rex Finley, 2007 <https://alienryderflex.com/polygon_fill/>
Last updated: April 12, 2024 Last updated: May 14, 2024
*/ */
@ -59,13 +59,43 @@ Mix_Chunk *snd_effects[NUM_TOOLS];
Uint32 polyfill_color, polyfill_color_red, polyfill_color_green; Uint32 polyfill_color, polyfill_color_red, polyfill_color_green;
void polyfill_drag(magic_api * api, int which, SDL_Surface * canvas, Uint32 polyfill_api_version(void);
SDL_Surface * snapshot, int old_x, int old_y, int x, int y, SDL_Rect * update_rect); int polyfill_init(magic_api * api, Uint8 disabled_features, Uint8 complexity_level);
int polyfill_get_tool_count(magic_api * api);
SDL_Surface *polyfill_get_icon(magic_api * api, int which);
char *polyfill_get_name(magic_api * api, int which);
int polyfill_get_group(magic_api * api, int which);
int polyfill_get_order(int which);
char *polyfill_get_description(magic_api * api, int which, int mode);
int polyfill_requires_colors(magic_api * api, int which);
int polyfill_modes(magic_api * api, int which);
Uint8 polyfill_accepted_sizes(magic_api * api, int which, int mode);
Uint8 polyfill_default_size(magic_api * api, int which, int mode);
void polyfill_shutdown(magic_api * api);
void
polyfill_click(magic_api * api, int which, int mode,
SDL_Surface * canvas, SDL_Surface * snapshot, int x, int y, SDL_Rect * update_rect);
void
polyfill_drag(magic_api * api, int which,
SDL_Surface * canvas, SDL_Surface * snapshot, int old_x, int old_y, int x, int y, SDL_Rect * update_rect);
void
polyfill_release(magic_api * api, int which,
SDL_Surface * canvas, SDL_Surface * snapshot, int x, int y, SDL_Rect * update_rect);
void polyfill_set_color(magic_api * api, int which, SDL_Surface * canvas, SDL_Surface * snapshot, Uint8 r, Uint8 g,
Uint8 b, SDL_Rect * update_rect);
void polyfill_set_size(magic_api * api, int which, int mode, SDL_Surface * canvas, SDL_Surface * snapshot, Uint8 size,
SDL_Rect * update_rect);
void polyfill_line_callback(void *pointer, int which, SDL_Surface * canvas, SDL_Surface * snapshot, int x, int y); void polyfill_line_callback(void *pointer, int which, SDL_Surface * canvas, SDL_Surface * snapshot, int x, int y);
void
polyfill_release(magic_api * api, int which,
SDL_Surface * canvas, SDL_Surface * snapshot, int x, int y, SDL_Rect * update_rect);
void polyfill_switchin(magic_api * api, int which, int mode, SDL_Surface * canvas);
void polyfill_switchout(magic_api * api, int which, int mode, SDL_Surface * canvas);
void polyfill_draw_preview(magic_api * api, SDL_Surface * canvas, int show_handles); void polyfill_draw_preview(magic_api * api, SDL_Surface * canvas, int show_handles);
void polyfill_draw_final(magic_api * api, SDL_Surface * canvas); void polyfill_draw_final(SDL_Surface * canvas);
Uint32 polyfill_api_version(void) Uint32 polyfill_api_version(void)
@ -73,7 +103,7 @@ Uint32 polyfill_api_version(void)
return (TP_MAGIC_API_VERSION); return (TP_MAGIC_API_VERSION);
} }
int polyfill_init(magic_api * api, Uint8 disabled_features, Uint8 complexity_level) int polyfill_init(magic_api * api, Uint8 disabled_features ATTRIBUTE_UNUSED, Uint8 complexity_level ATTRIBUTE_UNUSED)
{ {
int i; int i;
char filename[1024]; char filename[1024];
@ -88,12 +118,12 @@ int polyfill_init(magic_api * api, Uint8 disabled_features, Uint8 complexity_lev
} }
int polyfill_get_tool_count(magic_api * api) int polyfill_get_tool_count(magic_api * api ATTRIBUTE_UNUSED)
{ {
return NUM_TOOLS; return NUM_TOOLS;
} }
SDL_Surface *polyfill_get_icon(magic_api * api, int which) SDL_Surface *polyfill_get_icon(magic_api * api, int which ATTRIBUTE_UNUSED)
{ {
char filename[1024]; char filename[1024];
@ -103,13 +133,13 @@ SDL_Surface *polyfill_get_icon(magic_api * api, int which)
} }
char *polyfill_get_name(magic_api * api, int which) char *polyfill_get_name(magic_api * api ATTRIBUTE_UNUSED, int which)
{ {
return strdup(gettext(polyfill_names[which])); return strdup(gettext(polyfill_names[which]));
} }
int polyfill_get_group(magic_api * api, int which) int polyfill_get_group(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED)
{ {
return MAGIC_TYPE_ARTISTIC; return MAGIC_TYPE_ARTISTIC;
} }
@ -121,37 +151,37 @@ int polyfill_get_order(int which)
} }
char *polyfill_get_description(magic_api * api, int which, int mode) char *polyfill_get_description(magic_api * api ATTRIBUTE_UNUSED, int which, int mode ATTRIBUTE_UNUSED)
{ {
return strdup(gettext(polyfill_descr[which])); return strdup(gettext(polyfill_descr[which]));
} }
int polyfill_requires_colors(magic_api * api, int which) int polyfill_requires_colors(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED)
{ {
return 1; return 1;
} }
int polyfill_modes(magic_api * api, int which) int polyfill_modes(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED)
{ {
return MODE_PAINT; return MODE_PAINT;
} }
Uint8 polyfill_accepted_sizes(magic_api * api, int which, int mode) Uint8 polyfill_accepted_sizes(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED)
{ {
return 1; return 1;
} }
Uint8 polyfill_default_size(magic_api * api, int which, int mode) Uint8 polyfill_default_size(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED)
{ {
return 1; return 1;
} }
void polyfill_shutdown(magic_api * api) void polyfill_shutdown(magic_api * api ATTRIBUTE_UNUSED)
{ {
int i; int i;
@ -171,14 +201,16 @@ void polyfill_shutdown(magic_api * api)
} }
void void
polyfill_click(magic_api * api, int which, int mode, polyfill_click(magic_api * api, int which ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED,
SDL_Surface * canvas, SDL_Surface * snapshot, int x, int y, SDL_Rect * update_rect) SDL_Surface * canvas, SDL_Surface * snapshot, int x, int y, SDL_Rect * update_rect)
{ {
int i; int i;
polyfill_dragged = 0; polyfill_dragged = 0;
#ifdef DEBUG
printf("Click. num_pts = %d\n", polyfill_num_pts); printf("Click. num_pts = %d\n", polyfill_num_pts);
#endif
/* See if we're clicking a pre-existing point, to edit it? */ /* See if we're clicking a pre-existing point, to edit it? */
polyfill_editing = MAX_PTS; polyfill_editing = MAX_PTS;
@ -192,7 +224,10 @@ polyfill_click(magic_api * api, int which, int mode,
if (polyfill_editing != MAX_PTS) if (polyfill_editing != MAX_PTS)
{ {
#ifdef DEBUG
printf("Clicked %d to edit it\n", polyfill_editing); printf("Clicked %d to edit it\n", polyfill_editing);
#endif
polyfill_draw_preview(api, canvas, 1); polyfill_draw_preview(api, canvas, 1);
return; return;
} }
@ -200,7 +235,9 @@ polyfill_click(magic_api * api, int which, int mode,
/* Trying to add a new point? */ /* Trying to add a new point? */
if (polyfill_num_pts < MAX_PTS) if (polyfill_num_pts < MAX_PTS)
{ {
#ifdef DEBUG
printf("Adding new point %d\n", polyfill_num_pts); printf("Adding new point %d\n", polyfill_num_pts);
#endif
polyfill_pt_x[polyfill_num_pts] = x; polyfill_pt_x[polyfill_num_pts] = x;
polyfill_pt_y[polyfill_num_pts] = y; polyfill_pt_y[polyfill_num_pts] = y;
@ -213,14 +250,16 @@ polyfill_click(magic_api * api, int which, int mode,
else else
{ {
/* Out of points! */ /* Out of points! */
#ifdef DEBUG
printf("Out of space for new points!\n"); printf("Out of space for new points!\n");
#endif
} }
} }
void void
polyfill_drag(magic_api * api, int which, polyfill_drag(magic_api * api, int which ATTRIBUTE_UNUSED,
SDL_Surface * canvas, SDL_Surface * snapshot, int old_x, int old_y, int x, int y, SDL_Rect * update_rect) SDL_Surface * canvas, SDL_Surface * snapshot ATTRIBUTE_UNUSED, int old_x ATTRIBUTE_UNUSED, int old_y ATTRIBUTE_UNUSED, int x, int y, SDL_Rect * update_rect)
{ {
polyfill_dragged = 1; polyfill_dragged = 1;
@ -240,7 +279,7 @@ polyfill_drag(magic_api * api, int which,
void polyfill_draw_preview(magic_api * api, SDL_Surface * canvas, int show_handles) void polyfill_draw_preview(magic_api * api, SDL_Surface * canvas, int show_handles)
{ {
int i, xx, yy, max; int i, xx, yy;
SDL_Rect dest; SDL_Rect dest;
if (polyfill_snapshot == NULL) if (polyfill_snapshot == NULL)
@ -291,8 +330,8 @@ void polyfill_draw_preview(magic_api * api, SDL_Surface * canvas, int show_handl
} }
void void
polyfill_release(magic_api * api, int which, polyfill_release(magic_api * api, int which ATTRIBUTE_UNUSED,
SDL_Surface * canvas, SDL_Surface * snapshot, int x, int y, SDL_Rect * update_rect) SDL_Surface * canvas, SDL_Surface * snapshot ATTRIBUTE_UNUSED, int x, int y, SDL_Rect * update_rect ATTRIBUTE_UNUSED)
{ {
int i; int i;
@ -302,14 +341,19 @@ polyfill_release(magic_api * api, int which,
if (polyfill_editing >= MAX_PTS) if (polyfill_editing >= MAX_PTS)
return; return;
#ifdef DEBUG
printf("Release while editing %d\n", polyfill_editing); printf("Release while editing %d\n", polyfill_editing);
#endif
/* If they simply clicked the first point (without /* If they simply clicked the first point (without
drawing to move it), and there are enough points, consider drawing to move it), and there are enough points, consider
it a final placement of a new point! */ it a final placement of a new point! */
if (polyfill_editing == 0 && polyfill_dragged == 0 && polyfill_num_pts > 2 && polyfill_num_pts < MAX_PTS) if (polyfill_editing == 0 && polyfill_dragged == 0 && polyfill_num_pts > 2 && polyfill_num_pts < MAX_PTS)
{ {
#ifdef DEBUG
printf("Clicked first point to end polygon!\n"); printf("Clicked first point to end polygon!\n");
#endif
polyfill_pt_x[polyfill_num_pts] = polyfill_pt_x[0]; polyfill_pt_x[polyfill_num_pts] = polyfill_pt_x[0];
polyfill_pt_y[polyfill_num_pts] = polyfill_pt_y[0]; polyfill_pt_y[polyfill_num_pts] = polyfill_pt_y[0];
polyfill_editing = polyfill_num_pts; polyfill_editing = polyfill_num_pts;
@ -325,7 +369,9 @@ polyfill_release(magic_api * api, int which,
abs(x - polyfill_pt_x[polyfill_num_pts - 1]) <= SNAP_SIZE && abs(x - polyfill_pt_x[polyfill_num_pts - 1]) <= SNAP_SIZE &&
abs(y - polyfill_pt_y[polyfill_num_pts - 1]) <= SNAP_SIZE))) abs(y - polyfill_pt_y[polyfill_num_pts - 1]) <= SNAP_SIZE)))
{ {
#ifdef DEBUG
printf("Ending the polygon!\n"); printf("Ending the polygon!\n");
#endif
/* Snap the points */ /* Snap the points */
if (polyfill_editing == 0) if (polyfill_editing == 0)
@ -339,7 +385,7 @@ polyfill_release(magic_api * api, int which,
polyfill_pt_y[polyfill_num_pts - 1] = polyfill_pt_y[0]; polyfill_pt_y[polyfill_num_pts - 1] = polyfill_pt_y[0];
} }
polyfill_draw_final(api, canvas); polyfill_draw_final(canvas);
polyfill_num_pts = 0; polyfill_num_pts = 0;
polyfill_editing = MAX_PTS; polyfill_editing = MAX_PTS;
@ -363,7 +409,10 @@ polyfill_release(magic_api * api, int which,
if (abs(polyfill_pt_x[i] - polyfill_pt_x[i + 1]) <= SNAP_SIZE && if (abs(polyfill_pt_x[i] - polyfill_pt_x[i + 1]) <= SNAP_SIZE &&
abs(polyfill_pt_y[i] - polyfill_pt_y[i + 1]) <= SNAP_SIZE) abs(polyfill_pt_y[i] - polyfill_pt_y[i + 1]) <= SNAP_SIZE)
{ {
#ifdef DEBUG
printf("%d & %d can be merged\n", i, i + 1); printf("%d & %d can be merged\n", i, i + 1);
#endif
to_merge = i; to_merge = i;
} }
} }
@ -371,7 +420,10 @@ polyfill_release(magic_api * api, int which,
if (to_merge != MAX_PTS) if (to_merge != MAX_PTS)
{ {
#ifdef DEBUG
printf("Merging %d with %d\n", to_merge, to_merge + 1); printf("Merging %d with %d\n", to_merge, to_merge + 1);
#endif
for (i = to_merge; i < polyfill_num_pts - 1; i++) for (i = to_merge; i < polyfill_num_pts - 1; i++)
{ {
polyfill_pt_x[i] = polyfill_pt_x[i + 1]; polyfill_pt_x[i] = polyfill_pt_x[i + 1];
@ -390,7 +442,7 @@ polyfill_release(magic_api * api, int which,
update_rect->h = canvas->h; update_rect->h = canvas->h;
} }
void polyfill_set_color(magic_api * api, int which, SDL_Surface * canvas, SDL_Surface * snapshot, Uint8 r, Uint8 g, void polyfill_set_color(magic_api * api, int which ATTRIBUTE_UNUSED, SDL_Surface * canvas, SDL_Surface * snapshot ATTRIBUTE_UNUSED, Uint8 r, Uint8 g,
Uint8 b, SDL_Rect * update_rect) Uint8 b, SDL_Rect * update_rect)
{ {
polyfill_color = SDL_MapRGB(canvas->format, r, g, b); polyfill_color = SDL_MapRGB(canvas->format, r, g, b);
@ -398,21 +450,23 @@ void polyfill_set_color(magic_api * api, int which, SDL_Surface * canvas, SDL_Su
if (polyfill_active) if (polyfill_active)
{ {
polyfill_draw_preview(api, canvas, 1); polyfill_draw_preview(api, canvas, 1);
update_rect->x = 0;
update_rect->y = 0;
update_rect->w = canvas->w;
update_rect->h = canvas->h;
} }
} }
void polyfill_set_size(magic_api * api, int which, int mode, SDL_Surface * canvas, SDL_Surface * snapshot, Uint8 size, void polyfill_set_size(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED, SDL_Surface * canvas ATTRIBUTE_UNUSED, SDL_Surface * snapshot ATTRIBUTE_UNUSED, Uint8 size ATTRIBUTE_UNUSED,
SDL_Rect * update_rect) SDL_Rect * update_rect ATTRIBUTE_UNUSED)
{ {
} }
void polyfill_line_callback(void *pointer, int which, SDL_Surface * canvas, SDL_Surface * snapshot, int x, int y) void polyfill_line_callback(void *pointer ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, SDL_Surface * canvas, SDL_Surface * snapshot ATTRIBUTE_UNUSED, int x, int y)
{ {
SDL_Rect dest; SDL_Rect dest;
magic_api *api = (magic_api *) pointer;
dest.x = x - 1; dest.x = x - 1;
dest.y = y - 1; dest.y = y - 1;
dest.w = 3; dest.w = 3;
@ -422,7 +476,7 @@ void polyfill_line_callback(void *pointer, int which, SDL_Surface * canvas, SDL_
} }
void polyfill_switchin(magic_api * api, int which, int mode, SDL_Surface * canvas) void polyfill_switchin(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED, SDL_Surface * canvas)
{ {
polyfill_color_red = SDL_MapRGB(canvas->format, 255, 0, 0); polyfill_color_red = SDL_MapRGB(canvas->format, 255, 0, 0);
polyfill_color_green = SDL_MapRGB(canvas->format, 0, 255, 0); polyfill_color_green = SDL_MapRGB(canvas->format, 0, 255, 0);
@ -442,7 +496,7 @@ void polyfill_switchin(magic_api * api, int which, int mode, SDL_Surface * canva
polyfill_active = 1; polyfill_active = 1;
} }
void polyfill_switchout(magic_api * api, int which, int mode, SDL_Surface * canvas) void polyfill_switchout(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED, SDL_Surface * canvas)
{ {
polyfill_num_pts = 0; polyfill_num_pts = 0;
polyfill_editing = MAX_PTS; polyfill_editing = MAX_PTS;
@ -457,7 +511,7 @@ void polyfill_switchout(magic_api * api, int which, int mode, SDL_Surface * canv
/* Based on public-domain code by Darel Rex Finley, 2007 /* Based on public-domain code by Darel Rex Finley, 2007
https://alienryderflex.com/polygon_fill/ https://alienryderflex.com/polygon_fill/
*/ */
void polyfill_draw_final(magic_api * api, SDL_Surface * canvas) void polyfill_draw_final(SDL_Surface * canvas)
{ {
int i, j, ymin, ymax, y, nodes, swap; int i, j, ymin, ymax, y, nodes, swap;
int nodeX[256]; int nodeX[256];
@ -478,7 +532,10 @@ void polyfill_draw_final(magic_api * api, SDL_Surface * canvas)
ymax = polyfill_pt_y[i]; ymax = polyfill_pt_y[i];
} }
} }
#ifdef DEBUG
printf("ymin %d -> ymax %d\n", ymin, ymax); printf("ymin %d -> ymax %d\n", ymin, ymax);
#endif
for (y = ymin; y <= ymax; y++) for (y = ymin; y <= ymax; y++)
{ {