mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 12:57:34 +00:00
LibGfx/OpenType: Read "maxp" table using a C++ struct
This commit is contained in:
parent
d201acf102
commit
f04a878e55
2 changed files with 30 additions and 6 deletions
|
@ -140,7 +140,7 @@ u16 Hhea::number_of_h_metrics() const
|
||||||
|
|
||||||
Optional<Maxp> Maxp::from_slice(ReadonlyBytes slice)
|
Optional<Maxp> Maxp::from_slice(ReadonlyBytes slice)
|
||||||
{
|
{
|
||||||
if (slice.size() < (size_t)Sizes::TableV0p5) {
|
if (slice.size() < sizeof(MaximumProfileVersion0_5)) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
return Maxp(slice);
|
return Maxp(slice);
|
||||||
|
@ -148,7 +148,7 @@ Optional<Maxp> Maxp::from_slice(ReadonlyBytes slice)
|
||||||
|
|
||||||
u16 Maxp::num_glyphs() const
|
u16 Maxp::num_glyphs() const
|
||||||
{
|
{
|
||||||
return be_u16(m_slice.offset_pointer((u32)Offsets::NumGlyphs));
|
return header().num_glyphs;
|
||||||
}
|
}
|
||||||
|
|
||||||
Optional<Hmtx> Hmtx::from_slice(ReadonlyBytes slice, u32 num_glyphs, u32 number_of_h_metrics)
|
Optional<Hmtx> Hmtx::from_slice(ReadonlyBytes slice, u32 num_glyphs, u32 number_of_h_metrics)
|
||||||
|
|
|
@ -28,6 +28,11 @@ struct LongDateTime {
|
||||||
BigEndian<u64> value;
|
BigEndian<u64> value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct Version16Dot16 {
|
||||||
|
BigEndian<u16> major;
|
||||||
|
BigEndian<u16> minor;
|
||||||
|
};
|
||||||
|
|
||||||
using FWord = BigEndian<i16>;
|
using FWord = BigEndian<i16>;
|
||||||
using UFWord = BigEndian<u16>;
|
using UFWord = BigEndian<u16>;
|
||||||
|
|
||||||
|
@ -122,16 +127,35 @@ private:
|
||||||
class Maxp {
|
class Maxp {
|
||||||
public:
|
public:
|
||||||
static Optional<Maxp> from_slice(ReadonlyBytes);
|
static Optional<Maxp> from_slice(ReadonlyBytes);
|
||||||
|
|
||||||
u16 num_glyphs() const;
|
u16 num_glyphs() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum class Offsets {
|
struct MaximumProfileVersion0_5 {
|
||||||
NumGlyphs = 4
|
Version16Dot16 version;
|
||||||
|
BigEndian<u16> num_glyphs;
|
||||||
};
|
};
|
||||||
enum class Sizes {
|
|
||||||
TableV0p5 = 6,
|
struct MaximumProfileVersion1_0 {
|
||||||
|
Version16Dot16 version;
|
||||||
|
BigEndian<u16> num_glyphs;
|
||||||
|
BigEndian<u16> max_points;
|
||||||
|
BigEndian<u16> max_contours;
|
||||||
|
BigEndian<u16> max_composite_points;
|
||||||
|
BigEndian<u16> max_composite_contours;
|
||||||
|
BigEndian<u16> max_zones;
|
||||||
|
BigEndian<u16> max_twilight_points;
|
||||||
|
BigEndian<u16> max_storage;
|
||||||
|
BigEndian<u16> max_function_defs;
|
||||||
|
BigEndian<u16> max_instruction_defs;
|
||||||
|
BigEndian<u16> max_stack_elements;
|
||||||
|
BigEndian<u16> max_size_of_instructions;
|
||||||
|
BigEndian<u16> max_component_elements;
|
||||||
|
BigEndian<u16> max_component_depths;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
MaximumProfileVersion0_5 const& header() const { return *bit_cast<MaximumProfileVersion0_5 const*>(m_slice.data()); }
|
||||||
|
|
||||||
Maxp(ReadonlyBytes slice)
|
Maxp(ReadonlyBytes slice)
|
||||||
: m_slice(slice)
|
: m_slice(slice)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue