diff --git a/Userland/Libraries/LibGfx/BMPWriter.cpp b/Userland/Libraries/LibGfx/BMPWriter.cpp index 2849fe00ba..ed320ac7b1 100644 --- a/Userland/Libraries/LibGfx/BMPWriter.cpp +++ b/Userland/Libraries/LibGfx/BMPWriter.cpp @@ -78,17 +78,18 @@ ByteBuffer BMPWriter::compress_pixel_data(ByteBuffer const& pixel_data, BMPWrite VERIFY_NOT_REACHED(); } -ByteBuffer BMPWriter::dump(RefPtr bitmap, DibHeader dib_header) +ByteBuffer BMPWriter::dump(RefPtr bitmap, Options options) { + Options::DibHeader dib_header = options.dib_header; switch (dib_header) { - case DibHeader::Info: + case Options::DibHeader::Info: m_compression = Compression::BI_RGB; m_bytes_per_pixel = 3; m_include_alpha_channel = false; break; - case DibHeader::V3: - case DibHeader::V4: + case Options::DibHeader::V3: + case Options::DibHeader::V4: m_compression = Compression::BI_BITFIELDS; m_bytes_per_pixel = 4; m_include_alpha_channel = true; @@ -128,14 +129,14 @@ ByteBuffer BMPWriter::dump(RefPtr bitmap, DibHeader dib_header) streamer.write_u32(0); // TotalColors streamer.write_u32(0); // ImportantColors - if (dib_header == DibHeader::V3 || dib_header == DibHeader::V4) { + if (dib_header == Options::DibHeader::V3 || dib_header == Options::DibHeader::V4) { streamer.write_u32(0x00ff0000); // Red bitmask streamer.write_u32(0x0000ff00); // Green bitmask streamer.write_u32(0x000000ff); // Blue bitmask streamer.write_u32(0xff000000); // Alpha bitmask } - if (dib_header == DibHeader::V4) { + if (dib_header == Options::DibHeader::V4) { streamer.write_u32(0); // Colorspace for (int i = 0; i < 12; i++) { diff --git a/Userland/Libraries/LibGfx/BMPWriter.h b/Userland/Libraries/LibGfx/BMPWriter.h index d9b93f1806..723e6ee7ed 100644 --- a/Userland/Libraries/LibGfx/BMPWriter.h +++ b/Userland/Libraries/LibGfx/BMPWriter.h @@ -12,17 +12,22 @@ namespace Gfx { class Bitmap; -class BMPWriter { -public: - BMPWriter() = default; - +// This is not a nested struct to work around https://llvm.org/PR36684 +struct BMPWriterOptions { enum class DibHeader : u32 { Info = 40, V3 = 56, V4 = 108, }; + DibHeader dib_header = DibHeader::V4; +}; - ByteBuffer dump(RefPtr, DibHeader dib_header = DibHeader::V4); +class BMPWriter { +public: + using Options = BMPWriterOptions; + BMPWriter() = default; + + ByteBuffer dump(RefPtr, Options options = Options {}); private: enum class Compression : u32 {