src/dump-emoji.cc | 24 ++---- src/hb-aat-layout-trak-table.hh | 6 - src/hb-dsalgs.hh | 6 - src/hb-open-file.hh | 4 - src/hb-open-type.hh | 3 src/hb-ot-color-cpal-table.hh | 147 +++++++++++++++++++--------------------- src/hb-ot-color.cc | 7 + src/hb-static.cc | 1 8 files changed, 99 insertions(+), 99 deletions(-)
New commits: commit d7865107ea4664e04c03a1d79678cdcadc0d5ea5 Author: Behdad Esfahbod <beh...@behdad.org> Date: Mon Oct 22 16:18:34 2018 -0700 Remove const from hb_array_t details Will come in through <T> if desired. diff --git a/src/hb-aat-layout-trak-table.hh b/src/hb-aat-layout-trak-table.hh index 16729d16..c2c50bbb 100644 --- a/src/hb-aat-layout-trak-table.hh +++ b/src/hb-aat-layout-trak-table.hh @@ -55,7 +55,7 @@ struct TrackTableEntry unsigned int index, unsigned int nSizes) const { - return hb_array_t<FWORD> ((base+valuesZ).arrayZ, nSizes)[index]; + return hb_array_t<const FWORD> ((base+valuesZ).arrayZ, nSizes)[index]; } public: @@ -88,7 +88,7 @@ struct TrackData const void *base) const { unsigned int sizes = nSizes; - hb_array_t<Fixed> size_table ((base+sizeTable).arrayZ, sizes); + hb_array_t<const Fixed> size_table ((base+sizeTable).arrayZ, sizes); float s0 = size_table[idx].to_float (); float s1 = size_table[idx + 1].to_float (); @@ -134,7 +134,7 @@ struct TrackData if (sizes == 1) return trackTableEntry->get_value (base, 0, sizes); /* TODO bfind() */ - hb_array_t<Fixed> size_table ((base+sizeTable).arrayZ, sizes); + hb_array_t<const Fixed> size_table ((base+sizeTable).arrayZ, sizes); unsigned int size_index; for (size_index = 0; size_index < sizes - 1; size_index++) if (size_table[size_index].to_float () >= csspx) diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh index 7e1b7eb1..27c1a96e 100644 --- a/src/hb-dsalgs.hh +++ b/src/hb-dsalgs.hh @@ -513,9 +513,9 @@ template <typename T> struct hb_array_t { inline hb_array_t (void) : arrayZ (nullptr), len (0) {} - inline hb_array_t (const T *array_, unsigned int len_) : arrayZ (array_), len (len_) {} + inline hb_array_t (T *array_, unsigned int len_) : arrayZ (array_), len (len_) {} - inline const T& operator [] (unsigned int i) const + inline T& operator [] (unsigned int i) const { if (unlikely (i >= len)) return Null(T); return arrayZ[i]; @@ -534,7 +534,7 @@ struct hb_array_t inline void free (void) { ::free ((void *) arrayZ); arrayZ = nullptr; len = 0; } - const T *arrayZ; + T *arrayZ; unsigned int len; }; diff --git a/src/hb-open-file.hh b/src/hb-open-file.hh index 817791ab..a973455d 100644 --- a/src/hb-open-file.hh +++ b/src/hb-open-file.hh @@ -330,8 +330,8 @@ struct ResourceTypeRecord inline const ResourceRecord& get_resource_record (unsigned int i, const void *type_base) const { - return hb_array_t<ResourceRecord> ((type_base+resourcesZ).arrayZ, - get_resource_count ()) [i]; + return hb_array_t<const ResourceRecord> ((type_base+resourcesZ).arrayZ, + get_resource_count ()) [i]; } inline bool sanitize (hb_sanitize_context_t *c, commit f3336580dd0c6959a1871f92b4a37f7c0a4b2160 Author: Behdad Esfahbod <beh...@behdad.org> Date: Mon Oct 22 16:16:21 2018 -0700 [color] Use hb_array_t in CPAL Doesn't work though, ouch :(. Need to figure out if it's unreasonable to expect Null(T) inside hb_array_t<T> to see the later specialization of Null for NameID. diff --git a/src/hb-open-type.hh b/src/hb-open-type.hh index be0d8b01..dc2f1f7c 100644 --- a/src/hb-open-type.hh +++ b/src/hb-open-type.hh @@ -150,7 +150,8 @@ struct Tag : HBUINT32 typedef HBUINT16 GlyphID; /* Name-table index, same as uint16 (length = 16 bits) */ -typedef HBUINT16 NameID; +struct NameID : HBUINT16 {}; +DECLARE_NULL_NAMESPACE_BYTES (OT, NameID); /* Script/language-system/feature index */ struct Index : HBUINT16 { diff --git a/src/hb-ot-color-cpal-table.hh b/src/hb-ot-color-cpal-table.hh index beef2fce..205613e4 100644 --- a/src/hb-ot-color-cpal-table.hh +++ b/src/hb-ot-color-cpal-table.hh @@ -53,10 +53,9 @@ struct CPALV1Tail unsigned int palette_index, unsigned int palette_count) const { - if (unlikely (palette_index >= palette_count || !paletteFlagsZ)) - return HB_OT_COLOR_PALETTE_FLAG_DEFAULT; - - return (hb_ot_color_palette_flags_t) (uint32_t) (base+paletteFlagsZ)[palette_index]; + if (!paletteFlagsZ) return HB_OT_COLOR_PALETTE_FLAG_DEFAULT; + return (hb_ot_color_palette_flags_t) (uint32_t) + hb_array_t<const HBUINT32> ((base+paletteFlagsZ).arrayZ, palette_count)[palette_index]; } inline unsigned int @@ -64,10 +63,10 @@ struct CPALV1Tail unsigned int palette_index, unsigned int palette_count) const { - if (unlikely (palette_index >= palette_count || !paletteLabelZ)) - return HB_NAME_ID_INVALID; - - return (base+paletteLabelZ)[palette_index]; + /* XXX the Null(NameID) returned by hb_array_t is wrong. Figure out why + * and remove the explicit bound check. */ + if (!paletteLabelsZ || palette_index >= palette_count) return HB_NAME_ID_INVALID; + return hb_array_t<const NameID> ((base+paletteLabelsZ).arrayZ, palette_count)[palette_index]; } inline unsigned int @@ -75,21 +74,23 @@ struct CPALV1Tail unsigned int color_index, unsigned int color_count) const { - if (unlikely (color_index >= color_count || !paletteEntryLabelZ)) - return HB_NAME_ID_INVALID; - - return (base+paletteEntryLabelZ)[color_index]; + /* XXX the Null(NameID) returned by hb_array_t is wrong. Figure out why + * and remove the explicit bound check. */ + if (!colorLabelsZ || color_index >= color_count) return HB_NAME_ID_INVALID; + return hb_array_t<const NameID> ((base+colorLabelsZ).arrayZ, color_count)[color_index]; } public: - inline bool sanitize (hb_sanitize_context_t *c, const void *base, - unsigned int palette_count, unsigned int color_count) const + inline bool sanitize (hb_sanitize_context_t *c, + const void *base, + unsigned int palette_count, + unsigned int color_count) const { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && - (!paletteFlagsZ || (base+paletteFlagsZ).sanitize (c, palette_count)) && - (!paletteLabelZ || (base+paletteLabelZ).sanitize (c, palette_count)) && - (!paletteEntryLabelZ || (base+paletteEntryLabelZ).sanitize (c, color_count))); + (!paletteFlagsZ || (base+paletteFlagsZ).sanitize (c, palette_count)) && + (!paletteLabelsZ || (base+paletteLabelsZ).sanitize (c, palette_count)) && + (!colorLabelsZ || (base+colorLabelsZ).sanitize (c, color_count))); } protected: @@ -97,13 +98,13 @@ struct CPALV1Tail paletteFlagsZ; /* Offset from the beginning of CPAL table to * the Palette Type Array. Set to 0 if no array * is provided. */ - LOffsetTo<UnsizedArrayOf<HBUINT16>, false> - paletteLabelZ; /* Offset from the beginning of CPAL table to - * the Palette Labels Array. Set to 0 if no + LOffsetTo<UnsizedArrayOf<NameID>, false> + paletteLabelsZ; /* Offset from the beginning of CPAL table to + * the palette labels array. Set to 0 if no * array is provided. */ - LOffsetTo<UnsizedArrayOf<HBUINT16>, false> - paletteEntryLabelZ; /* Offset from the beginning of CPAL table to - * the Palette Entry Label Array. Set to 0 + LOffsetTo<UnsizedArrayOf<NameID>, false> + colorLabelsZ; /* Offset from the beginning of CPAL table to + * the color labels array. Set to 0 * if no array is provided. */ public: DEFINE_SIZE_STATIC (12); diff --git a/src/hb-static.cc b/src/hb-static.cc index e5507960..53889a5a 100644 --- a/src/hb-static.cc +++ b/src/hb-static.cc @@ -40,6 +40,7 @@ hb_vector_size_impl_t const _hb_NullPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)] = {}; /*thread_local*/ hb_vector_size_impl_t _hb_CrapPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)] = {}; +DEFINE_NULL_NAMESPACE_BYTES (OT, NameID) = {0xFF,0xFF}; DEFINE_NULL_NAMESPACE_BYTES (OT, Index) = {0xFF,0xFF}; DEFINE_NULL_NAMESPACE_BYTES (OT, LangSys) = {0x00,0x00, 0xFF,0xFF, 0x00,0x00}; DEFINE_NULL_NAMESPACE_BYTES (OT, RangeRecord) = {0x00,0x01, 0x00,0x00, 0x00, 0x00}; commit 5ae18855d115577ff796158d483db7b890d9956f Author: Behdad Esfahbod <beh...@behdad.org> Date: Mon Oct 22 14:54:55 2018 -0700 [color] Check for null CPAL arrays We cannot use a nullable offset here though. diff --git a/src/hb-ot-color-cpal-table.hh b/src/hb-ot-color-cpal-table.hh index abb79ce9..beef2fce 100644 --- a/src/hb-ot-color-cpal-table.hh +++ b/src/hb-ot-color-cpal-table.hh @@ -53,7 +53,7 @@ struct CPALV1Tail unsigned int palette_index, unsigned int palette_count) const { - if (unlikely (palette_index >= palette_count)) + if (unlikely (palette_index >= palette_count || !paletteFlagsZ)) return HB_OT_COLOR_PALETTE_FLAG_DEFAULT; return (hb_ot_color_palette_flags_t) (uint32_t) (base+paletteFlagsZ)[palette_index]; @@ -64,7 +64,7 @@ struct CPALV1Tail unsigned int palette_index, unsigned int palette_count) const { - if (unlikely (palette_index >= palette_count)) + if (unlikely (palette_index >= palette_count || !paletteLabelZ)) return HB_NAME_ID_INVALID; return (base+paletteLabelZ)[palette_index]; @@ -75,7 +75,7 @@ struct CPALV1Tail unsigned int color_index, unsigned int color_count) const { - if (unlikely (color_index >= color_count)) + if (unlikely (color_index >= color_count || !paletteEntryLabelZ)) return HB_NAME_ID_INVALID; return (base+paletteEntryLabelZ)[color_index]; @@ -87,9 +87,9 @@ struct CPALV1Tail { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && - (base+paletteFlagsZ).sanitize (c, palette_count) && - (base+paletteLabelZ).sanitize (c, palette_count) && - (base+paletteEntryLabelZ).sanitize (c, color_count)); + (!paletteFlagsZ || (base+paletteFlagsZ).sanitize (c, palette_count)) && + (!paletteLabelZ || (base+paletteLabelZ).sanitize (c, palette_count)) && + (!paletteEntryLabelZ || (base+paletteEntryLabelZ).sanitize (c, color_count))); } protected: commit 69ab72e4aa7cbf197873d38f7e623866b4e40502 Author: Behdad Esfahbod <beh...@behdad.org> Date: Mon Oct 22 14:51:40 2018 -0700 [color] More CPAL rename diff --git a/src/hb-ot-color-cpal-table.hh b/src/hb-ot-color-cpal-table.hh index 5d23ee8d..abb79ce9 100644 --- a/src/hb-ot-color-cpal-table.hh +++ b/src/hb-ot-color-cpal-table.hh @@ -47,46 +47,49 @@ struct CPALV1Tail { friend struct CPAL; - inline bool - sanitize (hb_sanitize_context_t *c, const void *base, - unsigned int palette_count, unsigned int color_count) const - { - TRACE_SANITIZE (this); - return_trace (c->check_struct (this) && - (base+paletteFlagsZ).sanitize (c, palette_count) && - (base+paletteLabelZ).sanitize (c, palette_count) && - (base+paletteEntryLabelZ).sanitize (c, color_count)); - } - private: inline hb_ot_color_palette_flags_t - get_palette_flags (const void *base, unsigned int palette_index, - unsigned int palettes_count) const + get_palette_flags (const void *base, + unsigned int palette_index, + unsigned int palette_count) const { - if (unlikely (palette_index >= palettes_count)) + if (unlikely (palette_index >= palette_count)) return HB_OT_COLOR_PALETTE_FLAG_DEFAULT; return (hb_ot_color_palette_flags_t) (uint32_t) (base+paletteFlagsZ)[palette_index]; } inline unsigned int - get_palette_name_id (const void *base, unsigned int palette_index, - unsigned int palettes_count) const + get_palette_name_id (const void *base, + unsigned int palette_index, + unsigned int palette_count) const { - if (unlikely (palette_index >= palettes_count)) + if (unlikely (palette_index >= palette_count)) return HB_NAME_ID_INVALID; return (base+paletteLabelZ)[palette_index]; } inline unsigned int - get_palette_entry_name_id (const void *base, unsigned int palette_entry, - unsigned int palettes_entries_count) const + get_color_name_id (const void *base, + unsigned int color_index, + unsigned int color_count) const { - if (unlikely (palette_entry >= palettes_entries_count)) + if (unlikely (color_index >= color_count)) return HB_NAME_ID_INVALID; - return (base+paletteEntryLabelZ)[palette_entry]; + return (base+paletteEntryLabelZ)[color_index]; + } + + public: + inline bool sanitize (hb_sanitize_context_t *c, const void *base, + unsigned int palette_count, unsigned int color_count) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && + (base+paletteFlagsZ).sanitize (c, palette_count) && + (base+paletteLabelZ).sanitize (c, palette_count) && + (base+paletteEntryLabelZ).sanitize (c, color_count)); } protected: @@ -114,31 +117,11 @@ struct CPAL inline bool has_data (void) const { return numPalettes; } - inline bool sanitize (hb_sanitize_context_t *c) const - { - TRACE_SANITIZE (this); - if (unlikely (!(c->check_struct (this) && /* it checks colorRecordIndices also - * See #get_size */ - (this+colorRecordsZ).sanitize (c, numColorRecords)))) - return_trace (false); - - /* Check for indices sanity so no need for doing it runtime */ - for (unsigned int i = 0; i < numPalettes; ++i) - if (unlikely (colorRecordIndicesZ[i] + numColors > numColorRecords)) - return_trace (false); - - /* If version is zero, we are done here; otherwise we need to check tail also */ - if (version == 0) - return_trace (true); - - const CPALV1Tail &v1 = StructAfter<CPALV1Tail> (*this); - return_trace (likely (v1.sanitize (c, this, numPalettes, numColors))); - } - inline unsigned int get_size (void) const - { - return min_size + numPalettes * sizeof (HBUINT16); - } + { return min_size + numPalettes * sizeof (colorRecordIndicesZ[0]); } + + inline unsigned int get_palette_count () const { return numPalettes; } + inline unsigned int get_color_count () const { return numColors; } inline hb_ot_color_palette_flags_t get_palette_flags (unsigned int palette_index) const { @@ -158,21 +141,15 @@ struct CPAL return cpal1.get_palette_name_id (this, palette_index, numPalettes); } - inline unsigned int get_palette_entry_name_id (unsigned int palette_entry) const + inline unsigned int get_color_name_id (unsigned int color_index) const { if (unlikely (version == 0)) return HB_NAME_ID_INVALID; const CPALV1Tail& cpal1 = StructAfter<CPALV1Tail> (*this); - return cpal1.get_palette_entry_name_id (this, palette_entry, numColors); + return cpal1.get_color_name_id (this, color_index, numColors); } - inline unsigned int get_palette_count () const - { return numPalettes; } - - inline unsigned int get_palette_entries_count () const - { return numColors; } - bool get_color_record_argb (unsigned int color_index, unsigned int palette_index, hb_color_t* color) const { @@ -186,6 +163,27 @@ struct CPAL return true; } + inline bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + if (unlikely (!(c->check_struct (this) && /* it checks colorRecordIndices also + * See #get_size */ + (this+colorRecordsZ).sanitize (c, numColorRecords)))) + return_trace (false); + + /* Check for indices sanity so no need for doing it runtime */ + for (unsigned int i = 0; i < numPalettes; ++i) + if (unlikely (colorRecordIndicesZ[i] + numColors > numColorRecords)) + return_trace (false); + + /* If version is zero, we are done here; otherwise we need to check tail also */ + if (version == 0) + return_trace (true); + + const CPALV1Tail &v1 = StructAfter<CPALV1Tail> (*this); + return_trace (likely (v1.sanitize (c, this, numPalettes, numColors))); + } + protected: HBUINT16 version; /* Table version number */ /* Version 0 */ diff --git a/src/hb-ot-color.cc b/src/hb-ot-color.cc index e4052392..3ca8751a 100644 --- a/src/hb-ot-color.cc +++ b/src/hb-ot-color.cc @@ -145,7 +145,7 @@ hb_name_id_t hb_ot_color_palette_color_get_name_id (hb_face_t *face, unsigned int color_index) { - return _get_cpal (face).get_palette_entry_name_id (color_index); + return _get_cpal (face).get_color_name_id (color_index); } /** @@ -208,7 +208,7 @@ hb_ot_color_palette_get_colors (hb_face_t *face, { unsigned int platte_count; platte_count = MIN<unsigned int>(*colors_count, - cpal.get_palette_entries_count () - start_offset); + cpal.get_color_count () - start_offset); for (unsigned int i = 0; i < platte_count; i++) { if (cpal.get_color_record_argb(start_offset + i, palette_index, &colors[num_results])) @@ -217,7 +217,7 @@ hb_ot_color_palette_get_colors (hb_face_t *face, } if (likely (colors_count)) *colors_count = num_results; - return cpal.get_palette_entries_count (); + return cpal.get_color_count (); } commit 0befb06c468aa36f3337b5ef2235f6d69dda8397 Author: Behdad Esfahbod <beh...@behdad.org> Date: Mon Oct 22 14:46:21 2018 -0700 [color] More CPAL rename diff --git a/src/hb-ot-color-cpal-table.hh b/src/hb-ot-color-cpal-table.hh index 6035650f..5d23ee8d 100644 --- a/src/hb-ot-color-cpal-table.hh +++ b/src/hb-ot-color-cpal-table.hh @@ -49,13 +49,13 @@ struct CPALV1Tail inline bool sanitize (hb_sanitize_context_t *c, const void *base, - unsigned int palette_count, unsigned int paletteEntries) const + unsigned int palette_count, unsigned int color_count) const { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && (base+paletteFlagsZ).sanitize (c, palette_count) && (base+paletteLabelZ).sanitize (c, palette_count) && - (base+paletteEntryLabelZ).sanitize (c, paletteEntries)); + (base+paletteEntryLabelZ).sanitize (c, color_count)); } private: @@ -124,7 +124,7 @@ struct CPAL /* Check for indices sanity so no need for doing it runtime */ for (unsigned int i = 0; i < numPalettes; ++i) - if (unlikely (colorRecordIndicesZ[i] + numPaletteEntries > numColorRecords)) + if (unlikely (colorRecordIndicesZ[i] + numColors > numColorRecords)) return_trace (false); /* If version is zero, we are done here; otherwise we need to check tail also */ @@ -132,7 +132,7 @@ struct CPAL return_trace (true); const CPALV1Tail &v1 = StructAfter<CPALV1Tail> (*this); - return_trace (likely (v1.sanitize (c, this, numPalettes, numPaletteEntries))); + return_trace (likely (v1.sanitize (c, this, numPalettes, numColors))); } inline unsigned int get_size (void) const @@ -164,19 +164,19 @@ struct CPAL return HB_NAME_ID_INVALID; const CPALV1Tail& cpal1 = StructAfter<CPALV1Tail> (*this); - return cpal1.get_palette_entry_name_id (this, palette_entry, numPaletteEntries); + return cpal1.get_palette_entry_name_id (this, palette_entry, numColors); } inline unsigned int get_palette_count () const { return numPalettes; } inline unsigned int get_palette_entries_count () const - { return numPaletteEntries; } + { return numColors; } bool get_color_record_argb (unsigned int color_index, unsigned int palette_index, hb_color_t* color) const { - if (unlikely (color_index >= numPaletteEntries || palette_index >= numPalettes)) + if (unlikely (color_index >= numColors || palette_index >= numPalettes)) return false; /* No need for more range check as it is already done on #sanitize */ @@ -189,7 +189,7 @@ struct CPAL protected: HBUINT16 version; /* Table version number */ /* Version 0 */ - HBUINT16 numPaletteEntries; /* Number of palette entries in each palette. */ + HBUINT16 numColors; /* Number of colors in each palette. */ HBUINT16 numPalettes; /* Number of palettes in the table. */ HBUINT16 numColorRecords; /* Total number of color records, combined for * all palettes. */ commit 3600d206037ef23d6448c79a3f010c4f903a971c Author: Behdad Esfahbod <beh...@behdad.org> Date: Mon Oct 22 14:43:12 2018 -0700 [color] Rename vars in CPAL diff --git a/src/hb-ot-color-cpal-table.hh b/src/hb-ot-color-cpal-table.hh index 94c5a3c3..6035650f 100644 --- a/src/hb-ot-color-cpal-table.hh +++ b/src/hb-ot-color-cpal-table.hh @@ -49,34 +49,34 @@ struct CPALV1Tail inline bool sanitize (hb_sanitize_context_t *c, const void *base, - unsigned int palettes, unsigned int paletteEntries) const + unsigned int palette_count, unsigned int paletteEntries) const { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && - (base+paletteFlagsZ).sanitize (c, palettes) && - (base+paletteLabelZ).sanitize (c, palettes) && + (base+paletteFlagsZ).sanitize (c, palette_count) && + (base+paletteLabelZ).sanitize (c, palette_count) && (base+paletteEntryLabelZ).sanitize (c, paletteEntries)); } private: inline hb_ot_color_palette_flags_t - get_palette_flags (const void *base, unsigned int palette, + get_palette_flags (const void *base, unsigned int palette_index, unsigned int palettes_count) const { - if (unlikely (palette >= palettes_count)) + if (unlikely (palette_index >= palettes_count)) return HB_OT_COLOR_PALETTE_FLAG_DEFAULT; - return (hb_ot_color_palette_flags_t) (uint32_t) (base+paletteFlagsZ)[palette]; + return (hb_ot_color_palette_flags_t) (uint32_t) (base+paletteFlagsZ)[palette_index]; } inline unsigned int - get_palette_name_id (const void *base, unsigned int palette, + get_palette_name_id (const void *base, unsigned int palette_index, unsigned int palettes_count) const { - if (unlikely (palette >= palettes_count)) + if (unlikely (palette_index >= palettes_count)) return HB_NAME_ID_INVALID; - return (base+paletteLabelZ)[palette]; + return (base+paletteLabelZ)[palette_index]; } inline unsigned int @@ -140,22 +140,22 @@ struct CPAL return min_size + numPalettes * sizeof (HBUINT16); } - inline hb_ot_color_palette_flags_t get_palette_flags (unsigned int palette) const + inline hb_ot_color_palette_flags_t get_palette_flags (unsigned int palette_index) const { if (unlikely (version == 0)) return HB_OT_COLOR_PALETTE_FLAG_DEFAULT; const CPALV1Tail& cpal1 = StructAfter<CPALV1Tail> (*this); - return cpal1.get_palette_flags (this, palette, numPalettes); + return cpal1.get_palette_flags (this, palette_index, numPalettes); } - inline unsigned int get_palette_name_id (unsigned int palette) const + inline unsigned int get_palette_name_id (unsigned int palette_index) const { if (unlikely (version == 0)) return HB_NAME_ID_INVALID; const CPALV1Tail& cpal1 = StructAfter<CPALV1Tail> (*this); - return cpal1.get_palette_name_id (this, palette, numPalettes); + return cpal1.get_palette_name_id (this, palette_index, numPalettes); } inline unsigned int get_palette_entry_name_id (unsigned int palette_entry) const @@ -174,15 +174,15 @@ struct CPAL { return numPaletteEntries; } bool - get_color_record_argb (unsigned int color_index, unsigned int palette, hb_color_t* color) const + get_color_record_argb (unsigned int color_index, unsigned int palette_index, hb_color_t* color) const { - if (unlikely (color_index >= numPaletteEntries || palette >= numPalettes)) + if (unlikely (color_index >= numPaletteEntries || palette_index >= numPalettes)) return false; /* No need for more range check as it is already done on #sanitize */ const UnsizedArrayOf<BGRAColor>& color_records = this+colorRecordsZ; if (color) - *color = color_records[colorRecordIndicesZ[palette] + color_index]; + *color = color_records[colorRecordIndicesZ[palette_index] + color_index]; return true; } diff --git a/src/hb-ot-color.cc b/src/hb-ot-color.cc index 13094579..e4052392 100644 --- a/src/hb-ot-color.cc +++ b/src/hb-ot-color.cc @@ -77,6 +77,7 @@ _get_svg (hb_face_t *face) } #endif + /* * CPAL */ commit 0babf761c986855f9cdd1a2679380ee6a02390c8 Author: Ebrahim Byagowi <ebra...@gnu.org> Date: Tue Oct 23 01:33:45 2018 +0330 Adopt dump-emoji with latest unreleased APIs changes (#1297) diff --git a/src/dump-emoji.cc b/src/dump-emoji.cc index fdd0b097..2f79fc69 100644 --- a/src/dump-emoji.cc +++ b/src/dump-emoji.cc @@ -95,14 +95,13 @@ colr_cpal_rendering (hb_face_t *face, cairo_font_face_t *cairo_face) unsigned glyph_count = hb_face_get_glyph_count (face); for (hb_codepoint_t gid = 0; gid < glyph_count; ++gid) { - unsigned int num_layers = hb_ot_color_get_color_layers (face, gid, 0, nullptr, nullptr, nullptr); + unsigned int num_layers = hb_ot_color_glyph_get_layers (face, gid, 0, nullptr, nullptr); if (!num_layers) continue; - hb_codepoint_t *layer_gids = (hb_codepoint_t*) calloc (num_layers, sizeof (hb_codepoint_t)); - unsigned int *color_indices = (unsigned int*) calloc (num_layers, sizeof (unsigned int)); + hb_ot_color_layer_t *layers = (hb_ot_color_layer_t*) malloc (num_layers * sizeof (hb_ot_color_layer_t)); - hb_ot_color_get_color_layers (face, gid, 0, &num_layers, layer_gids, color_indices); + hb_ot_color_glyph_get_layers (face, gid, 0, &num_layers, layers); if (num_layers) { // Measure @@ -115,7 +114,7 @@ colr_cpal_rendering (hb_face_t *face, cairo_font_face_t *cairo_face) cairo_glyph_t *glyphs = (cairo_glyph_t *) calloc (num_layers, sizeof (cairo_glyph_t)); for (unsigned int j = 0; j < num_layers; ++j) - glyphs[j].index = layer_gids[j]; + glyphs[j].index = layers[j].glyph; cairo_glyph_extents (cr, glyphs, num_layers, &extents); free (glyphs); cairo_surface_destroy (surface); @@ -129,16 +128,16 @@ colr_cpal_rendering (hb_face_t *face, cairo_font_face_t *cairo_face) extents.y_bearing -= extents.height / 20; // Render - unsigned int palette_count = hb_ot_color_get_palette_count (face); + unsigned int palette_count = hb_ot_color_palette_get_count (face); for (unsigned int palette = 0; palette < palette_count; palette++) { char output_path[255]; - unsigned int num_colors = hb_ot_color_get_palette_colors (face, palette, 0, nullptr, nullptr); + unsigned int num_colors = hb_ot_color_palette_get_colors (face, palette, 0, nullptr, nullptr); if (!num_colors) continue; hb_color_t *colors = (hb_color_t*) calloc (num_colors, sizeof (hb_color_t)); - hb_ot_color_get_palette_colors (face, palette, 0, &num_colors, colors); + hb_ot_color_palette_get_colors (face, palette, 0, &num_colors, colors); if (num_colors) { // If we have more than one palette, use a simpler naming @@ -155,8 +154,8 @@ colr_cpal_rendering (hb_face_t *face, cairo_font_face_t *cairo_face) for (unsigned int layer = 0; layer < num_layers; ++layer) { hb_color_t color = 0x000000FF; - if (color_indices[layer] != 0xFFFF) - color = colors[color_indices[layer]]; + if (layers[layer].color_index != 0xFFFF) + color = colors[layers[layer].color_index]; cairo_set_source_rgba (cr, hb_color_get_red (color) / 255., hb_color_get_green (color) / 255., @@ -164,7 +163,7 @@ colr_cpal_rendering (hb_face_t *face, cairo_font_face_t *cairo_face) hb_color_get_alpha (color) / 255.); cairo_glyph_t glyph; - glyph.index = layer_gids[layer]; + glyph.index = layers[layer].glyph; glyph.x = -extents.x_bearing; glyph.y = -extents.y_bearing; cairo_show_glyphs (cr, &glyph, 1); @@ -177,8 +176,7 @@ colr_cpal_rendering (hb_face_t *face, cairo_font_face_t *cairo_face) } } - free (layer_gids); - free (color_indices); + free (layers); } } _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz