Browse Source

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.)
Nico Weber 2 years ago
parent
commit
01387eb72b
2 changed files with 17 additions and 11 deletions
  1. 7 6
      Userland/Libraries/LibGfx/BMPWriter.cpp
  2. 10 5
      Userland/Libraries/LibGfx/BMPWriter.h

+ 7 - 6
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 const> bitmap, DibHeader dib_header)
+ByteBuffer BMPWriter::dump(RefPtr<Bitmap const> 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 const> 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++) {

+ 10 - 5
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;
+};
+
+class BMPWriter {
+public:
+    using Options = BMPWriterOptions;
+    BMPWriter() = default;
 
-    ByteBuffer dump(RefPtr<Bitmap const>, DibHeader dib_header = DibHeader::V4);
+    ByteBuffer dump(RefPtr<Bitmap const>, Options options = Options {});
 
 private:
     enum class Compression : u32 {