From a5442ad70de0f385846e514c93ea71ba96cf2841 Mon Sep 17 00:00:00 2001 From: MacDue Date: Mon, 27 May 2024 19:03:52 +0100 Subject: [PATCH] LibGfx: Add shortcut to `draw_scaled_bitmap_with_transform()` for scales Using `draw_scaled_bitmap()` for simple scales is almost always better than using `draw_scaled_bitmap_with_transform()` which does not respect the scaling mode. --- Userland/Libraries/LibGfx/AffineTransform.h | 5 +++++ Userland/Libraries/LibGfx/Painter.cpp | 6 ++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibGfx/AffineTransform.h b/Userland/Libraries/LibGfx/AffineTransform.h index 74a69060ea9..b5348708b9d 100644 --- a/Userland/Libraries/LibGfx/AffineTransform.h +++ b/Userland/Libraries/LibGfx/AffineTransform.h @@ -35,6 +35,11 @@ public: return m_values[0] == 1 && m_values[1] == 0 && m_values[2] == 0 && m_values[3] == 1; } + [[nodiscard]] bool is_identity_or_translation_or_scale() const + { + return m_values[1] == 0 && m_values[2] == 0; + } + void map(float unmapped_x, float unmapped_y, float& mapped_x, float& mapped_y) const; template diff --git a/Userland/Libraries/LibGfx/Painter.cpp b/Userland/Libraries/LibGfx/Painter.cpp index 7e4a5951d3b..ed28d04bab2 100644 --- a/Userland/Libraries/LibGfx/Painter.cpp +++ b/Userland/Libraries/LibGfx/Painter.cpp @@ -2447,10 +2447,8 @@ void Painter::draw_text_run(FloatPoint baseline_start, Utf8View const& string, F void Painter::draw_scaled_bitmap_with_transform(IntRect const& dst_rect, Bitmap const& bitmap, FloatRect const& src_rect, AffineTransform const& transform, float opacity, Painter::ScalingMode scaling_mode) { - if (transform.is_identity_or_translation()) { - translate(transform.e(), transform.f()); - draw_scaled_bitmap(dst_rect, bitmap, src_rect, opacity, scaling_mode); - translate(-transform.e(), -transform.f()); + if (transform.is_identity_or_translation_or_scale()) { + draw_scaled_bitmap(transform.map(dst_rect.to_type()).to_rounded(), bitmap, src_rect, opacity, scaling_mode); } else { // The painter has an affine transform, we have to draw through it!