Bug 189397

Summary: Improvements to zooming helper functions
Product: WebKit Reporter: Frédéric Wang (:fredw) <fred.wang>
Component: WebCore Misc.Assignee: Nobody <webkit-unassigned>
Status: NEW    
Severity: Normal CC: ahmad.saleem792, simon.fraser
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   

Frédéric Wang (:fredw)
Reported 2018-09-06 23:30:05 PDT
We currently have at least three functions, with similar logic but different types of parameter. Maybe it would be possible to merge them into a single helper function. Some of them increment/decrement the value to workaround truncation and in bug 182230 Simon suggested to just floor/ceil after the division by zoomFactor. Not sure how that would impact accuracy. RenderStyle.h: inline int adjustForAbsoluteZoom(int value, const RenderStyle& style) { double zoomFactor = style.effectiveZoom(); if (zoomFactor == 1) return value; // Needed because computeLengthInt truncates (rather than rounds) when scaling up. if (zoomFactor > 1) { if (value < 0) value--; else value++; } return roundForImpreciseConversion<int>(value / zoomFactor); } Element.cpp: static double adjustForLocalZoom(LayoutUnit value, const RenderElement& renderer, double& zoomFactor) { zoomFactor = localZoomForRenderer(renderer); if (zoomFactor == 1) return value.toDouble(); return value.toDouble() / zoomFactor; } HTMLBodyElement.cpp static int adjustForZoom(int value, const Frame& frame) { double zoomFactor = frame.pageZoomFactor() * frame.frameScaleFactor(); if (zoomFactor == 1) return value; // Needed because of truncation (rather than rounding) when scaling up. if (zoomFactor > 1) value++; return static_cast<int>(value / zoomFactor); }
Attachments
Ahmad Saleem
Comment 1 2023-09-02 08:55:43 PDT
Note You need to log in before you can comment on or make changes to this bug.