123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /*
- * Copyright (c) 2021-2022, Matthew Olsson <mattco@serenityos.org>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #pragma once
- #include <AK/DeprecatedFlyString.h>
- #include <AK/Forward.h>
- #include <LibGfx/Color.h>
- #include <LibPDF/Value.h>
- #define ENUMERATE_COLOR_SPACE_FAMILIES(V) \
- V(DeviceGray, true) \
- V(DeviceRGB, true) \
- V(DeviceCMYK, true) \
- V(CalGray, false) \
- V(CalRGB, false) \
- V(Lab, false) \
- V(ICCBased, false) \
- V(Indexed, false) \
- V(Pattern, false) \
- V(Separation, false) \
- V(DeviceN, false)
- namespace PDF {
- class ColorSpaceFamily {
- public:
- ColorSpaceFamily(DeprecatedFlyString name, bool never_needs_paramaters_p)
- : m_name(move(name))
- , m_never_needs_parameters(never_needs_paramaters_p)
- {
- }
- DeprecatedFlyString name() const { return m_name; };
- bool never_needs_parameters() const { return m_never_needs_parameters; };
- static PDFErrorOr<ColorSpaceFamily> get(DeprecatedFlyString const&);
- #define ENUMERATE(name, ever_needs_parameters) static ColorSpaceFamily name;
- ENUMERATE_COLOR_SPACE_FAMILIES(ENUMERATE)
- #undef ENUMERATE
- private:
- DeprecatedFlyString m_name;
- bool m_never_needs_parameters;
- };
- class ColorSpace : public RefCounted<ColorSpace> {
- public:
- static PDFErrorOr<NonnullRefPtr<ColorSpace>> create(DeprecatedFlyString const&);
- static PDFErrorOr<NonnullRefPtr<ColorSpace>> create(Document*, NonnullRefPtr<ArrayObject>);
- virtual ~ColorSpace() = default;
- virtual Color color(Vector<Value> const& arguments) const = 0;
- virtual int number_of_components() const = 0;
- virtual Vector<float> default_decode() const = 0;
- virtual ColorSpaceFamily const& family() const = 0;
- };
- class DeviceGrayColorSpace final : public ColorSpace {
- public:
- static NonnullRefPtr<DeviceGrayColorSpace> the();
- ~DeviceGrayColorSpace() override = default;
- Color color(Vector<Value> const& arguments) const override;
- int number_of_components() const override { return 1; }
- Vector<float> default_decode() const override;
- ColorSpaceFamily const& family() const override { return ColorSpaceFamily::DeviceGray; }
- private:
- DeviceGrayColorSpace() = default;
- };
- class DeviceRGBColorSpace final : public ColorSpace {
- public:
- static NonnullRefPtr<DeviceRGBColorSpace> the();
- ~DeviceRGBColorSpace() override = default;
- Color color(Vector<Value> const& arguments) const override;
- int number_of_components() const override { return 3; }
- Vector<float> default_decode() const override;
- ColorSpaceFamily const& family() const override { return ColorSpaceFamily::DeviceRGB; }
- private:
- DeviceRGBColorSpace() = default;
- };
- class DeviceCMYKColorSpace final : public ColorSpace {
- public:
- static NonnullRefPtr<DeviceCMYKColorSpace> the();
- ~DeviceCMYKColorSpace() override = default;
- Color color(Vector<Value> const& arguments) const override;
- int number_of_components() const override { return 4; }
- Vector<float> default_decode() const override;
- ColorSpaceFamily const& family() const override { return ColorSpaceFamily::DeviceCMYK; }
- private:
- DeviceCMYKColorSpace() = default;
- };
- class CalRGBColorSpace final : public ColorSpace {
- public:
- static PDFErrorOr<NonnullRefPtr<CalRGBColorSpace>> create(Document*, Vector<Value>&& parameters);
- ~CalRGBColorSpace() override = default;
- Color color(Vector<Value> const& arguments) const override;
- int number_of_components() const override { return 3; }
- Vector<float> default_decode() const override;
- ColorSpaceFamily const& family() const override { return ColorSpaceFamily::CalRGB; }
- private:
- CalRGBColorSpace() = default;
- Array<float, 3> m_whitepoint { 0, 0, 0 };
- Array<float, 3> m_blackpoint { 0, 0, 0 };
- Array<float, 3> m_gamma { 1, 1, 1 };
- Array<float, 9> m_matrix { 1, 0, 0, 0, 1, 0, 0, 0, 1 };
- };
- class ICCBasedColorSpace final : public ColorSpace {
- public:
- static PDFErrorOr<NonnullRefPtr<ColorSpace>> create(Document*, Vector<Value>&& parameters);
- ~ICCBasedColorSpace() override = default;
- Color color(Vector<Value> const& arguments) const override;
- int number_of_components() const override { VERIFY_NOT_REACHED(); }
- Vector<float> default_decode() const override;
- ColorSpaceFamily const& family() const override { return ColorSpaceFamily::ICCBased; }
- private:
- ICCBasedColorSpace() = delete;
- };
- }
|