From 01387eb72b63e30b6a39249ad819e2ba98e6b82d Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Sun, 12 Mar 2023 10:24:30 -0400 Subject: [PATCH] LibGfx: Change second argument of BMPWriter::dump() to Options struct This makes it more economical to add more options here, and makes it possible to use similar API surface for the other image writers. (It looks like nothing currently uses this optional parameter, but having a way to pass options to image writers seems like something we generally want.) --- Userland/Libraries/LibGfx/BMPWriter.cpp | 13 +++++++------ Userland/Libraries/LibGfx/BMPWriter.h | 15 ++++++++++----- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Userland/Libraries/LibGfx/BMPWriter.cpp b/Userland/Libraries/LibGfx/BMPWriter.cpp index 2849fe00ba5..ed320ac7b1e 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 d9b93f18060..723e6ee7ed0 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 {