Don't cache ascender/descender metrics
This commit is contained in:
parent
5e28c2654d
commit
29444d7e9f
|
@ -230,32 +230,24 @@ hb_ot_get_glyph_from_name (hb_font_t *font HB_UNUSED,
|
||||||
|
|
||||||
static hb_bool_t
|
static hb_bool_t
|
||||||
hb_ot_get_font_h_extents (hb_font_t *font,
|
hb_ot_get_font_h_extents (hb_font_t *font,
|
||||||
void *font_data,
|
void *font_data HB_UNUSED,
|
||||||
hb_font_extents_t *metrics,
|
hb_font_extents_t *metrics,
|
||||||
void *user_data HB_UNUSED)
|
void *user_data HB_UNUSED)
|
||||||
{
|
{
|
||||||
const hb_ot_face_t *ot_face = (const hb_ot_face_t *) font_data;
|
return hb_ot_metrics_get_position (font, HB_OT_METRICS_HORIZONTAL_ASCENDER, &metrics->ascender) &&
|
||||||
const OT::hmtx_accelerator_t &hmtx = *ot_face->hmtx;
|
hb_ot_metrics_get_position (font, HB_OT_METRICS_HORIZONTAL_DESCENDER, &metrics->descender) &&
|
||||||
metrics->ascender = font->em_scale_y (hmtx.ascender);
|
hb_ot_metrics_get_position (font, HB_OT_METRICS_HORIZONTAL_LINE_GAP, &metrics->line_gap);
|
||||||
metrics->descender = font->em_scale_y (hmtx.descender);
|
|
||||||
metrics->line_gap = font->em_scale_y (hmtx.line_gap);
|
|
||||||
// TODO Hook up variations.
|
|
||||||
return hmtx.has_font_extents;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static hb_bool_t
|
static hb_bool_t
|
||||||
hb_ot_get_font_v_extents (hb_font_t *font,
|
hb_ot_get_font_v_extents (hb_font_t *font,
|
||||||
void *font_data,
|
void *font_data HB_UNUSED,
|
||||||
hb_font_extents_t *metrics,
|
hb_font_extents_t *metrics,
|
||||||
void *user_data HB_UNUSED)
|
void *user_data HB_UNUSED)
|
||||||
{
|
{
|
||||||
const hb_ot_face_t *ot_face = (const hb_ot_face_t *) font_data;
|
return hb_ot_metrics_get_position (font, HB_OT_METRICS_VERTICAL_ASCENDER, &metrics->ascender) &&
|
||||||
const OT::vmtx_accelerator_t &vmtx = *ot_face->vmtx;
|
hb_ot_metrics_get_position (font, HB_OT_METRICS_VERTICAL_DESCENDER, &metrics->descender) &&
|
||||||
metrics->ascender = font->em_scale_x (vmtx.ascender);
|
hb_ot_metrics_get_position (font, HB_OT_METRICS_VERTICAL_LINE_GAP, &metrics->line_gap);
|
||||||
metrics->descender = font->em_scale_x (vmtx.descender);
|
|
||||||
metrics->line_gap = font->em_scale_x (vmtx.line_gap);
|
|
||||||
// TODO Hook up variations.
|
|
||||||
return vmtx.has_font_extents;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HB_USE_ATEXIT
|
#if HB_USE_ATEXIT
|
||||||
|
|
|
@ -161,14 +161,6 @@ struct hmtxvmtx
|
||||||
unsigned int default_advance_ = 0)
|
unsigned int default_advance_ = 0)
|
||||||
{
|
{
|
||||||
default_advance = default_advance_ ? default_advance_ : hb_face_get_upem (face);
|
default_advance = default_advance_ ? default_advance_ : hb_face_get_upem (face);
|
||||||
ascender = 0; descender = 0; line_gap = 0;
|
|
||||||
|
|
||||||
hb_ot_metrics_get_position_internal (face, T::ascenderTag, &ascender);
|
|
||||||
hb_ot_metrics_get_position_internal (face, T::descenderTag, &descender);
|
|
||||||
hb_ot_metrics_get_position_internal (face, T::lineGapTag, &line_gap);
|
|
||||||
ascender = fabs (ascender);
|
|
||||||
descender = -fabs (descender);
|
|
||||||
has_font_extents = ascender != 0 || descender != 0;
|
|
||||||
|
|
||||||
num_advances = T::is_horizontal ? face->table.hhea->numberOfLongMetrics : face->table.vhea->numberOfLongMetrics;
|
num_advances = T::is_horizontal ? face->table.hhea->numberOfLongMetrics : face->table.vhea->numberOfLongMetrics;
|
||||||
|
|
||||||
|
@ -264,12 +256,6 @@ struct hmtxvmtx
|
||||||
return get_advance (old_gid);
|
return get_advance (old_gid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
|
||||||
bool has_font_extents;
|
|
||||||
float ascender;
|
|
||||||
float descender;
|
|
||||||
float line_gap;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
unsigned int num_metrics;
|
unsigned int num_metrics;
|
||||||
unsigned int num_advances;
|
unsigned int num_advances;
|
||||||
|
@ -309,17 +295,11 @@ struct hmtxvmtx
|
||||||
struct hmtx : hmtxvmtx<hmtx, hhea> {
|
struct hmtx : hmtxvmtx<hmtx, hhea> {
|
||||||
static constexpr hb_tag_t tableTag = HB_OT_TAG_hmtx;
|
static constexpr hb_tag_t tableTag = HB_OT_TAG_hmtx;
|
||||||
static constexpr hb_tag_t variationsTag = HB_OT_TAG_HVAR;
|
static constexpr hb_tag_t variationsTag = HB_OT_TAG_HVAR;
|
||||||
static constexpr hb_ot_metrics_t ascenderTag = HB_OT_METRICS_HORIZONTAL_ASCENDER;
|
|
||||||
static constexpr hb_ot_metrics_t descenderTag = HB_OT_METRICS_HORIZONTAL_DESCENDER;
|
|
||||||
static constexpr hb_ot_metrics_t lineGapTag = HB_OT_METRICS_HORIZONTAL_LINE_GAP;
|
|
||||||
static constexpr bool is_horizontal = true;
|
static constexpr bool is_horizontal = true;
|
||||||
};
|
};
|
||||||
struct vmtx : hmtxvmtx<vmtx, vhea> {
|
struct vmtx : hmtxvmtx<vmtx, vhea> {
|
||||||
static constexpr hb_tag_t tableTag = HB_OT_TAG_vmtx;
|
static constexpr hb_tag_t tableTag = HB_OT_TAG_vmtx;
|
||||||
static constexpr hb_tag_t variationsTag = HB_OT_TAG_VVAR;
|
static constexpr hb_tag_t variationsTag = HB_OT_TAG_VVAR;
|
||||||
static constexpr hb_ot_metrics_t ascenderTag = HB_OT_METRICS_VERTICAL_ASCENDER;
|
|
||||||
static constexpr hb_ot_metrics_t descenderTag = HB_OT_METRICS_VERTICAL_DESCENDER;
|
|
||||||
static constexpr hb_ot_metrics_t lineGapTag = HB_OT_METRICS_VERTICAL_LINE_GAP;
|
|
||||||
static constexpr bool is_horizontal = false;
|
static constexpr bool is_horizontal = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue