diff --git a/src/hb-ot-color-cbdt-table.hh b/src/hb-ot-color-cbdt-table.hh index a02bbba24..e6a78200a 100644 --- a/src/hb-ot-color-cbdt-table.hh +++ b/src/hb-ot-color-cbdt-table.hh @@ -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) diff --git a/src/hb-ot-color.cc b/src/hb-ot-color.cc index 0cade5e76..a3cd61905 100644 --- a/src/hb-ot-color.cc +++ b/src/hb-ot-color.cc @@ -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; }