"Spiral" magic tools: icons & sound effects
This commit is contained in:
parent
cc8b903850
commit
c5d78047bf
7 changed files with 57 additions and 20 deletions
|
|
@ -250,6 +250,11 @@ June 17, 2002 - October 4, 2024
|
||||||
"Spiral" & "Spiral Square" magic tools
|
"Spiral" & "Spiral Square" magic tools
|
||||||
by Bill Kendrick <bill@newbreedsoftware.com>
|
by Bill Kendrick <bill@newbreedsoftware.com>
|
||||||
|
|
||||||
|
"Spiral" & "Spiral Square" sound effects based on "Wobble Slicer E3.wav"
|
||||||
|
<https://freesound.org/people/LukeSharples/sounds/145631>
|
||||||
|
Creative Commons Attribution 4.0 (CC BY 4.0) by Luke Sharples
|
||||||
|
<https://freesound.org/people/LukeSharples/>
|
||||||
|
|
||||||
Bloom magic tool
|
Bloom magic tool
|
||||||
by Bill Kendrick <bill@newbreedsoftware.com>
|
by Bill Kendrick <bill@newbreedsoftware.com>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -79,9 +79,10 @@ https://tuxpaint.org/
|
||||||
|
|
||||||
* "Spiral" and "Square Spiral": Draw spiral shapes.
|
* "Spiral" and "Square Spiral": Draw spiral shapes.
|
||||||
+ Code by Bill Kendrick <bill@newbreedsoftware.com>
|
+ Code by Bill Kendrick <bill@newbreedsoftware.com>
|
||||||
+ TODO Correct location
|
+ Sound effects based on "Wobble Slicer E3.wav"
|
||||||
+ TODO Icons
|
<https://freesound.org/people/LukeSharples/sounds/145631>
|
||||||
+ TODO Sound effects
|
Creative Commons Attribution 4.0 (CC BY 4.0) by Luke Sharples
|
||||||
|
<https://freesound.org/people/LukeSharples/>
|
||||||
+ TODO Documentation
|
+ TODO Documentation
|
||||||
+ Closes https://sourceforge.net/p/tuxpaint/feature-requests/261/
|
+ Closes https://sourceforge.net/p/tuxpaint/feature-requests/261/
|
||||||
|
|
||||||
|
|
|
||||||
BIN
magic/icons/spiral-circle.png
Normal file
BIN
magic/icons/spiral-circle.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
BIN
magic/icons/spiral-square.png
Normal file
BIN
magic/icons/spiral-square.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 480 B |
BIN
magic/sounds/spiral-circle.ogg
Normal file
BIN
magic/sounds/spiral-circle.ogg
Normal file
Binary file not shown.
BIN
magic/sounds/spiral-square.ogg
Normal file
BIN
magic/sounds/spiral-square.ogg
Normal file
Binary file not shown.
|
|
@ -3,6 +3,9 @@
|
||||||
|
|
||||||
Draws a spiral shape centered around the mouse click point.
|
Draws a spiral shape centered around the mouse click point.
|
||||||
|
|
||||||
|
FIXME: This tool could be altered to draw concentric
|
||||||
|
circles and squares. -bjk 2024.10.04
|
||||||
|
|
||||||
Tux Paint - A simple drawing program for children.
|
Tux Paint - A simple drawing program for children.
|
||||||
|
|
||||||
Copyright (c) 2024 by Bill Kendrick
|
Copyright (c) 2024 by Bill Kendrick
|
||||||
|
|
@ -47,7 +50,17 @@ const char * spiral_descrs[NUM_TOOLS] = {
|
||||||
gettext_noop("Click and drag to create a square spiral."),
|
gettext_noop("Click and drag to create a square spiral."),
|
||||||
};
|
};
|
||||||
|
|
||||||
static Mix_Chunk *spiral_snd;
|
const char * spiral_sounds[NUM_TOOLS] = {
|
||||||
|
"spiral-circle.ogg",
|
||||||
|
"spiral-square.ogg",
|
||||||
|
};
|
||||||
|
|
||||||
|
const char * spiral_icons[NUM_TOOLS] = {
|
||||||
|
"spiral-circle.png",
|
||||||
|
"spiral-square.png",
|
||||||
|
};
|
||||||
|
|
||||||
|
static Mix_Chunk *spiral_snd[NUM_TOOLS];
|
||||||
static int spiral_thickness = 2;
|
static int spiral_thickness = 2;
|
||||||
Uint32 spiral_color;
|
Uint32 spiral_color;
|
||||||
int spiral_cx, spiral_cy, spiral_has_dragged;
|
int spiral_cx, spiral_cy, spiral_has_dragged;
|
||||||
|
|
@ -92,6 +105,9 @@ Uint8 spiral_default_size(magic_api * api, int which, int mode);
|
||||||
void spiral_set_size(magic_api * api, int which, int mode, SDL_Surface * canvas, SDL_Surface * last, Uint8 size,
|
void spiral_set_size(magic_api * api, int which, int mode, SDL_Surface * canvas, SDL_Surface * last, Uint8 size,
|
||||||
SDL_Rect * update_rect);
|
SDL_Rect * update_rect);
|
||||||
|
|
||||||
|
void do_spiral(magic_api * api, int which, SDL_Surface * canvas,
|
||||||
|
SDL_Surface * last, int x, int y, SDL_Rect * update_rect,
|
||||||
|
int final);
|
||||||
|
|
||||||
Uint32 spiral_api_version(void)
|
Uint32 spiral_api_version(void)
|
||||||
{
|
{
|
||||||
|
|
@ -101,9 +117,13 @@ Uint32 spiral_api_version(void)
|
||||||
int spiral_init(magic_api * api, Uint8 disabled_features ATTRIBUTE_UNUSED, Uint8 complexity_level ATTRIBUTE_UNUSED)
|
int spiral_init(magic_api * api, Uint8 disabled_features ATTRIBUTE_UNUSED, Uint8 complexity_level ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
char fname[1024];
|
char fname[1024];
|
||||||
|
int i;
|
||||||
|
|
||||||
snprintf(fname, sizeof(fname), "%ssounds/magic/xor.ogg", api->data_directory);
|
for (i = 0; i < NUM_TOOLS; i++)
|
||||||
spiral_snd = Mix_LoadWAV(fname);
|
{
|
||||||
|
snprintf(fname, sizeof(fname), "%ssounds/magic/%s", api->data_directory, spiral_sounds[i]);
|
||||||
|
spiral_snd[i] = Mix_LoadWAV(fname);
|
||||||
|
}
|
||||||
|
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
@ -113,11 +133,11 @@ int spiral_get_tool_count(magic_api * api ATTRIBUTE_UNUSED)
|
||||||
return (NUM_TOOLS);
|
return (NUM_TOOLS);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_Surface *spiral_get_icon(magic_api * api, int which ATTRIBUTE_UNUSED)
|
SDL_Surface *spiral_get_icon(magic_api * api, int which)
|
||||||
{
|
{
|
||||||
char fname[1024];
|
char fname[1024];
|
||||||
|
|
||||||
snprintf(fname, sizeof(fname), "%simages/magic/xor.png", api->data_directory);
|
snprintf(fname, sizeof(fname), "%simages/magic/%s", api->data_directory, spiral_icons[which]);
|
||||||
|
|
||||||
return (IMG_Load(fname));
|
return (IMG_Load(fname));
|
||||||
}
|
}
|
||||||
|
|
@ -129,15 +149,15 @@ char *spiral_get_name(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUS
|
||||||
|
|
||||||
int spiral_get_group(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED)
|
int spiral_get_group(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
return MAGIC_TYPE_COLOR_FILTERS;
|
return MAGIC_TYPE_PAINTING;
|
||||||
}
|
}
|
||||||
|
|
||||||
int spiral_get_order(int which ATTRIBUTE_UNUSED)
|
int spiral_get_order(int which)
|
||||||
{
|
{
|
||||||
return 800;
|
return 1310 + which;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *spiral_get_description(magic_api * api ATTRIBUTE_UNUSED, int which, int mode)
|
char *spiral_get_description(magic_api * api ATTRIBUTE_UNUSED, int which, int mode ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
return (strdup(gettext(spiral_descrs[which])));
|
return (strdup(gettext(spiral_descrs[which])));
|
||||||
}
|
}
|
||||||
|
|
@ -175,7 +195,8 @@ void do_spiral(magic_api * api, int which, SDL_Surface * canvas,
|
||||||
SDL_Surface * last, int x, int y, SDL_Rect * update_rect,
|
SDL_Surface * last, int x, int y, SDL_Rect * update_rect,
|
||||||
int final)
|
int final)
|
||||||
{
|
{
|
||||||
float radius, i, xx, yy, xsgn, ysgn, ox, oy, stp, oxx, oyy;
|
float radius = 0, i, xx, yy, xsgn, ysgn, stp, oxx, oyy;
|
||||||
|
int vol;
|
||||||
|
|
||||||
SDL_BlitSurface(last, NULL, canvas, NULL);
|
SDL_BlitSurface(last, NULL, canvas, NULL);
|
||||||
|
|
||||||
|
|
@ -222,7 +243,7 @@ void do_spiral(magic_api * api, int which, SDL_Surface * canvas,
|
||||||
}
|
}
|
||||||
else if (which == TOOL_SPIRAL_SQUARE)
|
else if (which == TOOL_SPIRAL_SQUARE)
|
||||||
{
|
{
|
||||||
int dir, oi, ooi, ix, iy;
|
int dir, oi, ooi;
|
||||||
|
|
||||||
radius = max(abs(x - spiral_cx), abs(y - spiral_cy));
|
radius = max(abs(x - spiral_cx), abs(y - spiral_cy));
|
||||||
|
|
||||||
|
|
@ -265,22 +286,29 @@ void do_spiral(magic_api * api, int which, SDL_Surface * canvas,
|
||||||
update_rect->w = canvas->w;
|
update_rect->w = canvas->w;
|
||||||
update_rect->h = canvas->h;
|
update_rect->h = canvas->h;
|
||||||
|
|
||||||
api->playsound(spiral_snd, (x * 255) / canvas->w, 255);
|
vol = (radius * 255) / max(canvas->w, canvas->h);
|
||||||
|
if (vol > 255)
|
||||||
|
vol = 255;
|
||||||
|
else if (vol < 32)
|
||||||
|
vol = 32;
|
||||||
|
|
||||||
|
api->playsound(spiral_snd[which], (spiral_cx * 255) / canvas->w, vol);
|
||||||
}
|
}
|
||||||
|
|
||||||
void spiral_drag(magic_api * api, int which, SDL_Surface * canvas,
|
void spiral_drag(magic_api * api, int which, SDL_Surface * canvas,
|
||||||
SDL_Surface * last, int ox, int oy, int x, int y, SDL_Rect * update_rect)
|
SDL_Surface * last, int ox ATTRIBUTE_UNUSED, int oy ATTRIBUTE_UNUSED, int x, int y, SDL_Rect * update_rect)
|
||||||
{
|
{
|
||||||
spiral_has_dragged = 1;
|
spiral_has_dragged = 1;
|
||||||
do_spiral(api, which, canvas, last, x, y, update_rect, 0);
|
do_spiral(api, which, canvas, last, x, y, update_rect, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void spiral_click(magic_api * api, int which, int mode,
|
void spiral_click(magic_api * api, int which, int mode ATTRIBUTE_UNUSED,
|
||||||
SDL_Surface * canvas, SDL_Surface * last, int x, int y, SDL_Rect * update_rect)
|
SDL_Surface * canvas, SDL_Surface * last, int x, int y, SDL_Rect * update_rect)
|
||||||
{
|
{
|
||||||
spiral_cx = x;
|
spiral_cx = x;
|
||||||
spiral_cy = y;
|
spiral_cy = y;
|
||||||
|
|
||||||
|
api->stopsound();
|
||||||
spiral_drag(api, which, canvas, last, x, y, x + (spiral_thickness * MIN_RADIUS), y, update_rect);
|
spiral_drag(api, which, canvas, last, x, y, x + (spiral_thickness * MIN_RADIUS), y, update_rect);
|
||||||
|
|
||||||
spiral_has_dragged = 0;
|
spiral_has_dragged = 0;
|
||||||
|
|
@ -302,8 +330,11 @@ void spiral_release(magic_api * api, int which,
|
||||||
|
|
||||||
void spiral_shutdown(magic_api * api ATTRIBUTE_UNUSED)
|
void spiral_shutdown(magic_api * api ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
if (spiral_snd != NULL)
|
int i;
|
||||||
Mix_FreeChunk(spiral_snd);
|
|
||||||
|
for (i = 0; i < NUM_TOOLS; i++)
|
||||||
|
if (spiral_snd[i] != NULL)
|
||||||
|
Mix_FreeChunk(spiral_snd[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void spiral_set_color(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, SDL_Surface * canvas,
|
void spiral_set_color(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, SDL_Surface * canvas,
|
||||||
|
|
@ -333,7 +364,7 @@ int spiral_modes(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Uint8 spiral_accepted_sizes(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, int mode)
|
Uint8 spiral_accepted_sizes(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
return 8;
|
return 8;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue