瀏覽代碼

LibGfx: add Bitmap::clone() method

Peter Nelson 4 年之前
父節點
當前提交
16ebbde26f
共有 2 個文件被更改,包括 21 次插入0 次删除
  1. 19 0
      Libraries/LibGfx/Bitmap.cpp
  2. 2 0
      Libraries/LibGfx/Bitmap.h

+ 19 - 0
Libraries/LibGfx/Bitmap.cpp

@@ -182,6 +182,25 @@ Bitmap::Bitmap(BitmapFormat format, NonnullRefPtr<SharedBuffer>&& shared_buffer,
         allocate_palette_from_format(m_format, palette);
 }
 
+RefPtr<Gfx::Bitmap> Bitmap::clone() const
+{
+    RefPtr<Gfx::Bitmap> new_bitmap {};
+    if (m_purgeable) {
+        new_bitmap = Bitmap::create_purgeable(format(), size());
+    } else {
+        new_bitmap = Bitmap::create(format(), size());
+    }
+
+    if (!new_bitmap) {
+        return nullptr;
+    }
+
+    ASSERT(size_in_bytes() == new_bitmap->size_in_bytes());
+    memcpy(new_bitmap->scanline(0), scanline(0), size_in_bytes());
+
+    return new_bitmap;
+}
+
 RefPtr<Gfx::Bitmap> Bitmap::rotated(Gfx::RotationDirection rotation_direction) const
 {
     auto w = this->width();

+ 2 - 0
Libraries/LibGfx/Bitmap.h

@@ -103,6 +103,8 @@ public:
         return false;
     }
 
+    RefPtr<Gfx::Bitmap> clone() const;
+
     RefPtr<Gfx::Bitmap> rotated(Gfx::RotationDirection) const;
     RefPtr<Gfx::Bitmap> flipped(Gfx::Orientation) const;
     RefPtr<Bitmap> to_bitmap_backed_by_shared_buffer() const;