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

@ -7,7 +7,7 @@
Scanline polygon fill routine based on public-domain code
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;
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);
Uint32 polyfill_api_version(void);
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_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_final(magic_api * api, SDL_Surface * canvas);
void polyfill_draw_final(SDL_Surface * canvas);
Uint32 polyfill_api_version(void)
@ -73,7 +103,7 @@ Uint32 polyfill_api_version(void)
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;
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;
}
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];
@ -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]));
}
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;
}
@ -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]));
}
int polyfill_requires_colors(magic_api * api, int which)
int polyfill_requires_colors(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED)
{
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;
}
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;
}
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;
}
void polyfill_shutdown(magic_api * api)
void polyfill_shutdown(magic_api * api ATTRIBUTE_UNUSED)
{
int i;
@ -171,14 +201,16 @@ void polyfill_shutdown(magic_api * api)
}
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)
{
int i;
polyfill_dragged = 0;
#ifdef DEBUG
printf("Click. num_pts = %d\n", polyfill_num_pts);
#endif
/* See if we're clicking a pre-existing point, to edit it? */
polyfill_editing = MAX_PTS;
@ -192,7 +224,10 @@ polyfill_click(magic_api * api, int which, int mode,
if (polyfill_editing != MAX_PTS)
{
#ifdef DEBUG
printf("Clicked %d to edit it\n", polyfill_editing);
#endif
polyfill_draw_preview(api, canvas, 1);
return;
}
@ -200,7 +235,9 @@ polyfill_click(magic_api * api, int which, int mode,
/* Trying to add a new point? */
if (polyfill_num_pts < MAX_PTS)
{
#ifdef DEBUG
printf("Adding new point %d\n", polyfill_num_pts);
#endif
polyfill_pt_x[polyfill_num_pts] = x;
polyfill_pt_y[polyfill_num_pts] = y;
@ -213,14 +250,16 @@ polyfill_click(magic_api * api, int which, int mode,
else
{
/* Out of points! */
#ifdef DEBUG
printf("Out of space for new points!\n");
#endif
}
}
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)
polyfill_drag(magic_api * api, int which ATTRIBUTE_UNUSED,
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;
@ -240,7 +279,7 @@ polyfill_drag(magic_api * api, int which,
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;
if (polyfill_snapshot == NULL)
@ -291,8 +330,8 @@ void polyfill_draw_preview(magic_api * api, SDL_Surface * canvas, int show_handl
}
void
polyfill_release(magic_api * api, int which,
SDL_Surface * canvas, SDL_Surface * snapshot, int x, int y, SDL_Rect * update_rect)
polyfill_release(magic_api * api, int which ATTRIBUTE_UNUSED,
SDL_Surface * canvas, SDL_Surface * snapshot ATTRIBUTE_UNUSED, int x, int y, SDL_Rect * update_rect ATTRIBUTE_UNUSED)
{
int i;
@ -302,14 +341,19 @@ polyfill_release(magic_api * api, int which,
if (polyfill_editing >= MAX_PTS)
return;
#ifdef DEBUG
printf("Release while editing %d\n", polyfill_editing);
#endif
/* If they simply clicked the first point (without
drawing to move it), and there are enough points, consider
it a final placement of a new point! */
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");
#endif
polyfill_pt_x[polyfill_num_pts] = polyfill_pt_x[0];
polyfill_pt_y[polyfill_num_pts] = polyfill_pt_y[0];
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(y - polyfill_pt_y[polyfill_num_pts - 1]) <= SNAP_SIZE)))
{
#ifdef DEBUG
printf("Ending the polygon!\n");
#endif
/* Snap the points */
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_draw_final(api, canvas);
polyfill_draw_final(canvas);
polyfill_num_pts = 0;
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 &&
abs(polyfill_pt_y[i] - polyfill_pt_y[i + 1]) <= SNAP_SIZE)
{
#ifdef DEBUG
printf("%d & %d can be merged\n", i, i + 1);
#endif
to_merge = i;
}
}
@ -371,7 +420,10 @@ polyfill_release(magic_api * api, int which,
if (to_merge != MAX_PTS)
{
#ifdef DEBUG
printf("Merging %d with %d\n", to_merge, to_merge + 1);
#endif
for (i = to_merge; i < polyfill_num_pts - 1; i++)
{
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;
}
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)
{
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)
{
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,
SDL_Rect * update_rect)
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 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;
magic_api *api = (magic_api *) pointer;
dest.x = x - 1;
dest.y = y - 1;
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_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;
}
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_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
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 nodeX[256];
@ -478,7 +532,10 @@ void polyfill_draw_final(magic_api * api, SDL_Surface * canvas)
ymax = polyfill_pt_y[i];
}
}
#ifdef DEBUG
printf("ymin %d -> ymax %d\n", ymin, ymax);
#endif
for (y = ymin; y <= ymax; y++)
{