From 7b1ab8d657bf270b7373a3150eedb93dbfb8a85b Mon Sep 17 00:00:00 2001 From: "hyatt@apple.com" Date: Wed, 8 Feb 2012 17:34:22 +0000 Subject: [PATCH] Source/WebCore: https://bugs.webkit.org/show_bug.cgi?id=78122 Add support for the "contains" value for line-grid-snap. This value centers the line box in between the text-top and text-bottom of the minimum number of grid lines that enclose the line box. This is useful for centering headers in a line grid. Reviewed by Adam Roben. Added a new test in fast/line-grid. * rendering/RootInlineBox.cpp: (WebCore::RootInlineBox::lineGridSnapAdjustment): LayoutTests: https://bugs.webkit.org/show_bug.cgi?id=78122 Add a new test that shows the "contains" value in action. Reviewed by Adam Roben. * fast/line-grid/line-grid-contains-value.html: Added. * platform/mac/fast/line-grid/line-grid-contains-value-expected.png: Added. * platform/mac/fast/line-grid/line-grid-contains-value-expected.txt: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@107099 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- LayoutTests/ChangeLog | 12 ++++++ .../fast/line-grid/line-grid-contains-value.html | 36 +++++++++++++++++ .../line-grid-contains-value-expected.png | Bin 0 -> 19332 bytes .../line-grid-contains-value-expected.txt | 45 +++++++++++++++++++++ Source/WebCore/ChangeLog | 15 +++++++ Source/WebCore/rendering/RootInlineBox.cpp | 43 +++++++++++++++----- 6 files changed, 140 insertions(+), 11 deletions(-) create mode 100644 LayoutTests/fast/line-grid/line-grid-contains-value.html create mode 100644 LayoutTests/platform/mac/fast/line-grid/line-grid-contains-value-expected.png create mode 100644 LayoutTests/platform/mac/fast/line-grid/line-grid-contains-value-expected.txt diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index 3b19fee..5cb7f22 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,15 @@ +2012-02-08 David Hyatt + + https://bugs.webkit.org/show_bug.cgi?id=78122 + + Add a new test that shows the "contains" value in action. + + Reviewed by Adam Roben. + + * fast/line-grid/line-grid-contains-value.html: Added. + * platform/mac/fast/line-grid/line-grid-contains-value-expected.png: Added. + * platform/mac/fast/line-grid/line-grid-contains-value-expected.txt: Added. + 2012-02-08 Dan Bernstein Moved a Mac-specific test to platform/mac. diff --git a/LayoutTests/fast/line-grid/line-grid-contains-value.html b/LayoutTests/fast/line-grid/line-grid-contains-value.html new file mode 100644 index 0000000..96f78f0 --- /dev/null +++ b/LayoutTests/fast/line-grid/line-grid-contains-value.html @@ -0,0 +1,36 @@ + + + + + + +
+
+This header should be centered in the grid lines. +
+
+This text should snap
+to a 36px font-size grid.
+There should be lots of spacing between these lines. + +
+
+ +
+
+xxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxx
+
+
+ + + diff --git a/LayoutTests/platform/mac/fast/line-grid/line-grid-contains-value-expected.png b/LayoutTests/platform/mac/fast/line-grid/line-grid-contains-value-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..e8ecaaf9820922d99b46dbda3fc09b3164ac441b GIT binary patch literal 19332 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 J-L!xHKLC6)k^lez literal 0 HcmV?d00001 diff --git a/LayoutTests/platform/mac/fast/line-grid/line-grid-contains-value-expected.txt b/LayoutTests/platform/mac/fast/line-grid/line-grid-contains-value-expected.txt new file mode 100644 index 0000000..7c341a2 --- /dev/null +++ b/LayoutTests/platform/mac/fast/line-grid/line-grid-contains-value-expected.txt @@ -0,0 +1,45 @@ +layer at (0,0) size 800x600 + RenderView at (0,0) size 800x600 +layer at (0,0) size 800x600 layerType: background only +layer at (10,10) size 620x305 + RenderBlock (positioned) zI: -1 {DIV} at (10,10) size 620x305 + RenderBlock {DIV} at (10,10) size 600x285 [color=#00FF00] + RenderText {#text} at (0,3) size 612x36 + text run at (0,3) width 612: "xxxxxxxxxxxxxxxxx" + RenderBR {BR} at (0,0) size 0x0 + RenderText {#text} at (0,44) size 612x36 + text run at (0,44) width 612: "xxxxxxxxxxxxxxxxx" + RenderBR {BR} at (0,0) size 0x0 + RenderText {#text} at (0,85) size 612x36 + text run at (0,85) width 612: "xxxxxxxxxxxxxxxxx" + RenderBR {BR} at (0,0) size 0x0 + RenderText {#text} at (0,126) size 612x36 + text run at (0,126) width 612: "xxxxxxxxxxxxxxxxx" + RenderBR {BR} at (0,0) size 0x0 + RenderText {#text} at (0,167) size 612x36 + text run at (0,167) width 612: "xxxxxxxxxxxxxxxxx" + RenderBR {BR} at (0,0) size 0x0 + RenderText {#text} at (0,208) size 612x36 + text run at (0,208) width 612: "xxxxxxxxxxxxxxxxx" + RenderBR {BR} at (0,0) size 0x0 + RenderText {#text} at (0,249) size 612x36 + text run at (0,249) width 612: "xxxxxxxxxxxxxxxxx" + RenderBR {BR} at (0,0) size 0x0 +layer at (0,0) size 800x600 layerType: foreground only + RenderBlock {HTML} at (0,0) size 800x600 + RenderBody {BODY} at (8,8) size 784x584 +layer at (10,10) size 620x301 + RenderBlock (positioned) {DIV} at (10,10) size 620x301 + RenderBlock {DIV} at (10,10) size 600x150 + RenderText {#text} at (0,13) size 594x137 + text run at (0,13) width 594: "This header should be centered" + text run at (0,95) width 310: "in the grid lines." + RenderBlock {DIV} at (10,160) size 600x131 + RenderText {#text} at (0,35) size 101x14 + text run at (0,35) width 101: "This text should snap" + RenderBR {BR} at (101,46) size 0x0 + RenderText {#text} at (0,76) size 113x14 + text run at (0,76) width 113: "to a 36px font-size grid." + RenderBR {BR} at (113,87) size 0x0 + RenderText {#text} at (0,117) size 245x14 + text run at (0,117) width 245: "There should be lots of spacing between these lines." diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 26f0a18..aba101c 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,18 @@ +2012-02-08 David Hyatt + + https://bugs.webkit.org/show_bug.cgi?id=78122 + + Add support for the "contains" value for line-grid-snap. This value centers the line box in between the + text-top and text-bottom of the minimum number of grid lines that enclose the line box. This is useful for + centering headers in a line grid. + + Reviewed by Adam Roben. + + Added a new test in fast/line-grid. + + * rendering/RootInlineBox.cpp: + (WebCore::RootInlineBox::lineGridSnapAdjustment): + 2012-02-08 Cary Clark [Skia Mac] Make misspelling underline dots unclipped diff --git a/Source/WebCore/rendering/RootInlineBox.cpp b/Source/WebCore/rendering/RootInlineBox.cpp index 081b3b7..0bffabc 100644 --- a/Source/WebCore/rendering/RootInlineBox.cpp +++ b/Source/WebCore/rendering/RootInlineBox.cpp @@ -330,7 +330,7 @@ LayoutUnit RootInlineBox::lineGridSnapAdjustment(LayoutUnit delta) const { // If our block doesn't have snapping turned on, do nothing. // FIXME: Implement bounds snapping. - if (block()->style()->lineGridSnap() != LineGridSnapBaseline) + if (block()->style()->lineGridSnap() == LineGridSnapNone) return 0; // Get the current line grid and offset. @@ -352,33 +352,54 @@ LayoutUnit RootInlineBox::lineGridSnapAdjustment(LayoutUnit delta) const // as established by the line box. // FIXME: Need to handle crazy line-box-contain values that cause the root line box to not be considered. I assume // the grid should honor line-box-contain. - LayoutUnit baselineMultiple = lineGridBox->lineBottomWithLeading() - lineGridBox->lineTopWithLeading(); - if (!baselineMultiple) + LayoutUnit gridLineHeight = lineGridBox->lineBottomWithLeading() - lineGridBox->lineTopWithLeading(); + if (!gridLineHeight) return 0; - LayoutUnit lineGridAscent = lineGrid->style()->fontMetrics().ascent(baselineType()); - LayoutUnit firstBaselinePosition = lineGridBlockOffset + lineGridAscent + lineGridBox->logicalTop(); - LayoutUnit currentBaselinePosition = blockOffset + logicalTop() + delta + block()->style()->fontMetrics().ascent(baselineType()); + LayoutUnit lineGridFontAscent = lineGrid->style()->fontMetrics().ascent(baselineType()); + LayoutUnit lineGridFontHeight = lineGridBox->logicalHeight(); + LayoutUnit firstTextTop = lineGridBlockOffset + lineGridBox->logicalTop(); + LayoutUnit firstBaselinePosition = firstTextTop + lineGridFontAscent; + + LayoutUnit currentTextTop = blockOffset + logicalTop() + delta; + LayoutUnit currentFontAscent = block()->style()->fontMetrics().ascent(baselineType()); + LayoutUnit currentBaselinePosition = currentTextTop + currentFontAscent; // If we're paginated, see if we're on a page after the first one. If so, the grid resets on subsequent pages. // FIXME: If the grid is an ancestor of the pagination establisher, then this is incorrect. LayoutUnit pageLogicalTop = 0; if (layoutState->isPaginated() && layoutState->pageLogicalHeight()) { pageLogicalTop = block()->pageLogicalTopForOffset(logicalTop() + delta); - if (pageLogicalTop > lineGridBlockOffset + lineGridBox->logicalTop()) - firstBaselinePosition = lineGridAscent + pageLogicalTop + lineGridBox->logicalTop() - lineGrid->borderBefore() - lineGrid->paddingBefore(); + if (pageLogicalTop > firstTextTop) + firstTextTop = pageLogicalTop + lineGridBox->logicalTop() - lineGrid->borderBefore() - lineGrid->paddingBefore(); } - + + if (block()->style()->lineGridSnap() == LineGridSnapContain) { + // Compute the desired offset from the text-top of a grid line. + // Look at our height (logicalHeight()). + // Look at the total available height. It's going to be (textBottom - textTop) + (n-1)*(multiple with leading) + // where n is number of grid lines required to enclose us. + if (logicalHeight() <= lineGridFontHeight) + firstTextTop += (lineGridFontHeight - logicalHeight()) / 2; + else { + LayoutUnit numberOfLinesWithLeading = ceilf(static_cast(logicalHeight() - lineGridFontHeight) / gridLineHeight); + LayoutUnit totalHeight = lineGridFontHeight + numberOfLinesWithLeading * gridLineHeight; + firstTextTop += (totalHeight - logicalHeight()) / 2; + } + firstBaselinePosition = firstTextTop + currentFontAscent; + } else + firstBaselinePosition = firstTextTop + lineGridFontAscent; + // If we're above the first line, just push to the first line. if (currentBaselinePosition < firstBaselinePosition) return delta + firstBaselinePosition - currentBaselinePosition; // Otherwise we're in the middle of the grid somewhere. Just push to the next line. LayoutUnit baselineOffset = currentBaselinePosition - firstBaselinePosition; - LayoutUnit remainder = baselineOffset % baselineMultiple; + LayoutUnit remainder = baselineOffset % gridLineHeight; LayoutUnit result = delta; if (remainder) - result += baselineMultiple - remainder; + result += gridLineHeight - remainder; // If we aren't paginated we can return the result. if (!layoutState->isPaginated() || !layoutState->pageLogicalHeight() || result == delta) -- 2.7.4