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)
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 | ||
---|---|---|
Add attachment proposed patch, testcase, etc. |
Ahmad Saleem
Some clean-up from Blink's commit: https://chromium.googlesource.com/chromium/src.git/+/ad54bc5824e5901329fd1ab1beb1a63443399a6a