Browse Source

Bigpixel mode without ctrl

main
neauoire 5 years ago
parent
commit
abdd336fcb
  1. 12
      README.md
  2. 180
      nasu.c

12
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

180
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);

Loading…
Cancel
Save