From 8facc8a4bc533cab9865611785885bc6c4290936 Mon Sep 17 00:00:00 2001 From: Pere Pujal i Carabantes Date: Mon, 19 Sep 2016 20:56:21 +0000 Subject: [PATCH] Generating mosaic patterns on the program and removing now unused PNGs, solves #210 --- magic/icons/mosaic_shaped_hex_pattern.png | Bin 1688 -> 0 bytes .../icons/mosaic_shaped_irregular_pattern.png | Bin 6204 -> 0 bytes magic/icons/mosaic_shaped_square_pattern.png | Bin 300 -> 0 bytes magic/src/mosaic_shaped.c | 169 ++++++++++++++++-- 4 files changed, 155 insertions(+), 14 deletions(-) delete mode 100644 magic/icons/mosaic_shaped_hex_pattern.png delete mode 100644 magic/icons/mosaic_shaped_irregular_pattern.png delete mode 100644 magic/icons/mosaic_shaped_square_pattern.png diff --git a/magic/icons/mosaic_shaped_hex_pattern.png b/magic/icons/mosaic_shaped_hex_pattern.png deleted file mode 100644 index ed6959533e162fdeaae9967362b63c81b0838394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1688 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 diff --git a/magic/icons/mosaic_shaped_square_pattern.png b/magic/icons/mosaic_shaped_square_pattern.png deleted file mode 100644 index 254a81c455770c8dfe605e355c6d5ec7b35f4432..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*x37`TN&n2}-D90{Nxdx@v7EBj4$HZgJj$CgTdK%q6BE{-7(=Vbn%<-35|Wmb#p)e0BA)#lCdLfUB7j3eS61#We{W z`gEUNnc?2=)Po5uKO%3O;c=_5s8@PXYunQ-*l_LErUV0~fb3W?9yf+FZ^X{e)R=uU nbXgD=!|#3iQ#lXVuKg_C!0j=8ac@@@(A^B4u6{1-oD!M<09$N< diff --git a/magic/src/mosaic_shaped.c b/magic/src/mosaic_shaped.c index d153258b2..cc6facdea 100644 --- a/magic/src/mosaic_shaped.c +++ b/magic/src/mosaic_shaped.c @@ -56,6 +56,8 @@ static void deform(magic_api * api, SDL_Surface * srfc); static void do_mosaic_shaped_full(void * ptr, SDL_Surface * canvas, SDL_Surface * last, int which, SDL_Rect * update_rect); static void mosaic_shaped_fill(void * ptr_to_api, int which, SDL_Surface * canvas, SDL_Surface * last, int x, int y); +static void mosaic_shaped_paint(void * ptr, int which, SDL_Surface * canvas, + SDL_Surface * last, int x, int y); Uint32 mosaic_shaped_api_version(void); int mosaic_shaped_init(magic_api * api); @@ -91,12 +93,6 @@ int mosaic_shaped_modes(magic_api * api, int which); int scan_fill(magic_api * api, SDL_Surface * canvas, SDL_Surface * srfc, int x, int y, int fill_edge, int fill_tile, int size, Uint32 color); - - - -static const int mosaic_shaped_AMOUNT = 300; -static const int mosaic_shaped_RADIUS = 16; -static const double mosaic_shaped_SHARPEN = 1.0; Uint8 * mosaic_shaped_counted; Uint8 * mosaic_shaped_done; Uint8 mosaic_shaped_r, mosaic_shaped_g, mosaic_shaped_b; @@ -104,10 +100,6 @@ Uint8 mosaic_shaped_r, mosaic_shaped_g, mosaic_shaped_b; int mosaic_shaped_average_r, mosaic_shaped_average_g, mosaic_shaped_average_b, mosaic_shaped_average_count; Uint32 pixel_average, black, white; -/* FIXME This is just a workaround, the problem is that at switchin(), - api->data_directory points to the local user directory instead of the system wide instalation. */ -char api_data_directory_at_init[1024]; - enum { TOOL_SQUARE, @@ -186,7 +178,6 @@ int mosaic_shaped_init(magic_api * api) mosaic_shaped_snd_effect[i] = Mix_LoadWAV(fname); } - snprintf(api_data_directory_at_init, sizeof(api_data_directory_at_init), api->data_directory); return (1); } @@ -411,7 +402,6 @@ void mosaic_shaped_switchin(magic_api * api, int which, int mode ATTRIBUTE_UNUSE SDL_Rect rect; SDL_Surface * surf_aux; Uint32 amask; - char fname[1024]; mosaic_shaped_counted = (Uint8 *) malloc(sizeof(Uint8) * (canvas->w * canvas->h)); if (mosaic_shaped_counted == NULL) @@ -445,8 +435,110 @@ void mosaic_shaped_switchin(magic_api * api, int which, int mode ATTRIBUTE_UNUSE canvas->format->Rmask, canvas->format->Gmask, canvas->format->Bmask, amask); - snprintf(fname, sizeof(fname), "%simages/magic/%s", api_data_directory_at_init, mosaic_shaped_pattern_filenames[which]); - mosaic_shaped_pattern = IMG_Load(fname); + + /* Generation of patterns now in the program, solves #210 */ + if (which == TOOL_SQUARE) + { + mosaic_shaped_pattern = SDL_CreateRGBSurface(SDL_SWSURFACE, + 16, + 16, + canvas->format->BitsPerPixel, + canvas->format->Rmask, + canvas->format->Gmask, + canvas->format->Bmask, amask); + SDL_FillRect(mosaic_shaped_pattern, NULL, SDL_MapRGBA(mosaic_shaped_pattern->format, 255, 255, 255, SDL_ALPHA_OPAQUE)); + /* Shape */ + for (i = 0;i < mosaic_shaped_pattern->w; i++) + { + api->putpixel(mosaic_shaped_pattern, 0, i, SDL_MapRGBA(mosaic_shaped_pattern->format, 0, 0, 0, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, mosaic_shaped_pattern->w - 1, i, SDL_MapRGBA(mosaic_shaped_pattern->format, 0, 0, 0, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, i, 0, SDL_MapRGBA(mosaic_shaped_pattern->format, 0, 0, 0, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, i, mosaic_shaped_pattern->w - 1, SDL_MapRGBA(mosaic_shaped_pattern->format, 0, 0, 0, SDL_ALPHA_OPAQUE)); + } + /* Shadow */ + for (i = 1; i < mosaic_shaped_pattern->w - 1; i++) + { + api->putpixel(mosaic_shaped_pattern, 1, i, SDL_MapRGBA(mosaic_shaped_pattern->format, 128, 128, 128, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, mosaic_shaped_pattern->w - 2, i, SDL_MapRGBA(mosaic_shaped_pattern->format, 128, 128, 128, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, i, 1, SDL_MapRGBA(mosaic_shaped_pattern->format, 128, 128, 128, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, i, mosaic_shaped_pattern->w - 2, SDL_MapRGBA(mosaic_shaped_pattern->format, 128, 128, 128, SDL_ALPHA_OPAQUE)); + + } + api->putpixel(mosaic_shaped_pattern, 2, 2, SDL_MapRGBA(mosaic_shaped_pattern->format, 152, 152, 152, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, 2, mosaic_shaped_pattern->h - 3, SDL_MapRGBA(mosaic_shaped_pattern->format, 152, 152, 152, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, mosaic_shaped_pattern->w - 3, 2, SDL_MapRGBA(mosaic_shaped_pattern->format, 152, 152, 152, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, mosaic_shaped_pattern->w - 3, mosaic_shaped_pattern->h - 3, SDL_MapRGBA(mosaic_shaped_pattern->format, 152, 152, 152, SDL_ALPHA_OPAQUE)); + } + else if (which == TOOL_IRREGULAR) + { + mosaic_shaped_pattern = SDL_CreateRGBSurface(SDL_SWSURFACE, + 64, + 64, + canvas->format->BitsPerPixel, + canvas->format->Rmask, + canvas->format->Gmask, + canvas->format->Bmask, amask); + SDL_FillRect(mosaic_shaped_pattern, NULL, SDL_MapRGBA(mosaic_shaped_pattern->format, 255, 255, 255, SDL_ALPHA_OPAQUE)); + + /* Start/end of lines taken from the original mosaic_shaped_irregular_pattern.png */ + api->line(api, which, mosaic_shaped_pattern, NULL, 0, 8, 36, 23, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 0, 43, 36, 23, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 0, 26, 28, 53, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 0, 54, 10, 63, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 55, 0, 36, 23, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 63, 43, 28, 53, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 24, 63, 28, 53, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 24, 0, 27, 19, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 63, 8, 50, 6, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 10, 0, 4, 10, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 10, 0, 25,7, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 41, 0, 26,12, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 41, 63, 28, 53, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 41, 63, 56, 58, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 63, 53, 55, 45, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 55, 63, 59, 49, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 10, 63, 20, 45, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 63, 26, 40, 18, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 4, 30, 14, 14, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 18, 33, 21, 17, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 23, 48, 29, 27, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 37, 50, 36, 23, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 44, 13, 37, 3, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 59, 24, 55, 7, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 49, 47, 54, 23, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 36, 35, 51, 37, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 61, 44, 52, 31, 1, mosaic_shaped_paint); + } + + else if(which == TOOL_HEX) + { + mosaic_shaped_pattern = SDL_CreateRGBSurface(SDL_SWSURFACE, + 48, + 28, + canvas->format->BitsPerPixel, + canvas->format->Rmask, + canvas->format->Gmask, + canvas->format->Bmask, amask); + SDL_FillRect(mosaic_shaped_pattern, NULL, SDL_MapRGBA(mosaic_shaped_pattern->format, 255, 255, 255, SDL_ALPHA_OPAQUE)); + + api->line(api, which, mosaic_shaped_pattern, NULL, 0, 16, 8, 0, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 8, 0, 26, 0, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 26, 0, 32, 14, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 32, 14, 26, 27, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 32, 14, 47, 14, 1, mosaic_shaped_paint); + api->line(api, which, mosaic_shaped_pattern, NULL, 0,13 ,8, 27, 1, mosaic_shaped_paint); + + //make pattern more accurate + api->putpixel(mosaic_shaped_pattern, 9 , 27, SDL_MapRGBA(mosaic_shaped_pattern->format, 0, 0, 0, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, 9 , 26, SDL_MapRGBA(mosaic_shaped_pattern->format, 0, 0, 0, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, 25 , 27, SDL_MapRGBA(mosaic_shaped_pattern->format, 0, 0, 0, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, 25 , 26, SDL_MapRGBA(mosaic_shaped_pattern->format, 0, 0, 0, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, 25 , 25, SDL_MapRGBA(mosaic_shaped_pattern->format, 0, 0, 0, SDL_ALPHA_OPAQUE)); + api->putpixel(mosaic_shaped_pattern, 24 , 27, SDL_MapRGBA(mosaic_shaped_pattern->format, 0, 0, 0, SDL_ALPHA_OPAQUE)); + + } + + rect.w = mosaic_shaped_pattern->w; rect.h = mosaic_shaped_pattern->h; @@ -651,3 +743,52 @@ void deform(magic_api * api, SDL_Surface * srfc) api->putpixel(srfc, i, j, api->getpixel(srfc, i, j + sin(i * M_PI / 90) * 10 + 10)); } } + +/* Paints a 2 pixel square with black and shadows around 3 more pixels */ +static void mosaic_shaped_paint(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 radius, shadow; + int i, j, ii, jj; + Uint8 r, g, b, a; + Uint32 shadow_tone; + + black = SDL_MapRGBA(canvas->format, 0, 0, 0, SDL_ALPHA_OPAQUE); + + radius = 1; + shadow = 3; + + for (i = -(radius + shadow); i < (radius + shadow); i++) + for (j = -(radius + shadow); j < (radius + shadow); j++) + { + /* Ensure effects on the edges reaches the opposite side if necessary */ + ii = x + i; + if (ii < 0) ii += canvas->w; + if (ii >= canvas->w) ii -= canvas->w; + jj = y + j; + if (jj < 0) jj += canvas->h; + if (jj >= canvas->h) ii -= canvas->h; + + /* Shadow_tone is also used as a marker, anything already painted on black must finally be black */ + shadow_tone = api->getpixel(canvas, ii, jj); + + // if (abs(i) <= radius && abs(j) <= radius) + if (0 <=i && i <= 1 && 0 <= j && j <= 1) + api->putpixel(canvas, ii, jj, black); + + else if (api->in_circle(i, j, radius + shadow) && shadow_tone != black) + { + SDL_GetRGBA(shadow_tone, canvas->format, &r, &g, &b, &a); + + /* Shadows should be shadows, not black */ + if (r > 10) r -= 9; + if (g > 10) g -= 9; + if (b > 10) b -= 9; + + api->putpixel(canvas, ii, jj, SDL_MapRGBA(canvas->format, r, g, b, SDL_ALPHA_OPAQUE)); + + } + + } +}