LibGfx: Introduce ICC::Profile::create

This can be used to programmatically create ICC::Profile objects.
This commit is contained in:
Nico Weber 2023-02-27 08:37:05 -05:00 committed by Linus Groh
parent 130a84d830
commit 8f415e7b21
2 changed files with 13 additions and 7 deletions

View file

@ -1316,7 +1316,12 @@ ErrorOr<NonnullRefPtr<Profile>> Profile::try_load_from_externally_owned_memory(R
bytes = bytes.trim(header.on_disk_size);
auto tag_table = TRY(read_tag_table(bytes));
auto profile = TRY(try_make_ref_counted<Profile>(header, move(tag_table)));
return create(header, move(tag_table));
}
ErrorOr<NonnullRefPtr<Profile>> Profile::create(ProfileHeader const& header, OrderedHashMap<TagSignature, NonnullRefPtr<TagData>> tag_table)
{
auto profile = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) Profile(header, move(tag_table))));
TRY(profile->check_required_tags());
TRY(profile->check_tag_types());

View file

@ -211,12 +211,7 @@ struct ProfileHeader {
class Profile : public RefCounted<Profile> {
public:
static ErrorOr<NonnullRefPtr<Profile>> try_load_from_externally_owned_memory(ReadonlyBytes);
Profile(ProfileHeader const& header, OrderedHashMap<TagSignature, NonnullRefPtr<TagData>> tag_table)
: m_header(header)
, m_tag_table(move(tag_table))
{
}
static ErrorOr<NonnullRefPtr<Profile>> create(ProfileHeader const& header, OrderedHashMap<TagSignature, NonnullRefPtr<TagData>> tag_table);
Optional<PreferredCMMType> preferred_cmm_type() const { return m_header.preferred_cmm_type; }
Version version() const { return m_header.version; }
@ -262,6 +257,12 @@ public:
bool is_v4() const { return version().major_version() == 4; }
private:
Profile(ProfileHeader const& header, OrderedHashMap<TagSignature, NonnullRefPtr<TagData>> tag_table)
: m_header(header)
, m_tag_table(move(tag_table))
{
}
ErrorOr<void> check_required_tags();
ErrorOr<void> check_tag_types();