- Bitmap *src_bitmap = *font_info[i].bitmap;
- Pixmap src_pixmap = src_bitmap->clip_mask;
- int xpos = k % FONT_CHARS_PER_LINE;
- int ypos = k / FONT_CHARS_PER_LINE;
- int xsize = font_info[i].xsize;
- int ysize = font_info[i].ysize;
- int src_x = xsize * xpos;
- int src_y = ysize * (ypos + j * FONT_LINES_PER_FONT);
-
- tile_clipmask[i][j][k] =
- XCreatePixmap(display, window->drawable, xsize, ysize, 1);
-
- XCopyArea(display, src_pixmap, tile_clipmask[i][j][k], copy_clipmask_gc,
- src_x, src_y, xsize, ysize, 0, 0);
+ if (gfx.font_bitmap_info[i].bitmap == NULL)
+ continue;
+
+ gfx.font_bitmap_info[i].clip_mask =
+ checked_calloc(NUM_FONT_CHARS * sizeof(Pixmap));
+
+ for (j=0; j < NUM_FONT_CHARS; j++)
+ {
+ Bitmap *src_bitmap = gfx.font_bitmap_info[i].bitmap;
+ Pixmap src_pixmap = src_bitmap->clip_mask;
+ int xpos = j % FONT_CHARS_PER_LINE;
+ int ypos = j / FONT_CHARS_PER_LINE;
+ int width = gfx.font_bitmap_info[i].width;
+ int height = gfx.font_bitmap_info[i].height;
+ int src_x = gfx.font_bitmap_info[i].src_x + xpos * width;
+ int src_y = gfx.font_bitmap_info[i].src_y + ypos * height;
+
+ gfx.font_bitmap_info[i].clip_mask[j] =
+ XCreatePixmap(display, window->drawable, width, height, 1);
+
+ XCopyArea(display, src_pixmap, gfx.font_bitmap_info[i].clip_mask[j],
+ copy_clipmask_gc, src_x, src_y, width, height, 0, 0);
+ }