Browse Source

Starting UI

main
neauoire 5 years ago
parent
commit
3ae7524484
  1. 53
      nasu.c

53
nasu.c

@ -26,7 +26,7 @@ typedef struct Brush {
int theme[] = {0x000000, 0x72DEC2, 0xFFFFFF, 0x444444, 0x111111};
int WIDTH = 8 * HOR + PAD * 2;
int HEIGHT = 8 * VER + PAD * 2;
int HEIGHT = 8 * (VER + 2) + PAD * 2;
int FPS = 30, GUIDES = 1, ZOOM = 2;
unsigned char chrbuf[SZ];
@ -37,6 +37,11 @@ Uint32 *pixels;
Brush brush;
/* Icons */
unsigned char icon0[] = {0x38, 0x7c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x00};
unsigned char icon1[] = {0x38, 0x44, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00};
/* helpers */
int
@ -222,6 +227,13 @@ clear(Uint32 *dst)
dst[i * WIDTH + j] = theme[0];
}
void
pixel(Uint32 *dst, int x, int y, int color)
{
if(x >= 0 && x < WIDTH - 8 && y >= 0 && y < HEIGHT - 8)
dst[(y + PAD) * WIDTH + (x + PAD)] = color;
}
void
drawchr(Uint32 *dst, int x, int y, int id)
{
@ -233,17 +245,37 @@ drawchr(Uint32 *dst, int x, int y, int id)
int ch1 = chrbuf[offset + v];
int ch2 = chrbuf[offset + v + 8];
int clr = ((ch1 >> h) & 0x1) + (((ch2 >> h) & 0x1) << 1);
int key = (py + PAD) * WIDTH + (px + PAD);
int guides = GUIDES && !clr && (x + y) % 2;
dst[key] = theme[guides ? 4 : clr];
pixel(dst, px, py, theme[guides ? 4 : clr]);
}
}
void
drawicon(Uint32 *dst, int x, int y, unsigned char *icon, int color)
{
int v, h;
for(v = 0; v < 8; v++)
for(h = 0; h < 8; h++) {
int c = theme[(icon[v] >> h) & 0x1];
pixel(dst, x + h, y + v, c ? color : theme[0]);
}
}
void
drawui(Uint32 *dst)
{
int bottom = VER * 8 + 8;
drawicon(dst, 0, bottom, brush.color == 1 ? icon1 : icon0, theme[1]);
drawicon(dst, 8, bottom, brush.color == 2 ? icon1 : icon0, theme[2]);
drawicon(dst, 16, bottom, brush.color == 3 ? icon1 : icon0, theme[3]);
}
void
redraw(Uint32 *dst)
{
int x, y;
clear(dst);
drawui(dst);
for(y = 0; y < VER; ++y)
for(x = 0; x < HOR; ++x)
drawchr(dst, x, y, x + y * HOR);
@ -275,6 +307,7 @@ void
setcolor(Brush *b, int c)
{
b->color = c;
redraw(pixels);
printf("Set Color %d\n", b->color);
}
@ -282,6 +315,7 @@ void
setmode(Brush *b, int m)
{
b->mode = m;
redraw(pixels);
printf("Set Mode %d\n", b->mode);
}
@ -291,6 +325,7 @@ 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);
}
@ -385,6 +420,16 @@ loadtheme(FILE *f)
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;
}
}
void
quit(void)
{
@ -425,6 +470,8 @@ domouse(SDL_Event *event, Brush *b)
}
b->px = (event->motion.x - (PAD * ZOOM)) / ZOOM;
b->py = (event->motion.y - (PAD * ZOOM)) / ZOOM;
if(b->py >= VER * 8)
selectoption(abs(b->px / 8));
if(b->down) {
putchr(b->px - 1, b->py, b->erase ? 0 : b->color);
redraw(pixels);

Loading…
Cancel
Save