WebKit Bugzilla
Attachment 361617 Details for
Bug 194478
: [LFC][IFC] Add intrinsic width support for replaced boxes
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-194478-20190209171831.patch (text/plain), 7.16 KB, created by
zalan
on 2019-02-09 17:18:32 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
zalan
Created:
2019-02-09 17:18:32 PST
Size:
7.16 KB
patch
obsolete
>Subversion Revision: 241247 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 50320c2098d5ae6c2b825ce142d640a5d73fa98c..442982594e9758f6f2c1c181691c97558742d85f 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,20 @@ >+2019-02-09 Zalan Bujtas <zalan@apple.com> >+ >+ [LFC][IFC] Add intrinsic width support for replaced boxes >+ https://bugs.webkit.org/show_bug.cgi?id=194478 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * layout/inlineformatting/InlineFormattingContext.cpp: >+ (WebCore::Layout::InlineFormattingContext::layout const): >+ (WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const): >+ (WebCore::Layout::InlineFormattingContext::computeMargin const): >+ (WebCore::Layout::InlineFormattingContext::computeBorderAndPadding const): >+ (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const): >+ (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox const): >+ (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPadding const): Deleted. >+ * layout/inlineformatting/InlineFormattingContext.h: >+ > 2019-02-09 Darin Adler <darin@apple.com> > > Eliminate unnecessary String temporaries by using StringConcatenateNumbers >diff --git a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp >index d26201ea8d49505c133e1933c051567aaf576dbd..f2d5fa63ab6083bd0f0ca59bd1b54c67c2f84354 100644 >--- a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp >+++ b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp >@@ -77,9 +77,11 @@ void InlineFormattingContext::layout() const > while (layoutBox) { > if (layoutBox->establishesFormattingContext()) > layoutFormattingContextRoot(*layoutBox, usedValues); >- else if (is<Container>(*layoutBox)) >- computeMarginBorderAndPadding(downcast<InlineContainer>(*layoutBox), usedValues); >- else if (layoutBox->isReplaced()) >+ else if (is<Container>(*layoutBox)) { >+ auto& inlineContainer = downcast<InlineContainer>(*layoutBox); >+ computeMargin(inlineContainer, usedValues); >+ computeBorderAndPadding(inlineContainer, usedValues); >+ } else if (layoutBox->isReplaced()) > computeWidthAndHeightForReplacedInlineBox(*layoutBox, usedValues); > layoutBox = nextInPreOrder(*layoutBox, root); > } >@@ -101,10 +103,17 @@ FormattingContext::InstrinsicWidthConstraints InlineFormattingContext::instrinsi > auto usedValues = UsedHorizontalValues { { }, { }, { } }; > auto* layoutBox = root.firstInFlowOrFloatingChild(); > while (layoutBox) { >- if (layoutBox->establishesFormattingContext() || layoutBox->isReplaced()) >+ if (layoutBox->establishesFormattingContext()) > ASSERT_NOT_IMPLEMENTED_YET(); >- else if (is<Container>(*layoutBox)) >- computeMarginBorderAndPadding(downcast<InlineContainer>(*layoutBox), usedValues); >+ else if (layoutBox->isReplaced() || is<Container>(*layoutBox)) { >+ computeBorderAndPadding(*layoutBox, usedValues); >+ if (layoutBox->isReplaced()) >+ computeWidthAndMargin(*layoutBox, usedValues); >+ else { >+ // Simple inline container with no intrinsic width <span>. >+ computeMargin(downcast<InlineContainer>(*layoutBox), usedValues); >+ } >+ } > layoutBox = nextInPreOrder(*layoutBox, root); > } > >@@ -130,26 +139,25 @@ FormattingContext::InstrinsicWidthConstraints InlineFormattingContext::instrinsi > return instrinsicWidthConstraints; > } > >-void InlineFormattingContext::computeBorderAndPadding(const Box& layoutBox, UsedHorizontalValues usedValues) const >-{ >- auto& displayBox = layoutState().displayBoxForLayoutBox(layoutBox); >- displayBox.setBorder(Geometry::computedBorder(layoutBox)); >- displayBox.setPadding(Geometry::computedPadding(layoutBox, usedValues)); >-} >- >-void InlineFormattingContext::computeMarginBorderAndPadding(const InlineContainer& inlineContainer, UsedHorizontalValues usedValues) const >+void InlineFormattingContext::computeMargin(const InlineContainer& inlineContainer, UsedHorizontalValues usedValues) const > { > // Non-replaced, non-formatting root containers (<span></span>) don't have width property -> non width computation. > ASSERT(!inlineContainer.replaced()); > ASSERT(!inlineContainer.establishesFormattingContext()); > >- computeBorderAndPadding(inlineContainer, usedValues); > auto& displayBox = layoutState().displayBoxForLayoutBox(inlineContainer); > auto computedHorizontalMargin = Geometry::computedHorizontalMargin(inlineContainer, usedValues); > displayBox.setHorizontalComputedMargin(computedHorizontalMargin); > displayBox.setHorizontalMargin({ computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) }); > } > >+void InlineFormattingContext::computeBorderAndPadding(const Box& layoutBox, UsedHorizontalValues usedValues) const >+{ >+ auto& displayBox = layoutState().displayBoxForLayoutBox(layoutBox); >+ displayBox.setBorder(Geometry::computedBorder(layoutBox)); >+ displayBox.setPadding(Geometry::computedPadding(layoutBox, usedValues)); >+} >+ > void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedValues) const > { > auto& layoutState = this->layoutState(); >@@ -191,6 +199,7 @@ void InlineFormattingContext::computeHeightAndMargin(const Box& layoutBox) const > void InlineFormattingContext::layoutFormattingContextRoot(const Box& root, UsedHorizontalValues usedValues) const > { > ASSERT(root.isFloatingPositioned() || root.isInlineBlockBox()); >+ ASSERT(usedValues.containingBlockWidth); > > computeBorderAndPadding(root, usedValues); > computeWidthAndMargin(root, usedValues); >@@ -208,6 +217,7 @@ void InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox(const Bo > ASSERT(!layoutBox.isContainer()); > ASSERT(!layoutBox.establishesFormattingContext()); > ASSERT(layoutBox.replaced()); >+ ASSERT(usedValues.containingBlockWidth); > > computeBorderAndPadding(layoutBox, usedValues); > computeWidthAndMargin(layoutBox, usedValues); >diff --git a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h >index 0cbb96d2f4f4fbbe722fffcfc475011a27c9ae70..ffa70e9c907bc33aade95a0f99950d7b8252e04a 100644 >--- a/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h >+++ b/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h >@@ -87,8 +87,8 @@ private: > > void layoutFormattingContextRoot(const Box&, UsedHorizontalValues) const; > void computeWidthAndHeightForReplacedInlineBox(const Box&, UsedHorizontalValues) const; >+ void computeMargin(const InlineContainer&, UsedHorizontalValues) const; > void computeBorderAndPadding(const Box&, UsedHorizontalValues) const; >- void computeMarginBorderAndPadding(const InlineContainer&, UsedHorizontalValues) const; > void computeHeightAndMargin(const Box&) const; > void computeWidthAndMargin(const Box&, UsedHorizontalValues) const; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194478
: 361617