提交 bd18b6ad 编写于 作者: G Garret Rieger

[subset] Move DeviceRecord inside of hdmx.

上级 6704cded
...@@ -34,67 +34,69 @@ namespace OT { ...@@ -34,67 +34,69 @@ namespace OT {
#define HB_OT_TAG_hdmx HB_TAG('h','d','m','x') #define HB_OT_TAG_hdmx HB_TAG('h','d','m','x')
struct DeviceRecord
struct hdmx
{ {
struct SubsetView static const hb_tag_t tableTag = HB_OT_TAG_glyf;
{
const DeviceRecord *source_device_record;
hb_subset_plan_t *subset_plan;
inline void init(const DeviceRecord *source_device_record, struct DeviceRecord
hb_subset_plan_t *subset_plan) {
struct SubsetView
{ {
this->source_device_record = source_device_record; const DeviceRecord *source_device_record;
this->subset_plan = subset_plan; hb_subset_plan_t *subset_plan;
}
inline void init(const DeviceRecord *source_device_record,
inline unsigned int len () const hb_subset_plan_t *subset_plan)
{
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)
{ {
return this->subset_plan->gids_to_retain_sorted.len; 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;
} }
inline const HBUINT8& operator [] (unsigned int i) const inline bool serialize (hb_serialize_context_t *c, const SubsetView &subset_view)
{ {
if (unlikely (i >= len())) return Null(HBUINT8); TRACE_SERIALIZE (this);
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;
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) if (unlikely (!c->allocate_size<DeviceRecord> (get_size (subset_view.len()))))
{ return_trace (false);
TRACE_SERIALIZE (this);
if (unlikely (!c->allocate_size<DeviceRecord> (get_size (subset_view.len()))))
return_trace (false);
this->pixel_size.set (subset_view.source_device_record->pixel_size); this->pixel_size.set (subset_view.source_device_record->pixel_size);
this->max_width.set (subset_view.source_device_record->max_width); this->max_width.set (subset_view.source_device_record->max_width);
for (unsigned int i = 0; i < subset_view.len(); i++) for (unsigned int i = 0; i < subset_view.len(); i++)
widths[i].set (subset_view[i]); widths[i].set (subset_view[i]);
return_trace (true);
}
HBUINT8 pixel_size; return_trace (true);
HBUINT8 max_width; }
HBUINT8 widths[VAR];
DEFINE_SIZE_MIN (2); HBUINT8 pixel_size;
}; HBUINT8 max_width;
HBUINT8 widths[VAR];
struct hdmx DEFINE_SIZE_MIN (2);
{ };
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.
先完成此消息的编辑!
想要评论请 注册