int *gks_ft_render(int *x, int *y, int *width, int *height, gks_state_list_t *gkss, const char *text, int length) { FT_Byte *rgba_bitmap = NULL; double red, green, blue; int tmp, size, i, j; int color[4]; unsigned char *mono_bitmap; mono_bitmap = gks_ft_get_bitmap(x, y, width, height, gkss, text, length); gks_inq_rgb(gkss->txcoli, &red, &green, &blue); color[0] = (int)(red * 255); color[1] = (int)(green * 255); color[2] = (int)(blue * 255); color[3] = (int)(gkss->alpha * 255); size = *width * *height; rgba_bitmap = (FT_Byte *) safe_realloc(rgba_bitmap, 4 * size); memset(rgba_bitmap, 0, 4 * size); for (i = 0; i < size; i++) { for (j = 0; j < 4; j++) { tmp = rgba_bitmap[4*i + j] + color[j] * mono_bitmap[i] / 255; rgba_bitmap[4*i + j] = (FT_Byte) ft_min(tmp, 255); } } free(mono_bitmap); return (int *) rgba_bitmap; }
static void init_colors(void) { int color; double red, green, blue; for (color = 0; color < MAX_COLOR; color++) { gks_inq_rgb(color, &red, &green, &blue); set_color_rep(color, red, green, blue); } }