int advance;
} BitmapRec;
-BitmapRec bitmap[0x10000];
+BitmapRec bitmap[0x110000];
int render_width, render_height;
Pixmap raw_pixmap, seq_pixmap, gsub_pixmap, gpos_pixmap;
OTF *otf;
char *filename;
+int fontindex;
void
create_pixmap (int index)
XtSetValues (index_label[i], arg, 2);
}
- sprintf (buf, " %04X-%04X ", glyph_index, glyph_index + 0x7F);
+ if (glyph_index < 0x10000)
+ sprintf (buf, " %04X-%04X ", glyph_index, glyph_index + 0x7F);
+ else
+ sprintf (buf, "%06X-%06X", glyph_index, glyph_index + 0x7F);
XtSetArg (arg[0], XtNlabel, buf);
XtSetValues (range, arg, 1);
}
if ((int) client_data == -3 && glyph_index > 0)
glyph_index = 0;
else if ((int) client_data == -2 && glyph_index > 0)
- glyph_index = (glyph_index - 1) & 0xF000;
+ glyph_index = (glyph_index - 1) & 0x1FF000;
else if ((int) client_data == -1 && glyph_index > 0)
glyph_index -= 0x80;
- else if ((int) client_data == 1 && glyph_index < 0xFF80)
+ else if ((int) client_data == 1 && glyph_index < 0x10FF80)
glyph_index += 0x80;
- else if ((int) client_data == 2 && glyph_index < 0xF000)
- glyph_index = (glyph_index + 0x1000) & 0xF000;
- else if ((int) client_data == 3 && glyph_index < 0xF000)
- glyph_index = 0xFF80;
+ else if ((int) client_data == 2 && glyph_index < 0x10F000)
+ glyph_index = (glyph_index + 0x1000) & 0x1FF000;
+ else if ((int) client_data == 3 && glyph_index < 0x10F000)
+ glyph_index = 0x10FF80;
if (glyph_index != old_glyph_index)
update_glyph_area ();
}
return 0;
}
+void
+help (char **argv, int err)
+{
+ FILE *fp = err ? stderr : stdout;
+
+ fprintf (fp, "Usage: %s [ X-OPTION ... ] OTF-FILE [INDEX]\n",
+ basename (argv[0]));
+ fprintf (fp, " Environment variable PIXEL_SIZE specifies the pixel size.\n");
+ fprintf (fp, " The default pixel size is %d, but is reduced\n",
+ DEFAULT_PIXEL_SIZE);
+ fprintf (fp, " if your screen is not that wide.\n");
+ exit (err);
+}
int
main (int argc, char **argv)
if (! font)
font = XLoadQueryFont (display, "fixed");
- if (argc != 2 || !strcmp (argv[1], "-h") || !strcmp (argv[1], "--help"))
+ if (argc < 2)
+ help (argv, 1);
+ if (!strcmp (argv[1], "-h") || !strcmp (argv[1], "--help"))
+ help (argv, 0);
+ filename = argv[1];
+ if (argc > 2)
{
- fprintf (stderr, "Usage: %s [ X-OPTION ... ] OTF-FILE\n",
- basename (argv[0]));
- fprintf (stderr,
- " Pixel size is decided by the environment variable PIXEL_SIZE ((default %d).\n", DEFAULT_PIXEL_SIZE);
- exit (argc != 2);
+ fontindex = atoi (argv[2]);
+ if (fontindex < 0)
+ FATAL_ERROR ("Invalid font index: %d\n", fontindex);
}
- filename = argv[1];
+
+ if ((err = FT_Init_FreeType (&library)))
+ FATAL_ERROR ("%s\n", "FT_Init_FreeType: error");
+ err = FT_New_Face (library, filename, fontindex, &face);
+ if (err == FT_Err_Unknown_File_Format)
+ FATAL_ERROR ("%s\n", "FT_New_Face: unknown file format");
+ else if (err)
+ FATAL_ERROR ("%s\n", "FT_New_Face: unknown error (invalid face index?)");
+ if ((err = FT_Set_Pixel_Sizes (face, 0, pixel_size)))
+ FATAL_ERROR ("%s\n", "FT_Set_Pixel_Sizes: error");
+
if (strstr (filename, ".ttf")
|| strstr (filename, ".TTF")
|| strstr (filename, ".otf")
|| strstr (filename, ".OTF"))
{
- otf = OTF_open (filename);
+ otf = OTF_open_ft_face (face);
if (! otf
|| OTF_get_table (otf, "head") < 0
|| OTF_get_table (otf, "cmap") < 0
otf = NULL;
}
- if ((err = FT_Init_FreeType (&library)))
- FATAL_ERROR ("%s\n", "FT_Init_FreeType: error");
- err = FT_New_Face (library, filename, 0, &face);
- if (err == FT_Err_Unknown_File_Format)
- FATAL_ERROR ("%s\n", "FT_New_Face: unknown file format");
- else if (err)
- FATAL_ERROR ("%s\n", "FT_New_Face: unknown error");
- if ((err = FT_Set_Pixel_Sizes (face, 0, pixel_size)))
- FATAL_ERROR ("%s\n", "FT_Set_Pixel_Sizes: error");
-
{
char title[256];
Arg arg[1];