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

[hdmx] Touch up

上级 e8ef0e62
...@@ -44,7 +44,8 @@ struct DeviceRecord ...@@ -44,7 +44,8 @@ struct DeviceRecord
static unsigned int get_size (unsigned count) static unsigned int get_size (unsigned count)
{ return hb_ceil_to_4 (min_size + count * HBUINT8::static_size); } { return hb_ceil_to_4 (min_size + count * HBUINT8::static_size); }
template<typename Iterator> template<typename Iterator,
hb_requires (hb_is_iterator (Iterator))>
bool serialize (hb_serialize_context_t *c, unsigned pixelSize, Iterator it) bool serialize (hb_serialize_context_t *c, unsigned pixelSize, Iterator it)
{ {
TRACE_SERIALIZE (this); TRACE_SERIALIZE (this);
...@@ -94,7 +95,8 @@ struct hdmx ...@@ -94,7 +95,8 @@ struct hdmx
return StructAtOffset<DeviceRecord> (&this->firstDeviceRecord, i * sizeDeviceRecord); return StructAtOffset<DeviceRecord> (&this->firstDeviceRecord, i * sizeDeviceRecord);
} }
template<typename Iterator> template<typename Iterator,
hb_requires (hb_is_iterator (Iterator))>
bool serialize (hb_serialize_context_t *c, unsigned version, Iterator it) bool serialize (hb_serialize_context_t *c, unsigned version, Iterator it)
{ {
TRACE_SERIALIZE (this); TRACE_SERIALIZE (this);
...@@ -103,14 +105,13 @@ struct hdmx ...@@ -103,14 +105,13 @@ struct hdmx
this->version = version; this->version = version;
this->numRecords = it.len (); this->numRecords = it.len ();
this->sizeDeviceRecord = this->sizeDeviceRecord = DeviceRecord::get_size (it ? (*it).second.len () : 0);
it ? DeviceRecord::get_size ((*it).second.len ()) : DeviceRecord::get_size (0);
using pair_t = decltype (*it);
+ it + it
| hb_apply ([&] (const pair_t& _) { | hb_apply ([&] (const hb_item_type<Iterator>& _) {
c->start_embed<DeviceRecord> ()->serialize (c, _.first, _.second); c->start_embed<DeviceRecord> ()->serialize (c, _.first, _.second);
}); })
;
return_trace (c->successful); return_trace (c->successful);
} }
...@@ -125,21 +126,24 @@ struct hdmx ...@@ -125,21 +126,24 @@ struct hdmx
auto it = auto it =
+ hb_iota ((unsigned) numRecords) + hb_iota ((unsigned) numRecords)
| hb_map ([&] (unsigned _) { | hb_map ([&] (unsigned _)
{
const DeviceRecord *device_record = const DeviceRecord *device_record =
&StructAtOffset<DeviceRecord> (&firstDeviceRecord, &StructAtOffset<DeviceRecord> (&firstDeviceRecord,
_ * sizeDeviceRecord); _ * sizeDeviceRecord);
auto row = auto row =
+ hb_iota (c->plan->num_output_glyphs ()) + hb_iota (c->plan->num_output_glyphs ())
| hb_map (c->plan->reverse_glyph_map) | hb_map (c->plan->reverse_glyph_map)
| hb_map ([=] (hb_codepoint_t _) { | hb_map ([=] (hb_codepoint_t _)
{
if (c->plan->is_empty_glyph (_)) if (c->plan->is_empty_glyph (_))
return Null(HBUINT8); return Null(HBUINT8);
return device_record->widthsZ.as_array (get_num_glyphs ()) [_]; return device_record->widthsZ.as_array (get_num_glyphs ()) [_];
}) })
; ;
return hb_pair ((unsigned) device_record->pixelSize, +row); return hb_pair ((unsigned) device_record->pixelSize, +row);
}); })
;
hdmx_prime->serialize (c->serializer, version, it); hdmx_prime->serialize (c->serializer, version, it);
return_trace (true); return_trace (true);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册