[hmtx/port] Use hb_blob_ptr_t
This commit is contained in:
parent
0e2680a6e8
commit
bb9abb4efd
|
@ -113,7 +113,7 @@ struct hmtxvmtx
|
||||||
DEBUG_MSG(SUBSET, nullptr, "%c%c%c%c in src has %d advances, %d lsbs", HB_UNTAG(T::tableTag), _mtx.num_advances, _mtx.num_metrics - _mtx.num_advances);
|
DEBUG_MSG(SUBSET, nullptr, "%c%c%c%c in src has %d advances, %d lsbs", HB_UNTAG(T::tableTag), _mtx.num_advances, _mtx.num_metrics - _mtx.num_advances);
|
||||||
DEBUG_MSG(SUBSET, nullptr, "%c%c%c%c in dest has %d advances, %d lsbs, %u bytes", HB_UNTAG(T::tableTag), num_advances, gids.len - num_advances, (unsigned int) dest_sz);
|
DEBUG_MSG(SUBSET, nullptr, "%c%c%c%c in dest has %d advances, %d lsbs, %u bytes", HB_UNTAG(T::tableTag), num_advances, gids.len - num_advances, (unsigned int) dest_sz);
|
||||||
|
|
||||||
const char *source_table = hb_blob_get_data (_mtx.blob, nullptr);
|
const char *source_table = hb_blob_get_data (_mtx.table.get_blob (), nullptr);
|
||||||
// Copy everything over
|
// Copy everything over
|
||||||
LongMetric * old_metrics = (LongMetric *) source_table;
|
LongMetric * old_metrics = (LongMetric *) source_table;
|
||||||
FWORD *lsbs = (FWORD *) (old_metrics + _mtx.num_advances);
|
FWORD *lsbs = (FWORD *) (old_metrics + _mtx.num_advances);
|
||||||
|
@ -221,10 +221,10 @@ struct hmtxvmtx
|
||||||
|
|
||||||
has_font_extents = got_font_extents;
|
has_font_extents = got_font_extents;
|
||||||
|
|
||||||
blob = hb_sanitize_context_t().reference_table<hmtxvmtx> (face, T::tableTag);
|
table = hb_sanitize_context_t().reference_table<hmtxvmtx> (face, T::tableTag);
|
||||||
|
|
||||||
/* Cap num_metrics() and num_advances() based on table length. */
|
/* Cap num_metrics() and num_advances() based on table length. */
|
||||||
unsigned int len = hb_blob_get_length (blob);
|
unsigned int len = table.get_length ();
|
||||||
if (unlikely (num_advances * 4 > len))
|
if (unlikely (num_advances * 4 > len))
|
||||||
num_advances = len / 4;
|
num_advances = len / 4;
|
||||||
num_metrics = num_advances + (len - 4 * num_advances) / 2;
|
num_metrics = num_advances + (len - 4 * num_advances) / 2;
|
||||||
|
@ -234,19 +234,17 @@ struct hmtxvmtx
|
||||||
if (unlikely (!num_advances))
|
if (unlikely (!num_advances))
|
||||||
{
|
{
|
||||||
num_metrics = num_advances = 0;
|
num_metrics = num_advances = 0;
|
||||||
hb_blob_destroy (blob);
|
hb_blob_destroy (table.get_blob ());
|
||||||
blob = hb_blob_get_empty ();
|
table = hb_blob_get_empty ();
|
||||||
}
|
}
|
||||||
table = blob->as<hmtxvmtx> ();
|
|
||||||
|
|
||||||
var_blob = hb_sanitize_context_t().reference_table<HVARVVAR> (face, T::variationsTag);
|
var_table = hb_sanitize_context_t().reference_table<HVARVVAR> (face, T::variationsTag);
|
||||||
var_table = var_blob->as<HVARVVAR> ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void fini (void)
|
inline void fini (void)
|
||||||
{
|
{
|
||||||
hb_blob_destroy (blob);
|
hb_blob_destroy (table.get_blob ());
|
||||||
hb_blob_destroy (var_blob);
|
hb_blob_destroy (var_table.get_blob ());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO Add variations version. */
|
/* TODO Add variations version. */
|
||||||
|
@ -301,10 +299,8 @@ struct hmtxvmtx
|
||||||
unsigned int default_advance;
|
unsigned int default_advance;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const hmtxvmtx *table;
|
hb_blob_ptr_t<hmtxvmtx> table;
|
||||||
hb_blob_t *blob;
|
hb_blob_ptr_t<HVARVVAR> var_table;
|
||||||
const HVARVVAR *var_table;
|
|
||||||
hb_blob_t *var_blob;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -101,9 +101,8 @@ struct post
|
||||||
{
|
{
|
||||||
index_to_offset.init ();
|
index_to_offset.init ();
|
||||||
|
|
||||||
blob = hb_sanitize_context_t().reference_table<post> (face);
|
table = hb_sanitize_context_t().reference_table<post> (face);
|
||||||
const post *table = blob->as<post> ();
|
unsigned int table_length = table.get_length ();
|
||||||
unsigned int table_length = blob->length;
|
|
||||||
|
|
||||||
version = table->version.to_int ();
|
version = table->version.to_int ();
|
||||||
if (version != 0x00020000)
|
if (version != 0x00020000)
|
||||||
|
@ -114,7 +113,7 @@ struct post
|
||||||
glyphNameIndex = &v2.glyphNameIndex;
|
glyphNameIndex = &v2.glyphNameIndex;
|
||||||
pool = &StructAfter<uint8_t> (v2.glyphNameIndex);
|
pool = &StructAfter<uint8_t> (v2.glyphNameIndex);
|
||||||
|
|
||||||
const uint8_t *end = (uint8_t *) table + table_length;
|
const uint8_t *end = (const uint8_t *) (const void *) table + table_length;
|
||||||
for (const uint8_t *data = pool;
|
for (const uint8_t *data = pool;
|
||||||
index_to_offset.len < 65535 && data < end && data + *data < end;
|
index_to_offset.len < 65535 && data < end && data + *data < end;
|
||||||
data += 1 + *data)
|
data += 1 + *data)
|
||||||
|
@ -124,7 +123,7 @@ struct post
|
||||||
{
|
{
|
||||||
index_to_offset.fini ();
|
index_to_offset.fini ();
|
||||||
free (gids_sorted_by_name.get ());
|
free (gids_sorted_by_name.get ());
|
||||||
hb_blob_destroy (blob);
|
hb_blob_destroy (table.get_blob ());
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool get_glyph_name (hb_codepoint_t glyph,
|
inline bool get_glyph_name (hb_codepoint_t glyph,
|
||||||
|
@ -244,7 +243,7 @@ struct post
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
hb_blob_t *blob;
|
hb_blob_ptr_t<post> table;
|
||||||
uint32_t version;
|
uint32_t version;
|
||||||
const ArrayOf<HBUINT16> *glyphNameIndex;
|
const ArrayOf<HBUINT16> *glyphNameIndex;
|
||||||
hb_vector_t<uint32_t, 1> index_to_offset;
|
hb_vector_t<uint32_t, 1> index_to_offset;
|
||||||
|
|
Loading…
Reference in New Issue