diff --git a/Libraries/LibDraw/GraphicsBitmap.cpp b/Libraries/LibDraw/GraphicsBitmap.cpp index 354c94eb66..77fad40f25 100644 --- a/Libraries/LibDraw/GraphicsBitmap.cpp +++ b/Libraries/LibDraw/GraphicsBitmap.cpp @@ -24,9 +24,9 @@ GraphicsBitmap::GraphicsBitmap(Format format, const Size& size) m_needs_munmap = true; } -NonnullRefPtr GraphicsBitmap::create_wrapper(Format format, const Size& size, RGBA32* data) +NonnullRefPtr GraphicsBitmap::create_wrapper(Format format, const Size& size, size_t pitch, RGBA32* data) { - return adopt(*new GraphicsBitmap(format, size, data)); + return adopt(*new GraphicsBitmap(format, size, pitch, data)); } RefPtr GraphicsBitmap::load_from_file(const StringView& path) @@ -42,10 +42,10 @@ RefPtr GraphicsBitmap::load_from_file(Format format, const Strin return adopt(*new GraphicsBitmap(format, size, move(mapped_file))); } -GraphicsBitmap::GraphicsBitmap(Format format, const Size& size, RGBA32* data) +GraphicsBitmap::GraphicsBitmap(Format format, const Size& size, size_t pitch, RGBA32* data) : m_size(size) , m_data(data) - , m_pitch(round_up_to_power_of_two(size.width() * sizeof(RGBA32), 16)) + , m_pitch(pitch) , m_format(format) { ASSERT(format != Format::Indexed8); diff --git a/Libraries/LibDraw/GraphicsBitmap.h b/Libraries/LibDraw/GraphicsBitmap.h index cfd056390a..b126597871 100644 --- a/Libraries/LibDraw/GraphicsBitmap.h +++ b/Libraries/LibDraw/GraphicsBitmap.h @@ -20,7 +20,7 @@ public: }; static NonnullRefPtr create(Format, const Size&); - static NonnullRefPtr create_wrapper(Format, const Size&, RGBA32*); + static NonnullRefPtr create_wrapper(Format, const Size&, size_t pitch, RGBA32*); static RefPtr load_from_file(const StringView& path); static RefPtr load_from_file(Format, const StringView& path, const Size&); static NonnullRefPtr create_with_shared_buffer(Format, NonnullRefPtr&&, const Size&); @@ -94,7 +94,7 @@ public: private: GraphicsBitmap(Format, const Size&); - GraphicsBitmap(Format, const Size&, RGBA32*); + GraphicsBitmap(Format, const Size&, size_t pitch, RGBA32*); GraphicsBitmap(Format, const Size&, MappedFile&&); GraphicsBitmap(Format, NonnullRefPtr&&, const Size&); diff --git a/Servers/WindowServer/WSCompositor.cpp b/Servers/WindowServer/WSCompositor.cpp index f1221f5c1a..9bd01cda7c 100644 --- a/Servers/WindowServer/WSCompositor.cpp +++ b/Servers/WindowServer/WSCompositor.cpp @@ -60,12 +60,15 @@ WSCompositor::WSCompositor() void WSCompositor::init_bitmaps() { - auto size = WSScreen::the().size(); + auto& screen = WSScreen::the(); + auto size = screen.size(); - m_front_bitmap = GraphicsBitmap::create_wrapper(GraphicsBitmap::Format::RGB32, size, WSScreen::the().scanline(0)); + m_front_bitmap = GraphicsBitmap::create_wrapper(GraphicsBitmap::Format::RGB32, size, screen.pitch(), screen.scanline(0)); + + ASSERT(m_screen_can_set_buffer); if (m_screen_can_set_buffer) - m_back_bitmap = GraphicsBitmap::create_wrapper(GraphicsBitmap::Format::RGB32, size, WSScreen::the().scanline(size.height())); + m_back_bitmap = GraphicsBitmap::create_wrapper(GraphicsBitmap::Format::RGB32, size, screen.pitch(), screen.scanline(size.height())); else m_back_bitmap = GraphicsBitmap::create(GraphicsBitmap::Format::RGB32, size); diff --git a/Servers/WindowServer/WSScreen.h b/Servers/WindowServer/WSScreen.h index e5ff7451f4..b2bacfaf42 100644 --- a/Servers/WindowServer/WSScreen.h +++ b/Servers/WindowServer/WSScreen.h @@ -16,6 +16,7 @@ public: int width() const { return m_width; } int height() const { return m_height; } + size_t pitch() const { return m_pitch; } RGBA32* scanline(int y); static WSScreen& the();