| @@ -19,7 +19,7 @@ static double ppem; · 18 unmodified lines |
| 19 | 19 | static Rune rune = NoRune; |
| 20 | 20 | |
| 21 | 21 | static int |
| 22 | | −dumpmap(Otfile *f, GlyfImage *im, int n) |
| 22 | +dumpmap(Otfile *f, GlyfImage **im, int n) |
| 23 | 23 | { |
| 24 | 24 | int x, y, i, j, t, maxh, prebase, postbase, d, border; |
| 25 | 25 | int gap, total, mid, npix, bw, bh, lines, fill; |
| @@ -31,20 +31,20 @@ dumpmap(Otfile *f, GlyfImage *im, int n) · 5 unmodified lines |
| 31 | 31 | fill = map > 2; |
| 32 | 32 | if(n == 1){ |
| 33 | 33 | gap = 8; |
| 34 | | − maxh = im->h; |
| 35 | | − if(im->baseline) |
| 36 | | − maxh += im->baseline; |
| 37 | | − bw = 2*gap + im->w; |
| 34 | + maxh = im[0]->h; |
| 35 | + if(im[0]->baseline) |
| 36 | + maxh += im[0]->baseline; |
| 37 | + bw = 2*gap + im[0]->w; |
| 38 | 38 | bh = 2*gap + maxh; |
| 39 | 39 | npix = bw * bh; |
| 40 | 40 | }else{ |
| 41 | 41 | gap = 1; |
| 42 | 42 | for(i = 0; i < n; i++){ |
| 43 | | − if(im[i].b == nil) |
| 43 | + if(im[i] == nil) |
| 44 | 44 | continue; |
| 45 | | − if(maxh < im[i].h) |
| 46 | | − maxh = im[i].h; |
| 47 | | − total += im[i].w; |
| 45 | + if(maxh < im[i]->h) |
| 46 | + maxh = im[i]->h; |
| 47 | + total += im[i]->w; |
| 48 | 48 | } |
| 49 | 49 | mid = total / n; |
| 50 | 50 | npix = (mid+gap)*(maxh+gap)*n; |
| @@ -61,31 +61,29 @@ dumpmap(Otfile *f, GlyfImage *im, int n) · 10 unmodified lines |
| 61 | 61 | for(i = 0; i < n;){ |
| 62 | 62 | prebase = postbase = 0; |
| 63 | 63 | for(x = 0, j = i; j < n; j++){ |
| 64 | | − if(im[j].b == nil) |
| 64 | + if(im[j] == nil) |
| 65 | 65 | continue; |
| 66 | | − x += im[j].w + gap; |
| 66 | + x += im[j]->w + gap; |
| 67 | 67 | if(x > bw) |
| 68 | 68 | break; |
| 69 | | − if(prebase < im[j].h+im[j].baseline) |
| 70 | | − prebase = im[j].h+im[j].baseline; |
| 71 | | − if(im[j].baseline < 0 && postbase < -im[j].baseline) |
| 72 | | − postbase = -im[j].baseline; |
| 69 | + if(prebase < im[j]->h+im[j]->baseline) |
| 70 | + prebase = im[j]->h+im[j]->baseline; |
| 71 | + if(im[j]->baseline < 0 && postbase < -im[j]->baseline) |
| 72 | + postbase = -im[j]->baseline; |
| 73 | 73 | } |
| 74 | 74 | maxh = prebase + postbase; |
| 75 | 75 | if(j == i || y+maxh > bh) |
| 76 | 76 | break; |
| 77 | 77 | |
| 78 | 78 | for(x = 0; i < j; i++){ |
| 79 | | − if(im[i].b == nil) |
| 80 | | − continue; |
| 81 | | − u8int *lt = b + ((y + prebase - (im[i].h+im[i].baseline))*bw + x)*3; |
| 82 | | − x += im[i].w + gap; |
| 83 | | − for(d = 0; d < im[i].h; d++, lt += bw*3){ |
| 84 | | − for(t = 0; t < im[i].w; t++){ |
| 79 | + u8int *lt = b + ((y + prebase - (im[i]->h+im[i]->baseline))*bw + x)*3; |
| 80 | + x += im[i]->w + gap; |
| 81 | + for(d = 0; d < im[i]->h; d++, lt += bw*3){ |
| 82 | + for(t = 0; t < im[i]->w; t++){ |
| 85 | 83 | u8int r, g, b; |
| 86 | | − r = g = b = im[i].b[d*im[i].w + t]; |
| 87 | | − border = d == 0 || t == 0 || t == im[i].w-1 || d == im[i].h-1; |
| 88 | | − if((lines || highlight == i) && g == 0xff && (d == im[i].h+im[i].baseline)){ |
| 84 | + r = g = b = im[i]->b[d*im[i]->w + t]; |
| 85 | + border = d == 0 || t == 0 || t == im[i]->w-1 || d == im[i]->h-1; |
| 86 | + if((lines || highlight == i) && g == 0xff && (d == im[i]->h+im[i]->baseline)){ |
| 89 | 87 | g = 0; |
| 90 | 88 | b = 0; |
| 91 | 89 | }else if((lines || highlight == i) && g == 0xff && (fill || border)){ |
| @@ -117,7 +115,7 @@ dumpmap(Otfile *f, GlyfImage *im, int n) · 25 unmodified lines |
| 117 | 115 | static int |
| 118 | 116 | process(Otfile *in, Otfile *out) |
| 119 | 117 | { |
| 120 | | − GlyfImage *im; |
| 118 | + GlyfImage **im; |
| 121 | 119 | int i, n; |
| 122 | 120 | Glyf *g; |
| 123 | 121 | Otf *o; |
| @@ -150,7 +148,7 @@ glypherr: · 26 unmodified lines |
| 150 | 148 | return -1; |
| 151 | 149 | } |
| 152 | 150 | if(ppem > 0 && g->numberOfContours != 0){ |
| 153 | | − if(otfdrawglyf(o, g, ppem, im+i) != 0) |
| 151 | + if((im[i] = otfdrawglyf(o, g, ppem)) == nil) |
| 154 | 152 | goto glypherr; |
| 155 | 153 | }else if(ppem <= 0){ |
| 156 | 154 | out->print(out->aux, "%d (%s):\n", i, |
| @@ -163,7 +161,7 @@ glypherr: · 6 unmodified lines |
| 163 | 161 | if(out->write != otfdiscard && dumpmap(out, im, n) != 0) |
| 164 | 162 | return -1; |
| 165 | 163 | for(i = 0; i < n; i++) |
| 166 | | − free(im[i].b); |
| 164 | + free(im[i]); |
| 167 | 165 | free(im); |
| 168 | 166 | } |
| 169 | 167 | }else if(gind < 0){ |
| @@ -172,12 +170,12 @@ glypherr: · 2 unmodified lines |
| 172 | 170 | if((g = otfglyf(o, gind)) == nil){ |
| 173 | 171 | goto glypherr; |
| 174 | 172 | }else if(ppem > 0){ |
| 175 | | − GlyfImage im; |
| 176 | | − if(otfdrawglyf(o, g, ppem, &im) != 0) |
| 173 | + GlyfImage *im; |
| 174 | + if((im = otfdrawglyf(o, g, ppem)) == nil) |
| 177 | 175 | goto glypherr; |
| 178 | 176 | if(out->write != otfdiscard && dumpmap(out, &im, 1) != 0) |
| 179 | 177 | return -1; |
| 180 | | − free(im.b); |
| 178 | + free(im); |
| 181 | 179 | }else{ |
| 182 | 180 | out->print(out->aux, "\n%d:\n", gind); |
| 183 | 181 | print_Glyf(out, indentΔ, o, g); |