Преглед изворни кода

LibGfx: Add Gfx::Bitmap::create_shareable(format, size)

This helper allocates a shbuf and returns it wrapped in a Bitmap.
Andreas Kling пре 4 година
родитељ
комит
0bc8d58c3b
2 измењених фајлова са 14 додато и 0 уклоњено
  1. 13 0
      Libraries/LibGfx/Bitmap.cpp
  2. 1 0
      Libraries/LibGfx/Bitmap.h

+ 13 - 0
Libraries/LibGfx/Bitmap.cpp

@@ -98,6 +98,19 @@ RefPtr<Bitmap> Bitmap::create_purgeable(BitmapFormat format, const IntSize& size
     return adopt(*new Bitmap(format, size, Purgeable::Yes, backing_store.value()));
 }
 
+RefPtr<Bitmap> Bitmap::create_shareable(BitmapFormat format, const IntSize& size)
+{
+    if (size_would_overflow(format, size))
+        return nullptr;
+
+    const auto pitch = minimum_pitch(size.width(), format);
+    const auto data_size = size_in_bytes(pitch, size.height());
+    auto shared_buffer = SharedBuffer::create_with_size(data_size);
+    if (!shared_buffer)
+        return nullptr;
+    return adopt(*new Bitmap(format, shared_buffer.release_nonnull(), size, Vector<RGBA32>()));
+}
+
 Bitmap::Bitmap(BitmapFormat format, const IntSize& size, Purgeable purgeable, const BackingStore& backing_store)
     : m_size(size)
     , m_data(backing_store.data)

+ 1 - 0
Libraries/LibGfx/Bitmap.h

@@ -89,6 +89,7 @@ enum RotationDirection {
 class Bitmap : public RefCounted<Bitmap> {
 public:
     static RefPtr<Bitmap> create(BitmapFormat, const IntSize&);
+    static RefPtr<Bitmap> create_shareable(BitmapFormat, const IntSize&);
     static RefPtr<Bitmap> create_purgeable(BitmapFormat, const IntSize&);
     static RefPtr<Bitmap> create_wrapper(BitmapFormat, const IntSize&, size_t pitch, void*);
     static RefPtr<Bitmap> load_from_file(const StringView& path);