[cbdt] Refactor get_strike()

This commit is contained in:
Behdad Esfahbod 2018-10-28 23:01:57 -07:00
parent 6983cca9c8
commit e2ba96da4c
2 changed files with 17 additions and 24 deletions

View File

@ -343,26 +343,21 @@ struct CBLC
}
protected:
const IndexSubtableRecord *find_table (hb_codepoint_t glyph,
unsigned int *x_ppem, unsigned int *y_ppem,
const void **base) const
const BitmapSizeTable &get_strike (hb_font_t *font,
unsigned int *x_ppem, unsigned int *y_ppem) const
{
/* TODO: Make it possible to select strike. */
unsigned int count = sizeTables.len;
for (uint32_t i = 0; i < count; ++i)
{
unsigned int startGlyphIndex = sizeTables.arrayZ[i].startGlyphIndex;
unsigned int endGlyphIndex = sizeTables.arrayZ[i].endGlyphIndex;
if (startGlyphIndex <= glyph && glyph <= endGlyphIndex)
{
*x_ppem = sizeTables[i].ppemX;
*y_ppem = sizeTables[i].ppemY;
return sizeTables[i].find_table (glyph, this, base);
}
*x_ppem = sizeTables[i].ppemX;
*y_ppem = sizeTables[i].ppemY;
return sizeTables[i];
}
return nullptr;
*x_ppem = *y_ppem = 0;
return Null(BitmapSizeTable);
}
protected:
@ -405,13 +400,13 @@ struct CBDT
inline bool get_extents (hb_font_t *font, hb_codepoint_t glyph,
hb_glyph_extents_t *extents) const
{
unsigned int x_ppem = font->x_ppem, y_ppem = font->y_ppem;
if (!cblc)
return false;
unsigned int x_ppem, y_ppem;
const void *base;
const IndexSubtableRecord *subtable_record = this->cblc->find_table (glyph, &x_ppem, &y_ppem, &base);
const BitmapSizeTable &strike = this->cblc->get_strike (font, &x_ppem, &y_ppem);
const IndexSubtableRecord *subtable_record = strike.find_table (glyph, cblc, &base);
if (!subtable_record || !x_ppem || !y_ppem)
return false;
@ -454,23 +449,21 @@ struct CBDT
return true;
}
inline hb_blob_t* reference_png (hb_codepoint_t glyph_id,
unsigned int x_ppem,
unsigned int y_ppem) const
inline hb_blob_t* reference_png (hb_font_t *font,
hb_codepoint_t glyph) const
{
if (!cblc)
return hb_blob_get_empty ();
if (x_ppem == 0) x_ppem = upem;
if (y_ppem == 0) y_ppem = upem;
unsigned int x_ppem, y_ppem;
const void *base;
const IndexSubtableRecord *subtable_record = this->cblc->find_table (glyph_id, &x_ppem, &y_ppem, &base);
const BitmapSizeTable &strike = this->cblc->get_strike (font, &x_ppem, &y_ppem);
const IndexSubtableRecord *subtable_record = strike.find_table (glyph, cblc, &base);
if (!subtable_record || !x_ppem || !y_ppem)
return hb_blob_get_empty ();
unsigned int image_offset = 0, image_length = 0, image_format = 0;
if (!subtable_record->get_image_data (glyph_id, base, &image_offset, &image_length, &image_format))
if (!subtable_record->get_image_data (glyph, base, &image_offset, &image_length, &image_format))
return hb_blob_get_empty ();
switch (image_format)

View File

@ -321,7 +321,7 @@ hb_ot_color_glyph_reference_png (hb_font_t *font, hb_codepoint_t glyph)
blob = _get_sbix (font->face).reference_png (font, glyph, nullptr, nullptr, nullptr);
if (!blob->length && _get_cbdt (font->face).has_data ())
blob = _get_cbdt (font->face).reference_png (glyph, font->x_ppem, font->y_ppem);
blob = _get_cbdt (font->face).reference_png (font, glyph);
return blob;
}