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