summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
authorNico Weber <thakis@chromium.org>2023-02-27 08:37:05 -0500
committerLinus Groh <mail@linusgroh.de>2023-03-04 21:38:47 +0000
commit8f415e7b219b2527c3d9493ee12ebe8adeadc1fa (patch)
tree3a74138a7ee79651546172d16b10ed72ba9d1f76 /Userland/Libraries
parent130a84d8300a34fc155ded24272e0a5fba292d4d (diff)
downloadserenity-8f415e7b219b2527c3d9493ee12ebe8adeadc1fa.zip
LibGfx: Introduce ICC::Profile::create
This can be used to programmatically create ICC::Profile objects.
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibGfx/ICC/Profile.cpp7
-rw-r--r--Userland/Libraries/LibGfx/ICC/Profile.h13
2 files changed, 13 insertions, 7 deletions
diff --git a/Userland/Libraries/LibGfx/ICC/Profile.cpp b/Userland/Libraries/LibGfx/ICC/Profile.cpp
index f0afe9c7b9..1f13d43e43 100644
--- a/Userland/Libraries/LibGfx/ICC/Profile.cpp
+++ b/Userland/Libraries/LibGfx/ICC/Profile.cpp
@@ -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());
diff --git a/Userland/Libraries/LibGfx/ICC/Profile.h b/Userland/Libraries/LibGfx/ICC/Profile.h
index f4ddc6e4cc..709fd97423 100644
--- a/Userland/Libraries/LibGfx/ICC/Profile.h
+++ b/Userland/Libraries/LibGfx/ICC/Profile.h
@@ -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();