summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/RenderTable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/rendering/RenderTable.cpp')
-rw-r--r--Source/WebCore/rendering/RenderTable.cpp45
1 files changed, 23 insertions, 22 deletions
diff --git a/Source/WebCore/rendering/RenderTable.cpp b/Source/WebCore/rendering/RenderTable.cpp
index e939004db..2cda8dcc7 100644
--- a/Source/WebCore/rendering/RenderTable.cpp
+++ b/Source/WebCore/rendering/RenderTable.cpp
@@ -1206,16 +1206,33 @@ void RenderTable::updateFirstLetter()
{
}
-enum LineBox { FirstLineBox, LastLineBox };
+LayoutUnit RenderTable::baselinePosition(FontBaseline baselineType, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
+{
+ LayoutUnit baseline = firstLineBoxBaseline();
+ if (baseline != -1)
+ return baseline;
+
+ return RenderBox::baselinePosition(baselineType, firstLine, direction, linePositionMode);
+}
+
+LayoutUnit RenderTable::lastLineBoxBaseline() const
+{
+ // Tables don't contribute their baseline towards the computation of an inline-block's baseline.
+ return -1;
+}
-static LayoutUnit getLineBoxBaseline(const RenderTable* table, LineBox lineBox)
+LayoutUnit RenderTable::firstLineBoxBaseline() const
{
- if (table->isWritingModeRoot())
+ // The baseline of a 'table' is the same as the 'inline-table' baseline per CSS 3 Flexbox (CSS 2.1
+ // doesn't define the baseline of a 'table' only an 'inline-table').
+ // This is also needed to properly determine the baseline of a cell if it has a table child.
+
+ if (isWritingModeRoot())
return -1;
- table->recalcSectionsIfNeeded();
+ recalcSectionsIfNeeded();
- const RenderTableSection* topNonEmptySection = table->topNonEmptySection();
+ const RenderTableSection* topNonEmptySection = this->topNonEmptySection();
if (!topNonEmptySection)
return -1;
@@ -1223,26 +1240,10 @@ static LayoutUnit getLineBoxBaseline(const RenderTable* table, LineBox lineBox)
if (baseline > 0)
return topNonEmptySection->logicalTop() + baseline;
- // The 'first' linebox baseline in a table in the absence of any text in the first section
- // is the top of the table.
- if (lineBox == FirstLineBox)
- return topNonEmptySection->logicalTop();
-
- // The 'last' linebox baseline in a table is the baseline of text in the first
- // cell in the first row/section, so if there is no text do not return a baseline.
+ // FIXME: A table row always has a baseline per CSS 2.1. Will this return the right value?
return -1;
}
-LayoutUnit RenderTable::lastLineBoxBaseline() const
-{
- return getLineBoxBaseline(this, LastLineBox);
-}
-
-LayoutUnit RenderTable::firstLineBoxBaseline() const
-{
- return getLineBoxBaseline(this, FirstLineBox);
-}
-
LayoutRect RenderTable::overflowClipRect(const LayoutPoint& location, RenderRegion* region, OverlayScrollbarSizeRelevancy relevancy)
{
LayoutRect rect = RenderBlock::overflowClipRect(location, region, relevancy);