diff --git a/Userland/Applications/PixelPaint/Layer.cpp b/Userland/Applications/PixelPaint/Layer.cpp index 875bdc58aa..5d63541740 100644 --- a/Userland/Applications/PixelPaint/Layer.cpp +++ b/Userland/Applications/PixelPaint/Layer.cpp @@ -153,10 +153,16 @@ void Layer::update_cached_bitmap() if (!is_masked()) { if (m_content_bitmap.ptr() == m_cached_display_bitmap.ptr()) return; - m_cached_display_bitmap = m_content_bitmap; return; } } +void Layer::create_mask() +{ + m_mask_bitmap = MUST(Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, size())); + m_mask_bitmap->fill(Gfx::Color::White); + update_cached_bitmap(); +} + } diff --git a/Userland/Applications/PixelPaint/Layer.h b/Userland/Applications/PixelPaint/Layer.h index 41a606a15d..613408ac76 100644 --- a/Userland/Applications/PixelPaint/Layer.h +++ b/Userland/Applications/PixelPaint/Layer.h @@ -40,6 +40,11 @@ public: Gfx::Bitmap const& content_bitmap() const { return m_content_bitmap; } Gfx::Bitmap& content_bitmap() { return m_content_bitmap; } + Gfx::Bitmap const* mask_bitmap() const { return m_mask_bitmap; } + Gfx::Bitmap* mask_bitmap() { return m_mask_bitmap; } + + void create_mask(); + Gfx::IntSize size() const { return content_bitmap().size(); } Gfx::IntRect relative_rect() const { return { location(), size() }; } @@ -67,6 +72,8 @@ public: void erase_selection(Selection const&); + bool is_masked() { return !m_mask_bitmap.is_null(); } + private: Layer(Image&, NonnullRefPtr, String name); @@ -75,6 +82,7 @@ private: String m_name; Gfx::IntPoint m_location; NonnullRefPtr m_content_bitmap; + RefPtr m_mask_bitmap { nullptr }; NonnullRefPtr m_cached_display_bitmap; bool m_selected { false };