Bug 217832 - [LFC][IFC] Introduce layout bounds based vertical alignment
Summary: [LFC][IFC] Introduce layout bounds based vertical alignment
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Layout and Rendering (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: zalan
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2020-10-16 09:11 PDT by zalan
Modified: 2020-10-17 09:08 PDT (History)
5 users (show)

See Also:


Attachments
Patch (29.01 KB, patch)
2020-10-16 09:15 PDT, zalan
no flags Details | Formatted Diff | Diff
Patch (29.81 KB, patch)
2020-10-16 14:00 PDT, zalan
no flags Details | Formatted Diff | Diff
Patch (31.11 KB, patch)
2020-10-17 05:38 PDT, zalan
ews-feeder: commit-queue-
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Comment 1 zalan 2020-10-16 09:15:27 PDT
Created attachment 411584 [details]
Patch
Comment 2 zalan 2020-10-16 14:00:15 PDT
Created attachment 411611 [details]
Patch
Comment 3 zalan 2020-10-17 05:38:16 PDT
Created attachment 411664 [details]
Patch
Comment 4 Antti Koivisto 2020-10-17 05:43:19 PDT
Comment on attachment 411664 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=411664&action=review

> Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp:411
>      auto lineBoxLogicalHeight = lineBox.logicalHeight();
> -    auto lineLogicalHeight = InlineLayoutUnit { };
> -    if (rootStyle.lineHeight().isNegative()) {
> -        // Negative line height value means the line height is driven by the content.
> -        auto usedLineSpacing = [&] {
> -            auto logicalTopWithLineSpacing = InlineLayoutUnit { };
> -            auto logicalBottomWithLineSpacing = lineBoxLogicalHeight;
> -            for (auto& inlineLevelBox : lineBox.inlineLevelBoxList()) {
> -                if (auto lineSpacing = inlineLevelBox->lineSpacing()) {
> -                    // FIXME: check if line spacing is distributed evenly.
> -                    logicalTopWithLineSpacing = std::min(logicalTopWithLineSpacing, inlineLevelBox->logicalTop() - *lineSpacing / 2);
> -                    logicalBottomWithLineSpacing = std::max(logicalBottomWithLineSpacing, inlineLevelBox->logicalBottom() + *lineSpacing / 2);
> -                }
> -            }
> -            return -logicalTopWithLineSpacing + (logicalBottomWithLineSpacing - lineBoxLogicalHeight);
> -        };
> -        lineLogicalHeight = lineBox.logicalHeight() + usedLineSpacing();
> -    } else
> -        lineLogicalHeight = rootStyle.computedLineHeight();
> -
> +    auto lineLogicalHeight = lineBox.logicalHeight();
>      auto logicalRect = InlineRect { lineContent.logicalTopLeft, lineContent.lineLogicalWidth, lineLogicalHeight};
>      // Inline tree height is all integer based.
>      auto lineBoxOffset = floorf((lineLogicalHeight - lineBoxLogicalHeight) / 2);

lineBoxOffset == 0?
Comment 5 zalan 2020-10-17 05:46:43 PDT
(In reply to Antti Koivisto from comment #4)
> Comment on attachment 411664 [details]
> Patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=411664&action=review
> 
> > Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp:411
> >      auto lineBoxLogicalHeight = lineBox.logicalHeight();
> > -    auto lineLogicalHeight = InlineLayoutUnit { };
> > -    if (rootStyle.lineHeight().isNegative()) {
> > -        // Negative line height value means the line height is driven by the content.
> > -        auto usedLineSpacing = [&] {
> > -            auto logicalTopWithLineSpacing = InlineLayoutUnit { };
> > -            auto logicalBottomWithLineSpacing = lineBoxLogicalHeight;
> > -            for (auto& inlineLevelBox : lineBox.inlineLevelBoxList()) {
> > -                if (auto lineSpacing = inlineLevelBox->lineSpacing()) {
> > -                    // FIXME: check if line spacing is distributed evenly.
> > -                    logicalTopWithLineSpacing = std::min(logicalTopWithLineSpacing, inlineLevelBox->logicalTop() - *lineSpacing / 2);
> > -                    logicalBottomWithLineSpacing = std::max(logicalBottomWithLineSpacing, inlineLevelBox->logicalBottom() + *lineSpacing / 2);
> > -                }
> > -            }
> > -            return -logicalTopWithLineSpacing + (logicalBottomWithLineSpacing - lineBoxLogicalHeight);
> > -        };
> > -        lineLogicalHeight = lineBox.logicalHeight() + usedLineSpacing();
> > -    } else
> > -        lineLogicalHeight = rootStyle.computedLineHeight();
> > -
> > +    auto lineLogicalHeight = lineBox.logicalHeight();
> >      auto logicalRect = InlineRect { lineContent.logicalTopLeft, lineContent.lineLogicalWidth, lineLogicalHeight};
> >      // Inline tree height is all integer based.
> >      auto lineBoxOffset = floorf((lineLogicalHeight - lineBoxLogicalHeight) / 2);
> 
> lineBoxOffset == 0?
was testing the review process :)
Will get rid of that offset concept in a follow-up patch.
Comment 6 EWS 2020-10-17 06:30:19 PDT
Committed r268642: <https://trac.webkit.org/changeset/268642>

All reviewed patches have been landed. Closing bug and clearing flags on attachment 411664 [details].
Comment 7 Radar WebKit Bug Importer 2020-10-17 06:31:17 PDT
<rdar://problem/70407284>