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. |