From 88ef1bff389ef483222a92587cc610900ac6e1de Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 11 Apr 2022 02:29:37 +0200 Subject: [PATCH] LibWeb: Add fast path for CRC2D.drawImage() with simple transform If the transform is a simple translation, we don't need to run the big and slow transform rasterizer. --- Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp index 5ce9555a7f..80972ee7cf 100644 --- a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp +++ b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp @@ -182,9 +182,10 @@ DOM::ExceptionOr CanvasRenderingContext2D::draw_image(CanvasImageSource co if (!painter) return {}; - if (m_drawing_state.transform.is_identity()) { - // There's no affine transformation to worry about, we can just call Gfx::Painter. + if (m_drawing_state.transform.is_identity_or_translation()) { + painter->translate(m_drawing_state.transform.e(), m_drawing_state.transform.f()); painter->draw_scaled_bitmap(destination_rect.to_rounded(), *bitmap, source_rect, 1.0f, Gfx::Painter::ScalingMode::BilinearBlend); + painter->translate(-m_drawing_state.transform.e(), -m_drawing_state.transform.f()); } else { // The context has an affine transform, we have to draw through it!