[util] Implement ppem/ptem on hb-{shape,view} (#811)
This commit is contained in:
parent
a6bd6bcee0
commit
4f6f7c3b22
@ -481,6 +481,25 @@ parse_font_size (const char *name G_GNUC_UNUSED,
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
parse_font_ppem (const char *name G_GNUC_UNUSED,
|
||||
const char *arg,
|
||||
gpointer data,
|
||||
GError **error G_GNUC_UNUSED)
|
||||
{
|
||||
font_options_t *font_opts = (font_options_t *) data;
|
||||
switch (sscanf (arg, "%d%*[ ,]%d", &font_opts->x_ppem, &font_opts->y_ppem)) {
|
||||
case 1: font_opts->y_ppem = font_opts->x_ppem;
|
||||
case 2: return true;
|
||||
default:
|
||||
g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
|
||||
"%s argument should be one or two space-separated numbers",
|
||||
name);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
font_options_t::add_options (option_parser_t *parser)
|
||||
{
|
||||
@ -513,12 +532,13 @@ font_options_t::add_options (option_parser_t *parser)
|
||||
|
||||
GOptionEntry entries[] =
|
||||
{
|
||||
{"font-file", 0, 0, G_OPTION_ARG_STRING, &this->font_file, "Set font file-name", "filename"},
|
||||
{"face-index", 0, 0, G_OPTION_ARG_INT, &this->face_index, "Set face index (default: 0)", "index"},
|
||||
{"font-file", 0, 0, G_OPTION_ARG_STRING, &this->font_file, "Set font file-name", "filename"},
|
||||
{"face-index", 0, 0, G_OPTION_ARG_INT, &this->face_index, "Set face index (default: 0)", "index"},
|
||||
{"font-size", 0, default_font_size ? 0 : G_OPTION_FLAG_HIDDEN,
|
||||
G_OPTION_ARG_CALLBACK, (gpointer) &parse_font_size, font_size_text, "1/2 numbers or 'upem'"},
|
||||
/* TODO Add font-ppem / font-ptem. */
|
||||
{"font-funcs", 0, 0, G_OPTION_ARG_STRING, &this->font_funcs, text, "impl"},
|
||||
G_OPTION_ARG_CALLBACK, (gpointer) &parse_font_size, font_size_text, "1/2 integers or 'upem'"},
|
||||
{"font-ppem", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_font_ppem, "Set x,y pixels per EM (default: 0; disabled)", "1/2 integers"},
|
||||
{"font-ptem", 0, 0, G_OPTION_ARG_DOUBLE, &this->ptem, "Set font point-size (default: 0; disabled)", "point-size"},
|
||||
{"font-funcs", 0, 0, G_OPTION_ARG_STRING, &this->font_funcs, text, "impl"},
|
||||
{nullptr}
|
||||
};
|
||||
parser->add_group (entries,
|
||||
@ -691,6 +711,9 @@ font_options_t::get_font (void) const
|
||||
if (font_size_y == FONT_SIZE_UPEM)
|
||||
font_size_y = hb_face_get_upem (face);
|
||||
|
||||
hb_font_set_ppem (font, x_ppem, y_ppem);
|
||||
hb_font_set_ptem (font, ptem);
|
||||
|
||||
int scale_x = (int) scalbnf (font_size_x, subpixel_bits);
|
||||
int scale_y = (int) scalbnf (font_size_y, subpixel_bits);
|
||||
hb_font_set_scale (font, scale_x, scale_y);
|
||||
|
@ -452,6 +452,9 @@ struct font_options_t : option_group_t
|
||||
variations = nullptr;
|
||||
num_variations = 0;
|
||||
default_font_size = default_font_size_;
|
||||
x_ppem = 0;
|
||||
y_ppem = 0;
|
||||
ptem = .0;
|
||||
subpixel_bits = subpixel_bits_;
|
||||
font_file = nullptr;
|
||||
face_index = 0;
|
||||
@ -478,6 +481,9 @@ struct font_options_t : option_group_t
|
||||
hb_variation_t *variations;
|
||||
unsigned int num_variations;
|
||||
int default_font_size;
|
||||
int x_ppem;
|
||||
int y_ppem;
|
||||
double ptem;
|
||||
unsigned int subpixel_bits;
|
||||
mutable double font_size_x;
|
||||
mutable double font_size_y;
|
||||
|
Loading…
Reference in New Issue
Block a user