#include"hb-ot-var-mvar-table.hh" #include"hb-ot-gasp-table.hh"// Just so we compile it; unused otherwise. #include"hb-ot-os2-table.hh" #include"hb-ot-post-table.hh" #include"hb-ot-hhea-table.hh" #include"hb-ot-metrics.hh" #include"hb-ot-face.hh"
return ret;
}
} case HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET: return GET_METRIC_X (hhea, caretOffset);
#ifndef HB_NO_VERTICAL case HB_OT_METRICS_TAG_VERTICAL_CARET_RISE: return GET_METRIC_X (vhea, caretSlopeRise); case HB_OT_METRICS_TAG_VERTICAL_CARET_RUN: return GET_METRIC_Y (vhea, caretSlopeRun); case HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET: return GET_METRIC_Y (vhea, caretOffset); #endif case HB_OT_METRICS_TAG_X_HEIGHT: return GET_METRIC_Y (OS2->v2 (), sxHeight); case HB_OT_METRICS_TAG_CAP_HEIGHT: return GET_METRIC_Y (OS2->v2 (), sCapHeight); case HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE: return GET_METRIC_X (OS2, ySubscriptXSize); case HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE: return GET_METRIC_Y (OS2, ySubscriptYSize); case HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET: return GET_METRIC_X (OS2, ySubscriptXOffset); case HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET: return GET_METRIC_Y (OS2, ySubscriptYOffset); case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE: return GET_METRIC_X (OS2, ySuperscriptXSize); case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE: return GET_METRIC_Y (OS2, ySuperscriptYSize); case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET: return GET_METRIC_X (OS2, ySuperscriptXOffset); case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET: return GET_METRIC_Y (OS2, ySuperscriptYOffset); case HB_OT_METRICS_TAG_STRIKEOUT_SIZE: return GET_METRIC_Y (OS2, yStrikeoutSize); case HB_OT_METRICS_TAG_STRIKEOUT_OFFSET: return GET_METRIC_Y (OS2, yStrikeoutPosition); case HB_OT_METRICS_TAG_UNDERLINE_SIZE: return GET_METRIC_Y (post->table, underlineThickness); case HB_OT_METRICS_TAG_UNDERLINE_OFFSET: return GET_METRIC_Y (post->table, underlinePosition);
/* Private tags */ case _HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER_OS2: return GET_METRIC_Y (OS2, sTypoAscender); case _HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER_HHEA: return GET_METRIC_Y (hhea, ascender); case _HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER_OS2: return GET_METRIC_Y (OS2, sTypoDescender); case _HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER_HHEA: return GET_METRIC_Y (hhea, descender); case _HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP_OS2: return GET_METRIC_Y (OS2, sTypoLineGap); case _HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP_HHEA: return GET_METRIC_Y (hhea, lineGap); #undef GET_METRIC_Y #undef GET_METRIC_X #undef GET_VAR default: returnfalse;
}
}
/** * hb_ot_metrics_get_position_with_fallback: * @font: an #hb_font_t object. * @metrics_tag: tag of metrics value you like to fetch. * @position: (out) (optional): result of metrics value from the font. * * Fetches metrics value corresponding to @metrics_tag from @font, * and synthesizes a value if it the value is missing in the font. * * Since: 4.0.0
**/ void
hb_ot_metrics_get_position_with_fallback (hb_font_t *font,
hb_ot_metrics_tag_t metrics_tag,
hb_position_t *position /* OUT */)
{
hb_font_extents_t font_extents;
hb_codepoint_t glyph;
hb_glyph_extents_t extents;
if (hb_ot_metrics_get_position (font, metrics_tag, position))
{ if ((metrics_tag != HB_OT_METRICS_TAG_STRIKEOUT_SIZE &&
metrics_tag != HB_OT_METRICS_TAG_UNDERLINE_SIZE) ||
*position != 0) return;
}
switch (metrics_tag)
{ case HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER: case HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT:
hb_font_get_extents_for_direction (font, HB_DIRECTION_LTR, &font_extents);
*position = font_extents.ascender; break;
case HB_OT_METRICS_TAG_VERTICAL_ASCENDER:
hb_font_get_extents_for_direction (font, HB_DIRECTION_TTB, &font_extents);
*position = font_extents.ascender; break;
case HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER: case HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT:
hb_font_get_extents_for_direction (font, HB_DIRECTION_LTR, &font_extents);
*position = font_extents.descender; break;
case HB_OT_METRICS_TAG_VERTICAL_DESCENDER:
hb_font_get_extents_for_direction (font, HB_DIRECTION_TTB, &font_extents);
*position = font_extents.ascender; break;
case HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP:
hb_font_get_extents_for_direction (font, HB_DIRECTION_LTR, &font_extents);
*position = font_extents.line_gap; break;
case HB_OT_METRICS_TAG_VERTICAL_LINE_GAP:
hb_font_get_extents_for_direction (font, HB_DIRECTION_TTB, &font_extents);
*position = font_extents.line_gap; break;
case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE: case HB_OT_METRICS_TAG_VERTICAL_CARET_RISE:
*position = 1; break;
case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN: case HB_OT_METRICS_TAG_VERTICAL_CARET_RUN:
*position = 0; break;
case HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET: case HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET:
*position = 0; break;
case HB_OT_METRICS_TAG_UNDERLINE_OFFSET:
*position = - font->y_scale / 18; break;
case HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE: case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE:
*position = font->x_scale * 10 / 12; break;
case HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE: case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE:
*position = font->y_scale * 10 / 12; break;
case HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET: case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET:
*position = 0; break;
case HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET: case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET:
*position = font->y_scale / 5; break;
case _HB_OT_METRICS_TAG_MAX_VALUE: default:
*position = 0; break;
}
}
#ifndef HB_NO_VAR /** * hb_ot_metrics_get_variation: * @font: an #hb_font_t object. * @metrics_tag: tag of metrics value you like to fetch. * * Fetches metrics value corresponding to @metrics_tag from @font with the * current font variation settings applied. * * Returns: The requested metric value. * * Since: 2.6.0
**/ float
hb_ot_metrics_get_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag)
{ return font->face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords);
}
/** * hb_ot_metrics_get_x_variation: * @font: an #hb_font_t object. * @metrics_tag: tag of metrics value you like to fetch. * * Fetches horizontal metrics value corresponding to @metrics_tag from @font * with the current font variation settings applied. * * Returns: The requested metric value. * * Since: 2.6.0
**/
hb_position_t
hb_ot_metrics_get_x_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag)
{ return font->em_scalef_x (hb_ot_metrics_get_variation (font, metrics_tag));
}
/** * hb_ot_metrics_get_y_variation: * @font: an #hb_font_t object. * @metrics_tag: tag of metrics value you like to fetch. * * Fetches vertical metrics value corresponding to @metrics_tag from @font with * the current font variation settings applied. * * Returns: The requested metric value. * * Since: 2.6.0
**/
hb_position_t
hb_ot_metrics_get_y_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag)
{ return font->em_scalef_y (hb_ot_metrics_get_variation (font, metrics_tag));
} #endif
#endif
Messung V0.5
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.