|
|
|
|
@ -252,7 +252,7 @@ create(void)
|
|
|
|
|
void |
|
|
|
|
save(Brush* b) |
|
|
|
|
{ |
|
|
|
|
FILE* f = fopen("output.chr", "wb"); |
|
|
|
|
FILE* f = fopen("export.chr", "wb"); |
|
|
|
|
if(!fwrite(buffer, sizeof(buffer), 1, f)) |
|
|
|
|
error("Save", "Invalid output file"); |
|
|
|
|
fclose(f); |
|
|
|
|
@ -267,7 +267,7 @@ load(char* path)
|
|
|
|
|
if(f == NULL) |
|
|
|
|
error("Load", "Invalid input file"); |
|
|
|
|
if(!fread(buffer, sizeof(buffer), 1, f)) |
|
|
|
|
error("Load", "Invalid file size"); |
|
|
|
|
error("Load", "Invalid input size"); |
|
|
|
|
fclose(f); |
|
|
|
|
redraw(pixels); |
|
|
|
|
} |
|
|
|
|
@ -276,6 +276,8 @@ void
|
|
|
|
|
render() |
|
|
|
|
{ |
|
|
|
|
SDL_Surface* surface = SDL_GetWindowSurface(gWindow); |
|
|
|
|
GUIDES = 0; |
|
|
|
|
redraw(pixels); |
|
|
|
|
SDL_RenderReadPixels(gRenderer, NULL, SDL_PIXELFORMAT_ARGB8888, surface->pixels, surface->pitch); |
|
|
|
|
SDL_SaveBMP(surface, "render.bmp"); |
|
|
|
|
SDL_FreeSurface(surface); |
|
|
|
|
@ -300,32 +302,32 @@ domouse(SDL_Event* event, Brush* b)
|
|
|
|
|
{ |
|
|
|
|
switch(event->type) { |
|
|
|
|
case SDL_MOUSEBUTTONUP: |
|
|
|
|
if(event->button.button == SDL_BUTTON_LEFT) |
|
|
|
|
if(event->button.button == SDL_BUTTON_LEFT) { |
|
|
|
|
b->down = 0; |
|
|
|
|
setpt(&b->prev, 0, 0); |
|
|
|
|
} |
|
|
|
|
if(event->button.button == SDL_BUTTON_RIGHT) |
|
|
|
|
b->erase = 0; |
|
|
|
|
setpt(&b->prev, 0, 0); |
|
|
|
|
break; |
|
|
|
|
case SDL_MOUSEBUTTONDOWN: |
|
|
|
|
if(event->button.button == SDL_BUTTON_LEFT) |
|
|
|
|
if(event->button.button == SDL_BUTTON_LEFT) { |
|
|
|
|
b->down = 1; |
|
|
|
|
setpt(&b->prev, |
|
|
|
|
(event->motion.x - PAD) / ZOOM, |
|
|
|
|
(event->motion.y - PAD) / ZOOM); |
|
|
|
|
} |
|
|
|
|
if(event->button.button == SDL_BUTTON_RIGHT) |
|
|
|
|
b->erase = 1; |
|
|
|
|
setpt(&b->prev, |
|
|
|
|
(event->motion.x - PAD) / ZOOM, |
|
|
|
|
(event->motion.y - PAD) / ZOOM); |
|
|
|
|
case SDL_MOUSEMOTION: |
|
|
|
|
if(b->down) { |
|
|
|
|
setpt(&b->pos, |
|
|
|
|
(event->motion.x - PAD) / ZOOM, |
|
|
|
|
(event->motion.y - PAD) / ZOOM); |
|
|
|
|
if(dispt(&b->pos, &b->prev) > ZOOM * 2) { |
|
|
|
|
if(b->mode == 0) |
|
|
|
|
line(&b->prev, &b->pos, b->erase ? 0 : b->color); |
|
|
|
|
else |
|
|
|
|
fill(b, b->mode, b->size, b->pos, b->erase ? 0 : b->color); |
|
|
|
|
setpt(&b->prev, b->pos.x, b->pos.y); |
|
|
|
|
} |
|
|
|
|
if(b->mode == 0) |
|
|
|
|
line(&b->prev, &b->pos, b->erase ? 0 : b->color); |
|
|
|
|
else |
|
|
|
|
fill(b, b->mode, b->size, b->pos, b->erase ? 0 : b->color); |
|
|
|
|
setpt(&b->prev, b->pos.x, b->pos.y); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
@ -411,7 +413,6 @@ int
|
|
|
|
|
main(int argc, char** argv) |
|
|
|
|
{ |
|
|
|
|
int ticknext = 0; |
|
|
|
|
Point a, b; |
|
|
|
|
Brush brush; |
|
|
|
|
brush.down = 0; |
|
|
|
|
brush.color = 1; |
|
|
|
|
|