From abdd336fcb607f0358b21b99a070a75339dfd997 Mon Sep 17 00:00:00 2001 From: neauoire Date: Tue, 12 Jan 2021 17:42:00 -0800 Subject: [PATCH] Bigpixel mode without ctrl --- README.md | 12 ++-- nasu.c | 180 +++++++++++++----------------------------------------- 2 files changed, 48 insertions(+), 144 deletions(-) diff --git a/README.md b/README.md index 3047066..6a89206 100644 --- a/README.md +++ b/README.md @@ -26,17 +26,15 @@ To resume working on a tileset: - `ctrl+r` Reload - `ctrl+s` Save(.chr) - `ctrl+shift+s` Save(.bmp) -- `ctrl+plus` Zoom In -- `ctrl+minus` Zoom Out - `ctrl+h` Toggle Guides -- `ctrl+b` Toggle BigPixel Mode ### General -- `1-4` Colors0-3 -- `ASDFG` Modes0-4 -- `Z` Decr. Brush Size -- `X` Incr. Brush Size +- `1234` Colors0-3 +- `asdfg` Modes0-4 +- `z` Decr. Brush Size +- `x` Incr. Brush Size +- `b` BigPixel Mode ### Paint diff --git a/nasu.c b/nasu.c index 98a0cdd..c634c81 100644 --- a/nasu.c +++ b/nasu.c @@ -69,7 +69,7 @@ char * scpy(char *src, char *dst, int len) { int i = 0; - while((dst[i] = src[i]) && i < len) + while((dst[i] = src[i]) && i < len - 2) i++; dst[i + 1] = '\0'; return dst; @@ -93,25 +93,6 @@ screenpos(int pos, int offset) return pos; } -Uint8 -chex(char c) -{ - if(c >= 'a' && c <= 'f') - return 10 + c - 'a'; - if(c >= 'A' && c <= 'F') - return 10 + c - 'A'; - return (c - '0') & 0xF; -} - -int -shex(char *s, int len) -{ - int i, n = 0; - for(i = 0; i < len; ++i) - n |= (chex(s[i]) << ((len - i - 1) * 4)); - return n; -} - /* chr */ int @@ -324,53 +305,18 @@ error(char *msg, const char *err) } void -modzoom(int mod) -{ - if((mod > 0 && ZOOM < 5) || (mod < 0 && ZOOM > 1)) { - ZOOM += mod; - SDL_SetWindowSize(gWindow, WIDTH * ZOOM, HEIGHT * ZOOM); - } -} - -void -setcolor(Brush *b, int c) +setmode(int *i, int v) { - b->color = c; + *i = v; redraw(pixels); - printf("Set Color: %d\n", b->color); } void -setmode(Brush *b, int m) +setrange(int *i, int v, int min, int max) { - b->mode = m; + *i = v < min ? min : v > max ? max + : v; redraw(pixels); - printf("Set Mode: %d\n", b->mode); -} - -void -setbigmode(int m) -{ - BIGPIXEL = m; - redraw(pixels); -} - -void -modsize(Brush *b, int mod) -{ - int res = b->size + mod; - if(res > 0 && res < 30) - b->size = res; - redraw(pixels); - printf("Set Size: %d\n", b->size); -} - -void -setguides(int v) -{ - GUIDES = v; - redraw(pixels); - printf("Set Guide: %s \n", GUIDES ? "Show" : "Hide"); } void @@ -426,37 +372,20 @@ renderbmp(void) return 1; } -void -loadtheme(FILE *f) -{ - int id = 0; - char line[256]; - if(!f) - return; - while(fgets(line, 256, f)) { - int i = 0; - while(line[i++] && id < 5) { - if(line[i] == '#') - theme[id++] = shex(line + i + 1, 6); - } - } - fclose(f); -} - void selectoption(int option) { switch(option) { - case 0: setcolor(&brush, 1); break; - case 1: setcolor(&brush, 2); break; - case 2: setcolor(&brush, 3); break; - case 4: setmode(&brush, 0); break; - case 5: setmode(&brush, 1); break; - case 6: setmode(&brush, 2); break; - case 7: setmode(&brush, 3); break; - case 8: setmode(&brush, 4); break; - case 10: setbigmode(!BIGPIXEL); break; - case 11: setguides(!GUIDES); break; + case 0: setmode(&brush.color, 1); break; + case 1: setmode(&brush.color, 2); break; + case 2: setmode(&brush.color, 3); break; + case 4: setmode(&brush.mode, 0); break; + case 5: setmode(&brush.mode, 1); break; + case 6: setmode(&brush.mode, 2); break; + case 7: setmode(&brush.mode, 3); break; + case 8: setmode(&brush.mode, 4); break; + case 10: setmode(&BIGPIXEL, !BIGPIXEL); break; + case 11: setmode(&GUIDES, !GUIDES); break; } } @@ -504,11 +433,11 @@ domouse(SDL_Event *event) } brush.px = screenpos(event->motion.x, brush.vx); brush.py = screenpos(event->motion.y, brush.vy); + if(!BIGPIXEL) { + brush.vx = (brush.px / 8) * 8; + brush.vy = (brush.py / 8) * 8; + } if(brush.down && brush.mode == 0) { - if(!BIGPIXEL) { - brush.vx = (brush.px / 8) * 8; - brush.vy = (brush.py / 8) * 8; - } putchr(brush.px, brush.py, brush.erase ? 0 : brush.color); redraw(pixels); } @@ -534,51 +463,29 @@ dokey(SDL_Event *event) { int shift = SDL_GetModState() & KMOD_LSHIFT || SDL_GetModState() & KMOD_RSHIFT; int ctrl = SDL_GetModState() & KMOD_LCTRL || SDL_GetModState() & KMOD_RCTRL; - switch(event->key.keysym.sym) { - case SDLK_EQUALS: - case SDLK_PLUS: - if(ctrl) - modzoom(1); - break; - case SDLK_UNDERSCORE: - case SDLK_MINUS: - if(ctrl) - modzoom(-1); - break; - case SDLK_1: setcolor(&brush, 1); break; - case SDLK_2: setcolor(&brush, 2); break; - case SDLK_3: setcolor(&brush, 3); break; - case SDLK_4: setcolor(&brush, 0); break; - case SDLK_a: setmode(&brush, 0); break; - case SDLK_r: - if(ctrl) - openchr(doc.name); - break; - case SDLK_s: - if(ctrl && shift) - renderbmp(); - else if(ctrl) - savechr(); - else - setmode(&brush, 1); - break; - case SDLK_d: setmode(&brush, 2); break; - case SDLK_f: setmode(&brush, 3); break; - case SDLK_g: setmode(&brush, 4); break; - case SDLK_h: - if(ctrl) - setguides(!GUIDES); - break; - case SDLK_b: - if(ctrl) - setbigmode(!BIGPIXEL); - break; - case SDLK_z: modsize(&brush, -1); break; - case SDLK_x: modsize(&brush, 1); break; - case SDLK_n: - if(ctrl) - newchr(); - break; + if(ctrl) { + switch(event->key.keysym.sym) { + /* Generic */ + case SDLK_n: newchr(); break; + case SDLK_r: openchr(doc.name); break; + case SDLK_s: shift ? renderbmp() : savechr(); break; + case SDLK_h: setmode(&GUIDES, !GUIDES); break; + } + } else { + switch(event->key.keysym.sym) { + case SDLK_1: setmode(&brush.color, 1); break; + case SDLK_2: setmode(&brush.color, 2); break; + case SDLK_3: setmode(&brush.color, 3); break; + case SDLK_4: setmode(&brush.color, 0); break; + case SDLK_a: setmode(&brush.mode, 0); break; + case SDLK_s: setmode(&brush.mode, 1); break; + case SDLK_d: setmode(&brush.mode, 2); break; + case SDLK_f: setmode(&brush.mode, 3); break; + case SDLK_g: setmode(&brush.mode, 4); break; + case SDLK_b: setmode(&BIGPIXEL, !BIGPIXEL); break; + case SDLK_z: setrange(&brush.size, brush.size - 1, 1, 30); break; + case SDLK_x: setrange(&brush.size, brush.size + 1, 1, 30); break; + } } } @@ -620,7 +527,6 @@ main(int argc, char **argv) brush.size = 10; if(!init()) return error("Init", "Failure"); - loadtheme(fopen("theme.svg", "r")); if(argc < 2 || !openchr(argv[1])) newchr(); redraw(pixels);