A little further. But time for bed. :^(
This commit is contained in:
parent
bc4f2ad6b8
commit
e8e6c179ff
1 changed files with 27 additions and 9 deletions
|
|
@ -39,6 +39,8 @@ const char * descs[NUM_TOOLS] = {
|
||||||
|
|
||||||
Mix_Chunk * snd_effect[NUM_TOOLS];
|
Mix_Chunk * snd_effect[NUM_TOOLS];
|
||||||
|
|
||||||
|
static SDL_Surface * canvas_backup;
|
||||||
|
|
||||||
void halftone_drag(magic_api * api, int which, SDL_Surface * canvas,
|
void halftone_drag(magic_api * api, int which, SDL_Surface * canvas,
|
||||||
SDL_Surface * snapshot, int ox, int oy, int x, int y,
|
SDL_Surface * snapshot, int ox, int oy, int x, int y,
|
||||||
SDL_Rect * update_rect);
|
SDL_Rect * update_rect);
|
||||||
|
|
@ -122,6 +124,8 @@ void halftone_shutdown(magic_api * api)
|
||||||
|
|
||||||
for (i = 0; i < NUM_TOOLS; i++)
|
for (i = 0; i < NUM_TOOLS; i++)
|
||||||
Mix_FreeChunk(snd_effect[i]);
|
Mix_FreeChunk(snd_effect[i]);
|
||||||
|
|
||||||
|
SDL_FreeSurface(canvas_backup);
|
||||||
}
|
}
|
||||||
|
|
||||||
void halftone_click(magic_api * api, int which, int mode,
|
void halftone_click(magic_api * api, int which, int mode,
|
||||||
|
|
@ -193,14 +197,22 @@ void halftone_line_callback(void * ptr, int which,
|
||||||
Uint32 total_r, total_g, total_b;
|
Uint32 total_r, total_g, total_b;
|
||||||
Uint32 pixel;
|
Uint32 pixel;
|
||||||
int xx, yy, xxx, yyy, channel;
|
int xx, yy, xxx, yyy, channel;
|
||||||
|
SDL_Rect dest;
|
||||||
magic_api * api = (magic_api *) ptr;
|
magic_api * api = (magic_api *) ptr;
|
||||||
|
|
||||||
for (xx = x - 16; xx < x + 16; xx = xx + 4) {
|
pixel = SDL_MapRGB(canvas->format, 255, 255, 255);
|
||||||
for (yy = y - 16; yy < y + 16; yy = yy + 4) {
|
dest.x = x - 8;
|
||||||
|
dest.y = y - 8;
|
||||||
|
dest.w = 16;
|
||||||
|
dest.h = 16;
|
||||||
|
SDL_FillRect(canvas, &dest, pixel);
|
||||||
|
|
||||||
|
for (xx = x - 8; xx < x + 8; xx = xx + 4) {
|
||||||
|
for (yy = y - 8; yy < y + 8; yy = yy + 4) {
|
||||||
total_r = total_g = total_b = 0;
|
total_r = total_g = total_b = 0;
|
||||||
for (xxx = xx; xxx < xx + 4; xxx++) {
|
for (xxx = xx; xxx < xx + 4; xxx++) {
|
||||||
for (yyy = xx; yyy < xx + 4; yyy++) {
|
for (yyy = xx; yyy < xx + 4; yyy++) {
|
||||||
SDL_GetRGB(api->getpixel(canvas, x, y), canvas->format, &r, &g, &b);
|
SDL_GetRGB(api->getpixel(canvas_backup, x, y), canvas_backup->format, &r, &g, &b);
|
||||||
total_r += r;
|
total_r += r;
|
||||||
total_g += g;
|
total_g += g;
|
||||||
total_b += b;
|
total_b += b;
|
||||||
|
|
@ -210,14 +222,17 @@ void halftone_line_callback(void * ptr, int which,
|
||||||
total_g /= 16;
|
total_g /= 16;
|
||||||
total_b /= 16;
|
total_b /= 16;
|
||||||
|
|
||||||
|
/* FIXME: Do some magic here! */
|
||||||
for (channel = 0; channel < NUM_CHANS; channel++) {
|
for (channel = 0; channel < NUM_CHANS; channel++) {
|
||||||
|
r = total_r & chan_colors[channel][0];
|
||||||
|
g = total_g & chan_colors[channel][2];
|
||||||
|
b = total_b & chan_colors[channel][1];
|
||||||
|
|
||||||
}
|
pixel = SDL_MapRGB(canvas->format, r, g, b);
|
||||||
|
for (xxx = xx; xxx < xx + 4; xxx++) {
|
||||||
pixel = SDL_MapRGB(canvas->format, total_r, total_g, total_b);
|
for (yyy = yy; yyy < yy + 4; yyy++) {
|
||||||
for (xxx = xx; xxx < xx + 4; xxx++) {
|
api->putpixel(canvas, xxx, yyy, pixel);
|
||||||
for (yyy = yy; yyy < yy + 4; yyy++) {
|
}
|
||||||
api->putpixel(canvas, xxx, yyy, pixel);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -226,6 +241,9 @@ void halftone_line_callback(void * ptr, int which,
|
||||||
|
|
||||||
void halftone_switchin(magic_api * api, int which, int mode, SDL_Surface * canvas)
|
void halftone_switchin(magic_api * api, int which, int mode, SDL_Surface * canvas)
|
||||||
{
|
{
|
||||||
|
canvas_backup=SDL_CreateRGBSurface(SDL_ANYFORMAT, canvas->w, canvas->h, canvas->format->BitsPerPixel, canvas->format->Rmask, canvas->format->Gmask, canvas->format->Bmask, canvas->format->Amask);
|
||||||
|
|
||||||
|
SDL_BlitSurface(canvas, NULL, canvas_backup, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void halftone_switchout(magic_api * api, int which, int mode, SDL_Surface * canvas)
|
void halftone_switchout(magic_api * api, int which, int mode, SDL_Surface * canvas)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue