new bitmap converter (including fill option) and new pixmaps
[xboard.git] / pixmaps / convert.c
index dcdcd47..3118808 100644 (file)
@@ -54,6 +54,19 @@ void Paint(char dest[130][130], char src[130][130], int size, char c)
        for(i=0; i<size; i++) for(j=0; j<size; j++) if(!src[i][j]) dest[i][j] = c;\r
 }\r
 \r
+FloodFill(char a[130][130], int size, int x, int y)\r
+{\r
+       char old = 'X', new = '.';\r
+       if(a[x][y] != old) return; else {\r
+               a[x][y] = new;\r
+               if(x > 0) FloodFill(a, size, x-1, y);\r
+               if(y > 0) FloodFill(a, size, x, y-1);\r
+               if(x < size-1) FloodFill(a, size, x+1, y);\r
+               if(y < size-1) FloodFill(a, size, x, y+1);\r
+       }\r
+       \r
+}\r
+\r
 void Save(FILE *f, char *name, char data[130][130], int size, char *col, int depth)\r
 {      // write out data in source format for d x d pixmap with specified square color\r
        int i, j;\r
@@ -79,9 +92,11 @@ char data[130][130], oData[130][130], sData[130][130], wData[130][130];
 \r
 main(int argc, char **argv)\r
 {\r
-       int i, j, k, d, cnt, p, s, t; char c, h, w, *name, buf[80];\r
+       int i, j, k, d, cnt, p, s, t; char c, h, w, *name, buf[80], transparent;\r
        FILE *f;\r
 \r
+    transparent = argc > 1 && !strcmp(argv[1], "-t");\r
+\r
     for(s=0; s<18; s++) for(p=0; pieceList[p] != NULL; p++) {\r
 \r
        // Load the 3 kinds of Windows monochrome bitmaps (outline, solid, white fill)\r
@@ -107,19 +122,26 @@ main(int argc, char **argv)
        printf("%s loaded\n", buf);\r
        // construct pixmaps as character arrays\r
        d = sizeList[s];\r
-       for(i=0; i<d; i++) { for(j=0; j<d; j++) data[i][j] = '.'; data[i][d] = 0; } // fill square\r
+       for(i=0; i<d; i++) { for(j=0; j<d; j++) data[i][j] = transparent? '.' : 'X'; data[i][d] = 0; } // fill square\r
 \r
        Paint(data, sData, d, ' '); // overay with solid piece bitmap\r
 \r
+       if(!transparent) { // background was painted same color as piece details; flood-fill it from corners\r
+           FloodFill(data, d, 0, 0);\r
+           FloodFill(data, d, 0, d-1);\r
+           FloodFill(data, d, d-1, 0);\r
+           FloodFill(data, d, d-1, d-1);\r
+       }\r
+\r
        sprintf(buf, "%s%s%d.xpm", pieceList[p], "dd", d);\r
        sprintf(name, "%s%s%d", pieceList[p], "dd", d);\r
        f = fopen(buf, "w");\r
-       Save(f, name, data, d, "c green s dark_square", 2);\r
+       Save(f, name, data, d, "c green s dark_square", 3);\r
 \r
        sprintf(buf, "%s%s%d.xpm", pieceList[p], "dl", d);\r
        sprintf(name, "%s%s%d", pieceList[p], "dl", d);\r
        f = fopen(buf, "w");\r
-       Save(f, name, data, d, "c gray s light_square", 2); // silly duplication; pixmap is te same, but other color\r
+       Save(f, name, data, d, "c gray s light_square", 3); // silly duplication; pixmap is te same, but other color\r
 \r
        // now the light piece\r
        for(i=0; i<d; i++) { for(j=0; j<d; j++) data[i][j] = '.'; data[i][d] = 0; } // fill square\r