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 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 {