From ddd580c30fee0a779c9e173fb11fbb19f7192723 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 10 Feb 2019 11:45:02 +0100 Subject: [PATCH] SharedGraphics: Tighten clip when blitting without alpha. Also don't try to clean up the Painter's window backing store in ~Painter() if we don't actually have a window backing store. --- SharedGraphics/Painter.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/SharedGraphics/Painter.cpp b/SharedGraphics/Painter.cpp index dde6846508..7d71edf03c 100644 --- a/SharedGraphics/Painter.cpp +++ b/SharedGraphics/Painter.cpp @@ -9,6 +9,8 @@ #include #include #include +#include +#include #endif #define DEBUG_WIDGET_UNDERDRAW @@ -28,9 +30,10 @@ Painter::Painter(GWidget& widget) int rc = gui_get_window_backing_store(widget.window()->window_id(), &backing); if (rc < 0) { perror("gui_get_window_backing_store"); - exit(1); + ASSERT_NOT_REACHED(); } m_backing_store_id = backing.backing_store_id; + m_target = GraphicsBitmap::create_wrapper(backing.size, backing.pixels); ASSERT(m_target); m_window = widget.window(); @@ -51,8 +54,13 @@ Painter::~Painter() { #ifdef USERLAND m_target = nullptr; - int rc = gui_release_window_backing_store(m_backing_store_id); - ASSERT(rc == 0); + if (m_backing_store_id) { + int rc = gui_release_window_backing_store(m_backing_store_id); + if (rc < 0) { + perror("gui_release_window_backing_store"); + ASSERT_NOT_REACHED(); + } + } #endif } @@ -281,7 +289,7 @@ void Painter::blit(const Point& position, const GraphicsBitmap& source, const Re const unsigned src_skip = source.width(); for (int row = first_row; row <= last_row; ++row) { - fast_dword_copy(dst, src, dst_rect.width()); + fast_dword_copy(dst, src, clipped_rect.width()); dst += dst_skip; src += src_skip; }