diff --git a/chr6.c b/chr6.c index 6867f77..c822ef8 100644 --- a/chr6.c +++ b/chr6.c @@ -19,6 +19,7 @@ typedef struct Point { typedef struct Brush { int color; int down; + int edit; Point pos; } Brush; @@ -41,6 +42,12 @@ setpt(Point* p, int x, int y) return p; } +int +inspt(Point* p, int w, int h) +{ + return p->x >= 0 && p->y >= 0 && p->x < w && p->y < h; +} + void pixel(uint32_t* dst, Point p, int c) { @@ -112,7 +119,7 @@ edit(Brush* b) { Point p1; setpt(&p1, b->pos.x - PAD, b->pos.y - PAD); - if(p1.x < 0 || p1.y < 0 || p1.x > (8 * HOR) * ZOOM || p1.y > (8 * VER) * ZOOM) + if(!inspt(&p1, 8 * HOR * ZOOM, 8 * VER * ZOOM)) return; write( p1.x / (8 * ZOOM), @@ -120,7 +127,8 @@ edit(Brush* b) (p1.x / ZOOM) % 8, (p1.y / ZOOM) % 8, b->color); - SDL_SetWindowTitle(gWindow, "chr6*"); + b->edit = 1; + update(b); redraw(); } @@ -130,17 +138,26 @@ erase(Brush* b) int i, id; Point p1; setpt(&p1, b->pos.x - PAD, b->pos.y - PAD); - if(p1.x < 0 || p1.y < 0 || p1.x > 128 * ZOOM || p1.y > 128 * ZOOM) + if(!inspt(&p1, 8 * HOR * ZOOM, 8 * VER * ZOOM)) return; id = (p1.x / (8 * ZOOM)) + (p1.y / (8 * ZOOM)) * 16; for(i = 0; i < 8; ++i) { buffer[(id * 16) + i] = 0x00; buffer[(id * 16) + i + 8] = 0x00; } - SDL_SetWindowTitle(gWindow, "chr6*"); + b->edit = 1; + update(b); redraw(); } +void +update(Brush* b) +{ + char title[512]; + snprintf(title, 512, "chr6 | c%d %d:%d^%d%c", b->color, HOR, VER, ZOOM, b->edit ? '*' : ' '); + SDL_SetWindowTitle(gWindow, title); +} + int error(char* msg, const char* err) { @@ -158,13 +175,14 @@ create(void) } void -save(void) +save(Brush* b) { FILE* f = fopen("output.chr", "wb"); if(!fwrite(buffer, sizeof(buffer), 1, f)) error("Save", "Invalid output file"); fclose(f); - SDL_SetWindowTitle(gWindow, "chr6"); + b->edit = 0; + update(b); } void @@ -234,11 +252,15 @@ dokey(SDL_Event* event, Brush* b) quit(); break; case SDLK_e: - save(); + save(b); break; case SDLK_r: render(); break; + case SDLK_TAB: + b->color = b->color > 2 ? 0 : b->color + 1; + update(b); + break; case SDLK_h: GUIDES = !GUIDES; redraw(); @@ -296,7 +318,9 @@ main(int argc, char** argv) { int ticknext = 0; Brush brush; + brush.down = 0; brush.color = 1; + brush.edit = 0; if(!init()) return error("SDL", "failure"); @@ -307,6 +331,7 @@ main(int argc, char** argv) load(argv[1]); else create(); + update(&brush); /* main loop */