浏览代码

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 年之前
父节点
当前提交
01387eb72b
共有 2 个文件被更改,包括 17 次插入11 次删除
  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 {