/* * Copyright (c) 2021-2022, Matthew Olsson * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #define ENUMERATE_COLOR_SPACES(V) \ V(DeviceGray) \ V(DeviceRGB) \ V(DeviceCMYK) \ V(CalGray) \ V(CalRGB) \ V(Lab) \ V(ICCBased) \ V(Indexed) \ V(Pattern) \ V(Separation) \ V(DeviceN) namespace PDF { struct Page; class ColorSpace : public RefCounted { public: static PDFErrorOr> create(Document*, FlyString const& name, Page const& page); virtual ~ColorSpace() = default; virtual Color color(Vector const& arguments) const = 0; }; class DeviceGrayColorSpace final : public ColorSpace { public: static NonnullRefPtr the(); ~DeviceGrayColorSpace() override = default; Color color(Vector const& arguments) const override; private: DeviceGrayColorSpace() = default; }; class DeviceRGBColorSpace final : public ColorSpace { public: static NonnullRefPtr the(); ~DeviceRGBColorSpace() override = default; Color color(Vector const& arguments) const override; private: DeviceRGBColorSpace() = default; }; class DeviceCMYKColorSpace final : public ColorSpace { public: static NonnullRefPtr the(); ~DeviceCMYKColorSpace() override = default; Color color(Vector const& arguments) const override; private: DeviceCMYKColorSpace() = default; }; class CalRGBColorSpace final : public ColorSpace { public: static PDFErrorOr> create(Document*, Vector&& parameters); ~CalRGBColorSpace() override = default; Color color(Vector const& arguments) const override; private: CalRGBColorSpace() = default; Array m_whitepoint { 0, 0, 0 }; Array m_blackpoint { 0, 0, 0 }; Array m_gamma { 1, 1, 1 }; Array m_matrix { 1, 0, 0, 0, 1, 0, 0, 0, 1 }; }; class ICCBasedColorSpace final : public ColorSpace { public: static PDFErrorOr> create(Document*, Page const&, Vector&& parameters); ~ICCBasedColorSpace() override = default; Color color(Vector const& arguments) const override; private: ICCBasedColorSpace() = delete; }; }