Title: [237454] trunk/Source/WebCore
- Revision
- 237454
- Author
- [email protected]
- Date
- 2018-10-26 07:36:30 -0700 (Fri, 26 Oct 2018)
Log Message
[LFC][IFC] Compute float box size and position
https://bugs.webkit.org/show_bug.cgi?id=190938
Reviewed by Antti Koivisto.
* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::computeWidthAndHeight const):
(WebCore::Layout::InlineFormattingContext::computeFloatPosition const):
* layout/inlineformatting/InlineFormattingContext.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (237453 => 237454)
--- trunk/Source/WebCore/ChangeLog 2018-10-26 14:34:54 UTC (rev 237453)
+++ trunk/Source/WebCore/ChangeLog 2018-10-26 14:36:30 UTC (rev 237454)
@@ -1,5 +1,17 @@
2018-10-26 Zalan Bujtas <[email protected]>
+ [LFC][IFC] Compute float box size and position
+ https://bugs.webkit.org/show_bug.cgi?id=190938
+
+ Reviewed by Antti Koivisto.
+
+ * layout/inlineformatting/InlineFormattingContext.cpp:
+ (WebCore::Layout::InlineFormattingContext::computeWidthAndHeight const):
+ (WebCore::Layout::InlineFormattingContext::computeFloatPosition const):
+ * layout/inlineformatting/InlineFormattingContext.h:
+
+2018-10-26 Zalan Bujtas <[email protected]>
+
[LFC][IFC] Add line logical top and bottom
https://bugs.webkit.org/show_bug.cgi?id=190934
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (237453 => 237454)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2018-10-26 14:34:54 UTC (rev 237453)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2018-10-26 14:36:30 UTC (rev 237454)
@@ -159,7 +159,7 @@
line.close(Line::LastLine::Yes);
}
-void InlineFormattingContext::computeWidthAndHeight(const LayoutContext& layoutContext, const Box& layoutBox) const
+void InlineFormattingContext::computeWidthAndHeight(LayoutContext& layoutContext, const Box& layoutBox) const
{
if (is<InlineBox>(layoutBox) && downcast<InlineBox>(layoutBox).hasTextContent()) {
// Text content width is computed during text run generation. -It does not make any sense to measure unprocessed text here, since it will likely be
@@ -167,37 +167,47 @@
return;
}
- if (layoutBox.isFloatingPositioned()) {
- ASSERT_NOT_IMPLEMENTED_YET();
- return;
- }
-
if (layoutBox.isInlineBlockBox()) {
ASSERT_NOT_IMPLEMENTED_YET();
return;
}
- if (layoutBox.replaced()) {
- computeBorderAndPadding(layoutContext, layoutBox);
+ computeBorderAndPadding(layoutContext, layoutBox);
- auto& displayBox = layoutContext.displayBoxForLayoutBox(layoutBox);
+ WidthAndMargin widthAndMargin;
+ HeightAndMargin heightAndMargin;
- auto widthAndMargin = Geometry::inlineReplacedWidthAndMargin(layoutContext, layoutBox);
- displayBox.setContentBoxWidth(widthAndMargin.width);
- displayBox.setHorizontalMargin(widthAndMargin.margin);
- displayBox.setHorizontalNonComputedMargin(widthAndMargin.nonComputedMargin);
+ if (layoutBox.isFloatingPositioned()) {
+ widthAndMargin = Geometry::floatingWidthAndMargin(layoutContext, *this, layoutBox);
+ heightAndMargin = Geometry::floatingHeightAndMargin(layoutContext, layoutBox);
+ } else if (layoutBox.replaced()) {
+ widthAndMargin = Geometry::inlineReplacedWidthAndMargin(layoutContext, layoutBox);
+ heightAndMargin = Geometry::inlineReplacedHeightAndMargin(layoutContext, layoutBox);
+ } else
+ ASSERT_NOT_REACHED();
- auto heightAndMargin = Geometry::inlineReplacedHeightAndMargin(layoutContext, layoutBox);
- displayBox.setContentBoxHeight(heightAndMargin.height);
- displayBox.setVerticalNonCollapsedMargin(heightAndMargin.margin);
- displayBox.setVerticalMargin(heightAndMargin.collapsedMargin.value_or(heightAndMargin.margin));
- return;
- }
+ auto& displayBox = layoutContext.displayBoxForLayoutBox(layoutBox);
+ displayBox.setContentBoxWidth(widthAndMargin.width);
+ displayBox.setHorizontalMargin(widthAndMargin.margin);
+ displayBox.setHorizontalNonComputedMargin(widthAndMargin.nonComputedMargin);
- ASSERT_NOT_REACHED();
+ displayBox.setContentBoxHeight(heightAndMargin.height);
+ displayBox.setVerticalNonCollapsedMargin(heightAndMargin.margin);
+ displayBox.setVerticalMargin(heightAndMargin.collapsedMargin.value_or(heightAndMargin.margin));
return;
}
+void InlineFormattingContext::computeFloatPosition(const LayoutContext& layoutContext, const FloatingContext& floatingContext, Line& line, const Box& floatBox) const
+{
+ ASSERT(layoutContext.hasDisplayBox(floatBox));
+ auto& displayBox = layoutContext.displayBoxForLayoutBox(floatBox);
+
+ // Set static position first.
+ displayBox.setTopLeft({ line.contentLogicalRight(), line.logicalTop() });
+ // Float it.
+ displayBox.setTopLeft(floatingContext.positionForFloat(floatBox));
+}
+
void InlineFormattingContext::computeStaticPosition(const LayoutContext&, const Box&) const
{
}
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h (237453 => 237454)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h 2018-10-26 14:34:54 UTC (rev 237453)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h 2018-10-26 14:36:30 UTC (rev 237454)
@@ -92,7 +92,8 @@
void layoutInlineContent(const LayoutContext&, InlineFormattingState&, const InlineRunProvider&) const;
void initializeNewLine(const LayoutContext&, Line&) const;
- void computeWidthAndHeight(const LayoutContext&, const Box&) const;
+ void computeWidthAndHeight(LayoutContext&, const Box&) const;
+ void computeFloatPosition(const LayoutContext&, const FloatingContext&, Line&, const Box&) const;
void computeStaticPosition(const LayoutContext&, const Box&) const override;
void computeInFlowPositionedPosition(const LayoutContext&, const Box&) const override;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes