From efb2bed5250755556df57a6a0a95313e1022fbaf Mon Sep 17 00:00:00 2001 From: MacDue Date: Thu, 26 Jan 2023 20:40:10 +0000 Subject: [PATCH] PixelPaint: Fix off-by-one in on_second_paint() clip rect Previously the clip rect did not include the 1px border at the edges of the rulers. --- Userland/Applications/PixelPaint/ImageEditor.cpp | 16 +++++++++++----- Userland/Applications/PixelPaint/ImageEditor.h | 2 ++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Userland/Applications/PixelPaint/ImageEditor.cpp b/Userland/Applications/PixelPaint/ImageEditor.cpp index 70626e150f..7e776e23c8 100644 --- a/Userland/Applications/PixelPaint/ImageEditor.cpp +++ b/Userland/Applications/PixelPaint/ImageEditor.cpp @@ -134,6 +134,16 @@ void ImageEditor::update_modified() on_modified_change(is_modified()); } +Gfx::IntRect ImageEditor::subtract_rulers_from_rect(Gfx::IntRect const& rect) const +{ + Gfx::IntRect clipped_rect {}; + clipped_rect.set_top(max(rect.y(), m_ruler_thickness + 1)); + clipped_rect.set_left(max(rect.x(), m_ruler_thickness + 1)); + clipped_rect.set_bottom(rect.bottom()); + clipped_rect.set_right(rect.right()); + return clipped_rect; +} + void ImageEditor::paint_event(GUI::PaintEvent& event) { GUI::Frame::paint_event(event); @@ -282,11 +292,7 @@ void ImageEditor::second_paint_event(GUI::PaintEvent& event) { if (m_active_tool) { if (m_show_rulers) { - auto clipped_event = GUI::PaintEvent(Gfx::IntRect { event.rect().x() + m_ruler_thickness, - event.rect().y() + m_ruler_thickness, - event.rect().width() - m_ruler_thickness, - event.rect().height() - m_ruler_thickness }, - event.window_size()); + auto clipped_event = GUI::PaintEvent(subtract_rulers_from_rect(event.rect()), event.window_size()); m_active_tool->on_second_paint(m_active_layer, clipped_event); } else { m_active_tool->on_second_paint(m_active_layer, event); diff --git a/Userland/Applications/PixelPaint/ImageEditor.h b/Userland/Applications/PixelPaint/ImageEditor.h index 97da298482..727868247f 100644 --- a/Userland/Applications/PixelPaint/ImageEditor.h +++ b/Userland/Applications/PixelPaint/ImageEditor.h @@ -148,6 +148,8 @@ private: virtual void selection_did_change() override; + Gfx::IntRect subtract_rulers_from_rect(Gfx::IntRect const& rect) const; + GUI::MouseEvent event_adjusted_for_layer(GUI::MouseEvent const&, Layer const&) const; GUI::MouseEvent event_with_pan_and_scale_applied(GUI::MouseEvent const&) const;