~rabbits/nasu

abdd336fcb607f0358b21b99a070a75339dfd997 — neauoire 2 years ago 6fb4e5f
Bigpixel mode without ctrl
2 files changed, 48 insertions(+), 144 deletions(-)

M README.md
M nasu.c
M README.md => README.md +5 -7
@@ 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


M nasu.c => nasu.c +43 -137
@@ 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


@@ 427,36 373,19 @@ renderbmp(void)
}

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