[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;
|
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
|
void
|
||||||
font_options_t::add_options (option_parser_t *parser)
|
font_options_t::add_options (option_parser_t *parser)
|
||||||
{
|
{
|
||||||
@ -516,8 +535,9 @@ font_options_t::add_options (option_parser_t *parser)
|
|||||||
{"font-file", 0, 0, G_OPTION_ARG_STRING, &this->font_file, "Set font file-name", "filename"},
|
{"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"},
|
{"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,
|
{"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'"},
|
G_OPTION_ARG_CALLBACK, (gpointer) &parse_font_size, font_size_text, "1/2 integers or 'upem'"},
|
||||||
/* TODO Add font-ppem / font-ptem. */
|
{"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"},
|
{"font-funcs", 0, 0, G_OPTION_ARG_STRING, &this->font_funcs, text, "impl"},
|
||||||
{nullptr}
|
{nullptr}
|
||||||
};
|
};
|
||||||
@ -691,6 +711,9 @@ font_options_t::get_font (void) const
|
|||||||
if (font_size_y == FONT_SIZE_UPEM)
|
if (font_size_y == FONT_SIZE_UPEM)
|
||||||
font_size_y = hb_face_get_upem (face);
|
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_x = (int) scalbnf (font_size_x, subpixel_bits);
|
||||||
int scale_y = (int) scalbnf (font_size_y, subpixel_bits);
|
int scale_y = (int) scalbnf (font_size_y, subpixel_bits);
|
||||||
hb_font_set_scale (font, scale_x, scale_y);
|
hb_font_set_scale (font, scale_x, scale_y);
|
||||||
|
@ -452,6 +452,9 @@ struct font_options_t : option_group_t
|
|||||||
variations = nullptr;
|
variations = nullptr;
|
||||||
num_variations = 0;
|
num_variations = 0;
|
||||||
default_font_size = default_font_size_;
|
default_font_size = default_font_size_;
|
||||||
|
x_ppem = 0;
|
||||||
|
y_ppem = 0;
|
||||||
|
ptem = .0;
|
||||||
subpixel_bits = subpixel_bits_;
|
subpixel_bits = subpixel_bits_;
|
||||||
font_file = nullptr;
|
font_file = nullptr;
|
||||||
face_index = 0;
|
face_index = 0;
|
||||||
@ -478,6 +481,9 @@ struct font_options_t : option_group_t
|
|||||||
hb_variation_t *variations;
|
hb_variation_t *variations;
|
||||||
unsigned int num_variations;
|
unsigned int num_variations;
|
||||||
int default_font_size;
|
int default_font_size;
|
||||||
|
int x_ppem;
|
||||||
|
int y_ppem;
|
||||||
|
double ptem;
|
||||||
unsigned int subpixel_bits;
|
unsigned int subpixel_bits;
|
||||||
mutable double font_size_x;
|
mutable double font_size_x;
|
||||||
mutable double font_size_y;
|
mutable double font_size_y;
|
||||||
|
Loading…
Reference in New Issue
Block a user