From 96335f31d5a8c6180a4cc0254585bc01ba6742fa Mon Sep 17 00:00:00 2001 From: ronak69 Date: Wed, 18 Sep 2024 12:23:12 +0000 Subject: [PATCH] LibWebView: Do floating-point-error-free zoom calculation using rounding The current min/max zoom levels are supposed to be: 30% and 500%. Before, due to floating point error accumulation in incremental addition of zoom-step into zoom-level, one extra zoom step would get allowed, enabling user to zoom 20%-to-510%. Now, using rounding, the intermediate zoom-level values should be as close to the theoretical value as FP32 can represent. E.g. zoom-level of 70% (theoretical multiplier 0.7) is 0.69... . --- Userland/Libraries/LibWebView/ViewImplementation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibWebView/ViewImplementation.cpp b/Userland/Libraries/LibWebView/ViewImplementation.cpp index b837588670a..2ffc4e986a8 100644 --- a/Userland/Libraries/LibWebView/ViewImplementation.cpp +++ b/Userland/Libraries/LibWebView/ViewImplementation.cpp @@ -107,7 +107,7 @@ void ViewImplementation::zoom_in() { if (m_zoom_level >= ZOOM_MAX_LEVEL) return; - m_zoom_level += ZOOM_STEP; + m_zoom_level = round_to((m_zoom_level + ZOOM_STEP) * 100) / 100.0f; update_zoom(); } @@ -115,7 +115,7 @@ void ViewImplementation::zoom_out() { if (m_zoom_level <= ZOOM_MIN_LEVEL) return; - m_zoom_level -= ZOOM_STEP; + m_zoom_level = round_to((m_zoom_level - ZOOM_STEP) * 100) / 100.0f; update_zoom(); }