| Summary: | Subpixel layout: setSimpleLineLayoutEnabled() produces different layout when line position has CSS px fractions. | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | WebKit | Reporter: | zalan <zalan> | ||||||||
| Component: | Layout and Rendering | Assignee: | zalan <zalan> | ||||||||
| Status: | RESOLVED FIXED | ||||||||||
| Severity: | Normal | CC: | commit-queue, esprehn+autocc, glenn, koivisto, kondapallykalyan, WebkitBugTracker | ||||||||
| Priority: | P2 | Keywords: | InRadar | ||||||||
| Version: | 528+ (Nightly build) | ||||||||||
| Hardware: | Unspecified | ||||||||||
| OS: | Unspecified | ||||||||||
| Bug Depends on: | |||||||||||
| Bug Blocks: | 126283 | ||||||||||
| Attachments: |
|
||||||||||
|
Description
zalan
2014-01-13 07:26:39 PST
SimpleLineLayout's paintFlow() needs to call roundedIntPoint() on paint offset to match InlineTextBox's paint positioning.
something along these lines:
--- a/Source/WebCore/rendering/SimpleLineLayoutFunctions.cpp
+++ b/Source/WebCore/rendering/SimpleLineLayoutFunctions.cpp
@@ -80,9 +80,10 @@ void paintFlow(const RenderBlockFlow& flow, const Layout& layout, PaintInfo& pai
GraphicsContextStateSaver stateSaver(context, textPaintStyle.strokeWidth > 0);
updateGraphicsContext(context, textPaintStyle);
+ LayoutPoint adjustedPaintOffset = roundedIntPoint(paintOffset);
LayoutRect paintRect = paintInfo.rect;
- paintRect.moveBy(-paintOffset);
+ paintRect.moveBy(-adjustedPaintOffset);
auto resolver = runResolver(flow, layout);
auto range = resolver.rangeForRect(paintRect);
@@ -92,9 +93,9 @@ void paintFlow(const RenderBlockFlow& flow, const Layout& layout, PaintInfo& pai
continue;
TextRun textRun(run.text());
textRun.setTabSize(!style.collapseWhiteSpace(), style.tabSize());
- context.drawText(font, textRun, run.baseline() + paintOffset);
+ context.drawText(font, textRun, run.baseline() + adjustedPaintOffset);
if (debugBordersEnabled)
- paintDebugBorders(context, run.rect(), paintOffset);
+ paintDebugBorders(context, run.rect(), adjustedPaintOffset);
}
}
Created attachment 221206 [details]
test case
*** Bug 126893 has been marked as a duplicate of this bug. *** *** Bug 126894 has been marked as a duplicate of this bug. *** additional failed cases (from dupes) LayoutTests/fast/shapes/shape-inside/shape-inside-circle-padding.html LayoutTests/fast/shapes/shape-inside/shape-inside-circle.html LayoutTests/fast/shapes/shape-inside/shape-inside-ellipse-padding.html LayoutTests/fast/shapes/shape-inside/shape-inside-ellipse.html LayoutTests/fast/shapes/shape-inside/shape-inside-rounded-rectangle-fit-002.html LayoutTests/fast/shapes/shape-inside/shape-inside-subpixel-rectangle-top.html LayoutTests/fast/regions/floats-basic-in-variable-width-regions.html LayoutTests/fast/regions/overflow-moving-below-floats-in-variable-width-regions.html LayoutTests/fast/regions/overflow-not-moving-below-floats-in-variable-width-regions.html LayoutTests/fast/regions/overflow-size-change-in-variable-width-regions.html LayoutTests/fast/regions/overflow-size-change-with-stacking-context.html LayoutTests/fast/regions/selection/selecting-text-through-different-region-flows.html actually fast/shapes/shape-inside/shape-inside-subpixel-rectangle-top.html doesnt get fixed by this. For that, webkit.org/b/124784 needs revisiting. *** Bug 126891 has been marked as a duplicate of this bug. *** fast/css/word-spacing-between-blocks.html fast/css/word-spacing-between-inlines.html Created attachment 221530 [details]
Patch
Created attachment 221531 [details]
Patch
Comment on attachment 221531 [details]
Patch
r=me
Comment on attachment 221531 [details] Patch Clearing flags on attachment: 221531 Committed r162340: <http://trac.webkit.org/changeset/162340> All reviewed patches have been landed. Closing bug. |