~rabbits/nasu

9786221d01b9b2b2e970268d20260440056b5581 — neauoire 2 years ago 397da0b
Improved look of bigpixels
1 files changed, 38 insertions(+), 7 deletions(-)

M nasu.c
M nasu.c => nasu.c +38 -7
@@ 244,16 244,36 @@ drawchr(Uint32 *dst, int x, int y, int id)
		}
}

int
bigchrguides(int x, int y, int h, int v)
{
	if(!GUIDES)
		return 0;
	/* horizontal guides */
	if(x % 8 == 0 && h == 0 && x > 0)
		return 1;
	if(h == 0 && v % 2 == 0 && x > 0)
		return 1;
	/* vertical guides */
	if(y % 8 == 0 && v == 0 && y > 0)
		return 1;
	if(v == 0 && h % 2 == 0 && y > 0)
		return 1;
	return 0;
}

void
drawbigchr(Uint32 *dst, int x, int y, int id)
{
	int v, h;
	for(v = 0; v < 8; v++)
		for(h = 0; h < 8; h++)
		for(h = 0; h < 8; h++) {
			int guides = bigchrguides(brush.vx + x, brush.vy + y, h, v);
			putpixel(dst,
				x * 8 + h,
				y * 8 + v,
				id == 0 && GUIDES && (x + y) % 2 ? 4 : id);
				guides && id == 0 ? 4 : id);
		}
}

void


@@ 351,16 371,23 @@ opendoc(Document *d, char *name)
	FILE *f = fopen(name, "r");
	if(!f)
		return error("Load", "Invalid input file");
	if(!fread(doc.data, sizeof(doc.data), 1, f))
		return error("Load", "Invalid input size");
	fread(doc.data, sizeof(doc.data), 1, f);
	d->unsaved = 0;
	scpy(name, doc.name, 256);
	fclose(f);
	printf("Load: %s\n", doc.name);
	printf("Loaded: %s\n", doc.name);
	redraw(pixels);
	return 1;
}

void
lookat(int x, int y)
{
	brush.vx = clamp(x, 0, WIDTH - HOR - 2 * PAD * 8);
	brush.vy = clamp(y, 0, HEIGHT - VER - 3 * PAD * 8);
	redraw(pixels);
}

int
savebmp(void)
{


@@ 435,8 462,7 @@ domouse(SDL_Event *event)
		brush.px = screenpos(event->motion.x, brush.vx);
		brush.py = screenpos(event->motion.y, brush.vy);
		if(!BIGPIXEL) {
			brush.vx = clamp((brush.px / 8) * 8, 0, WIDTH - HOR - 2 * PAD * 8);
			brush.vy = clamp((brush.py / 8) * 8, 0, HEIGHT - VER - 3 * PAD * 8);
			lookat((brush.px / 8) * 8, (brush.py / 8) * 8);
		}
		if(brush.down) {
			if(brush.mode == 0)


@@ 489,6 515,11 @@ dokey(SDL_Event *event)
		case SDLK_b: savemode(&BIGPIXEL, !BIGPIXEL); break;
		case SDLK_z: savemode(&brush.size, brush.size + (brush.size > 1 ? -1 : 0)); break;
		case SDLK_x: savemode(&brush.size, brush.size + (brush.size < 30 ? 1 : 0)); break;

		case SDLK_UP: lookat(brush.vx, brush.vy - 1); break;
		case SDLK_DOWN: lookat(brush.vx, brush.vy + 1); break;
		case SDLK_LEFT: lookat(brush.vx - 1, brush.vy); break;
		case SDLK_RIGHT: lookat(brush.vx + 1, brush.vy); break;
		}
	}
}