提交 cf7a6e52 编写于 作者: B Behdad Esfahbod

[hdmx] Move DeviceRecord to toplevel again

More readable.
上级 96d7805a
...@@ -31,80 +31,82 @@ ...@@ -31,80 +31,82 @@
namespace OT { namespace OT {
/* /*
* hdmx - Horizontal Device Metric * hdmx - Horizontal Device Metric
*/ */
#define HB_OT_TAG_hdmx HB_TAG('h','d','m','x') #define HB_OT_TAG_hdmx HB_TAG('h','d','m','x')
struct hdmx struct DeviceRecord
{ {
static const hb_tag_t tableTag = HB_OT_TAG_hdmx; struct SubsetView
struct DeviceRecord
{ {
struct SubsetView const DeviceRecord *source_device_record;
hb_subset_plan_t *subset_plan;
inline void init(const DeviceRecord *source_device_record,
hb_subset_plan_t *subset_plan)
{ {
const DeviceRecord *source_device_record; this->source_device_record = source_device_record;
hb_subset_plan_t *subset_plan; this->subset_plan = subset_plan;
}
inline void init(const DeviceRecord *source_device_record,
hb_subset_plan_t *subset_plan) inline unsigned int len () const
{
this->source_device_record = source_device_record;
this->subset_plan = subset_plan;
}
inline unsigned int len () const
{
return this->subset_plan->gids_to_retain_sorted.len;
}
inline const HBUINT8& operator [] (unsigned int i) const
{
if (unlikely (i >= len())) return Null(HBUINT8);
hb_codepoint_t gid = this->subset_plan->gids_to_retain_sorted [i];
return this->source_device_record->widths[gid];
}
};
static inline unsigned int get_size (unsigned int count)
{ {
unsigned int raw_size = min_size + count * HBUINT8::static_size; return this->subset_plan->gids_to_retain_sorted.len;
if (raw_size % 4)
/* Align to 32 bits */
return raw_size + (4 - (raw_size % 4));
return raw_size;
} }
inline bool serialize (hb_serialize_context_t *c, const SubsetView &subset_view) inline const HBUINT8& operator [] (unsigned int i) const
{ {
TRACE_SERIALIZE (this); if (unlikely (i >= len())) return Null(HBUINT8);
hb_codepoint_t gid = this->subset_plan->gids_to_retain_sorted [i];
return this->source_device_record->widths[gid];
}
};
if (unlikely (!c->allocate_size<DeviceRecord> (get_size (subset_view.len())))) static inline unsigned int get_size (unsigned int count)
return_trace (false); {
unsigned int raw_size = min_size + count * HBUINT8::static_size;
if (raw_size % 4)
/* Align to 32 bits */
return raw_size + (4 - (raw_size % 4));
return raw_size;
}
this->pixel_size.set (subset_view.source_device_record->pixel_size); inline bool serialize (hb_serialize_context_t *c, const SubsetView &subset_view)
this->max_width.set (subset_view.source_device_record->max_width); {
TRACE_SERIALIZE (this);
for (unsigned int i = 0; i < subset_view.len(); i++) if (unlikely (!c->allocate_size<DeviceRecord> (get_size (subset_view.len()))))
widths[i].set (subset_view[i]); return_trace (false);
return_trace (true); this->pixel_size.set (subset_view.source_device_record->pixel_size);
} this->max_width.set (subset_view.source_device_record->max_width);
inline bool sanitize (hb_sanitize_context_t *c, unsigned int size_device_record) const for (unsigned int i = 0; i < subset_view.len(); i++)
{ widths[i].set (subset_view[i]);
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this)
&& c->check_range (this, size_device_record)));
}
HBUINT8 pixel_size; /* Pixel size for following widths (as ppem). */ return_trace (true);
HBUINT8 max_width; /* Maximum width. */ }
HBUINT8 widths[VAR]; /* Array of widths (numGlyphs is from the 'maxp' table). */
DEFINE_SIZE_MIN (2); inline bool sanitize (hb_sanitize_context_t *c, unsigned int size_device_record) const
}; {
TRACE_SANITIZE (this);
return_trace (likely (c->check_struct (this) &&
c->check_range (this, size_device_record)));
}
HBUINT8 pixel_size; /* Pixel size for following widths (as ppem). */
HBUINT8 max_width; /* Maximum width. */
HBUINT8 widths[VAR]; /* Array of widths (numGlyphs is from the 'maxp' table). */
DEFINE_SIZE_MIN (2);
};
struct hdmx
{
static const hb_tag_t tableTag = HB_OT_TAG_hdmx;
inline unsigned int get_size (void) const inline unsigned int get_size (void) const
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册