diff --git a/magic/src/toothpaste.c b/magic/src/toothpaste.c index a20eddf3f..11f452af5 100644 --- a/magic/src/toothpaste.c +++ b/magic/src/toothpaste.c @@ -46,25 +46,29 @@ double pi; static Uint8 toothpaste_r, toothpaste_g, toothpaste_b; static const int toothpaste_RADIUS = 10; -double* toothpaste_weights = NULL; +double *toothpaste_weights = NULL; -enum { - TOOL_toothpaste, - toothpaste_NUM_TOOLS +enum +{ + TOOL_toothpaste, + toothpaste_NUM_TOOLS }; -static Mix_Chunk * toothpaste_snd_effect[toothpaste_NUM_TOOLS]; +static Mix_Chunk *toothpaste_snd_effect[toothpaste_NUM_TOOLS]; -const char * toothpaste_snd_filenames[toothpaste_NUM_TOOLS] = { +const char *toothpaste_snd_filenames[toothpaste_NUM_TOOLS] = { "toothpaste.ogg", }; -const char * toothpaste_icon_filenames[toothpaste_NUM_TOOLS] = { + +const char *toothpaste_icon_filenames[toothpaste_NUM_TOOLS] = { "toothpaste.png", }; -const char * toothpaste_names[toothpaste_NUM_TOOLS] = { + +const char *toothpaste_names[toothpaste_NUM_TOOLS] = { gettext_noop("Toothpaste"), }; -const char * toothpaste_descs[toothpaste_NUM_TOOLS] = { + +const char *toothpaste_descs[toothpaste_NUM_TOOLS] = { gettext_noop("Click and drag to squirt toothpaste onto your picture."), }; @@ -72,20 +76,16 @@ const char * toothpaste_descs[toothpaste_NUM_TOOLS] = { Uint32 toothpaste_api_version(void); int toothpaste_init(magic_api * api); int toothpaste_get_tool_count(magic_api * api); -SDL_Surface * toothpaste_get_icon(magic_api * api, int which); -char * toothpaste_get_name(magic_api * api, int which); -char * toothpaste_get_description(magic_api * api, int which, int mode); -static void do_toothpaste(void * ptr, int which, SDL_Surface * canvas, SDL_Surface * last, - int x, int y); +SDL_Surface *toothpaste_get_icon(magic_api * api, int which); +char *toothpaste_get_name(magic_api * api, int which); +char *toothpaste_get_description(magic_api * api, int which, int mode); +static void do_toothpaste(void *ptr, int which, SDL_Surface * canvas, SDL_Surface * last, int x, int y); void toothpaste_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, int oy, int x, int y, SDL_Rect * update_rect); void toothpaste_click(magic_api * api, int which, int mode, - 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); void toothpaste_release(magic_api * api, int which, - 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); void toothpaste_shutdown(magic_api * api); void toothpaste_set_color(magic_api * api, Uint8 r, Uint8 g, Uint8 b); int toothpaste_requires_colors(magic_api * api, int which); @@ -93,89 +93,112 @@ void toothpaste_switchin(magic_api * api, int which, int mode, SDL_Surface * can void toothpaste_switchout(magic_api * api, int which, int mode, SDL_Surface * canvas); int toothpaste_modes(magic_api * api, int which); -Uint32 toothpaste_api_version(void) { return(TP_MAGIC_API_VERSION); } +Uint32 toothpaste_api_version(void) +{ + return (TP_MAGIC_API_VERSION); +} -int toothpaste_init(magic_api * api){ +int toothpaste_init(magic_api * api) +{ int i; char fname[1024]; - int k,j; + int k, j; + //Load sounds - for (i = 0; i < toothpaste_NUM_TOOLS; i++){ - snprintf(fname, sizeof(fname), "%s/sounds/magic/%s", api->data_directory, toothpaste_snd_filenames[i]); - toothpaste_snd_effect[i] = Mix_LoadWAV(fname); - } - + for (i = 0; i < toothpaste_NUM_TOOLS; i++) + { + snprintf(fname, sizeof(fname), "%s/sounds/magic/%s", api->data_directory, toothpaste_snd_filenames[i]); + toothpaste_snd_effect[i] = Mix_LoadWAV(fname); + } + //Set up weights pi = acos(0.0) * 2; - toothpaste_weights = (double*)malloc(toothpaste_RADIUS*2 * toothpaste_RADIUS*2 * sizeof(double)); - if (toothpaste_weights == NULL){ - return(0); - } - - for (k = - toothpaste_RADIUS; k < + toothpaste_RADIUS; k++){ - for (j = - toothpaste_RADIUS; j < + toothpaste_RADIUS; j++){ - if (api->in_circle(j , k, toothpaste_RADIUS)){ - toothpaste_weights[(k+toothpaste_RADIUS)*((toothpaste_RADIUS*2) -1)+(j+toothpaste_RADIUS)] = ((fabs(atan2((double)(j),(double)(k))))/pi); - } + toothpaste_weights = (double *)malloc(toothpaste_RADIUS * 2 * toothpaste_RADIUS * 2 * sizeof(double)); + if (toothpaste_weights == NULL) + { + return (0); } - } - return(1); + for (k = -toothpaste_RADIUS; k < +toothpaste_RADIUS; k++) + { + for (j = -toothpaste_RADIUS; j < +toothpaste_RADIUS; j++) + { + if (api->in_circle(j, k, toothpaste_RADIUS)) + { + toothpaste_weights[(k + toothpaste_RADIUS) * ((toothpaste_RADIUS * 2) - 1) + (j + toothpaste_RADIUS)] = + ((fabs(atan2((double)(j), (double)(k)))) / pi); + } + } + } + + return (1); } -int toothpaste_get_tool_count(magic_api * api ATTRIBUTE_UNUSED){ - return(toothpaste_NUM_TOOLS); +int toothpaste_get_tool_count(magic_api * api ATTRIBUTE_UNUSED) +{ + return (toothpaste_NUM_TOOLS); } // Load our icons: -SDL_Surface * toothpaste_get_icon(magic_api * api, int which ATTRIBUTE_UNUSED){ +SDL_Surface *toothpaste_get_icon(magic_api * api, int which ATTRIBUTE_UNUSED) +{ char fname[1024]; + snprintf(fname, sizeof(fname), "%simages/magic/%s", api->data_directory, toothpaste_icon_filenames[which]); - return(IMG_Load(fname)); + return (IMG_Load(fname)); } // Return our names, localized: -char * toothpaste_get_name(magic_api * api ATTRIBUTE_UNUSED, int which){ - return(strdup(gettext_noop(toothpaste_names[which]))); +char *toothpaste_get_name(magic_api * api ATTRIBUTE_UNUSED, int which) +{ + return (strdup(gettext_noop(toothpaste_names[which]))); } // Return our descriptions, localized: -char * toothpaste_get_description(magic_api * api ATTRIBUTE_UNUSED, int which, int mode ATTRIBUTE_UNUSED){ - return(strdup(gettext_noop(toothpaste_descs[which]))); +char *toothpaste_get_description(magic_api * api ATTRIBUTE_UNUSED, int which, int mode ATTRIBUTE_UNUSED) +{ + return (strdup(gettext_noop(toothpaste_descs[which]))); } // Do the effect: -static void do_toothpaste(void * ptr, int which ATTRIBUTE_UNUSED, SDL_Surface * canvas, SDL_Surface * last ATTRIBUTE_UNUSED, int x, int y){ - magic_api * api = (magic_api *) ptr; +static void do_toothpaste(void *ptr, int which ATTRIBUTE_UNUSED, SDL_Surface * canvas, + SDL_Surface * last ATTRIBUTE_UNUSED, int x, int y) +{ + magic_api *api = (magic_api *) ptr; int xx, yy; + // double colr; - float h,s,v; - Uint8 r,g,b; + float h, s, v; + Uint8 r, g, b; - for (yy = y - toothpaste_RADIUS; yy < y + toothpaste_RADIUS; yy++){ - for (xx = x - toothpaste_RADIUS; xx < x + toothpaste_RADIUS; xx++){ - if (api->in_circle(xx - x, yy - y, toothpaste_RADIUS) && - !api->touched(xx, yy)){ + for (yy = y - toothpaste_RADIUS; yy < y + toothpaste_RADIUS; yy++) + { + for (xx = x - toothpaste_RADIUS; xx < x + toothpaste_RADIUS; xx++) + { + if (api->in_circle(xx - x, yy - y, toothpaste_RADIUS) && !api->touched(xx, yy)) + { - api->rgbtohsv(toothpaste_r, toothpaste_g, toothpaste_b, &h, &s, &v); - api->hsvtorgb(h, s, toothpaste_weights[(yy-y+toothpaste_RADIUS)*((toothpaste_RADIUS*2) -1)+(xx-x+toothpaste_RADIUS)], &r, &g, &b); - api->putpixel(canvas, xx, yy, SDL_MapRGB(canvas->format, r, g, b)); + api->rgbtohsv(toothpaste_r, toothpaste_g, toothpaste_b, &h, &s, &v); + api->hsvtorgb(h, s, + toothpaste_weights[(yy - y + toothpaste_RADIUS) * ((toothpaste_RADIUS * 2) - 1) + + (xx - x + toothpaste_RADIUS)], &r, &g, &b); + api->putpixel(canvas, xx, yy, SDL_MapRGB(canvas->format, r, g, b)); - } + } + } } - } } // Affect the canvas on drag: void toothpaste_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, int oy, int x, int y, SDL_Rect * update_rect) +{ - api->line((void *) api, which, canvas, last, ox, oy, x, y, 1, do_toothpaste); + api->line((void *)api, which, canvas, last, ox, oy, x, y, 1, do_toothpaste); api->playsound(toothpaste_snd_effect[which], (x * 255) / canvas->w, 255); @@ -188,33 +211,37 @@ void toothpaste_drag(magic_api * api, int which, SDL_Surface * canvas, // Affect the canvas on click: void toothpaste_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) +{ toothpaste_drag(api, which, canvas, last, x, y, x, y, update_rect); } // Affect the canvas on release: void toothpaste_release(magic_api * api ATTRIBUTE_UNUSED, int which ATTRIBUTE_UNUSED, - SDL_Surface * canvas ATTRIBUTE_UNUSED, SDL_Surface * last ATTRIBUTE_UNUSED, - int x ATTRIBUTE_UNUSED, int y ATTRIBUTE_UNUSED, SDL_Rect * update_rect ATTRIBUTE_UNUSED) + SDL_Surface * canvas ATTRIBUTE_UNUSED, SDL_Surface * last ATTRIBUTE_UNUSED, + int x ATTRIBUTE_UNUSED, int y ATTRIBUTE_UNUSED, SDL_Rect * update_rect ATTRIBUTE_UNUSED) { } // No setup happened: void toothpaste_shutdown(magic_api * api ATTRIBUTE_UNUSED) { - //Clean up sounds - int i; - for(i=0; i