From b4c3882d9cb20da650a96c232c36981c85f6c2d8 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 10 Apr 2022 18:40:26 +0200 Subject: [PATCH] LibGfx: Add AffineTransform::is_identity_or_translation() This will allow us to implement fast paths in cases where a simple translation can be handled faster than a full affine transform. --- Userland/Libraries/LibGfx/AffineTransform.cpp | 5 +++++ Userland/Libraries/LibGfx/AffineTransform.h | 1 + 2 files changed, 6 insertions(+) diff --git a/Userland/Libraries/LibGfx/AffineTransform.cpp b/Userland/Libraries/LibGfx/AffineTransform.cpp index 7347df38a57..3e33b4f718f 100644 --- a/Userland/Libraries/LibGfx/AffineTransform.cpp +++ b/Userland/Libraries/LibGfx/AffineTransform.cpp @@ -16,6 +16,11 @@ bool AffineTransform::is_identity() const return m_values[0] == 1 && m_values[1] == 0 && m_values[2] == 0 && m_values[3] == 1 && m_values[4] == 0 && m_values[5] == 0; } +bool AffineTransform::is_identity_or_translation() const +{ + return a() == 1 && b() == 0 && c() == 0 && d() == 1; +} + static float hypotenuse(float x, float y) { // FIXME: This won't handle overflow :( diff --git a/Userland/Libraries/LibGfx/AffineTransform.h b/Userland/Libraries/LibGfx/AffineTransform.h index 5069c6ae57a..2dd8e9de29f 100644 --- a/Userland/Libraries/LibGfx/AffineTransform.h +++ b/Userland/Libraries/LibGfx/AffineTransform.h @@ -25,6 +25,7 @@ public: } bool is_identity() const; + bool is_identity_or_translation() const; void map(float unmapped_x, float unmapped_y, float& mapped_x, float& mapped_y) const;