source: webkit/trunk/Source/WebCore/css/CSSContentDistributionValue.cpp

Last change on this file was 227297, checked in by [email protected], 7 years ago

[css-align] 'overflow' keyword must precede the self-position and content-position value
https://bugs.webkit.org/show_bug.cgi?id=181793

Reviewed by Antti Koivisto.

Source/WebCore:

There were several discussions to avoid ambiguities with the complex
values, specially when it comes to define the place-xxx shorthands.

One of the sources of problems is the 'overflow-position' keyword. The
CSS WG has decided to change the syntax of all the CSS Box Alignment
properties so that the 'overflow-position' keyword always precede the
'self-position' or the 'content-position' keywords.

https://github.com/w3c/csswg-drafts/issues/1446#event-1125715434

In order to apply this change to the Content Distribution properties'
(align-content and justify-content) syntax I had to completely
re-implement their parsing function. Thanks to this I addressed also
the issue with the content-distribution fallback, which cannot be
specified explicitly now.

https://github.com/w3c/csswg-drafts/issues/1002#ref-commit-c38cac4

No new tests, just rebaselined the expected results of the test cases affected.

Despite the so many layout tests affected by this change, it's
unlikely that it might break any content in current web
sites. This patch changes the new CSS syntax, obviously backward
compatible, defined by the new CSS Box Alignment. The
'overflow-position' keyword is only used by the layout models
implementing the new spec, so far only CSS Grid Layout.
Considering that CSS Grid has been shipped last year, it's unlikely
that many sites are using the new CSS values.

  • css/CSSComputedStyleDeclaration.cpp:

(WebCore::valueForItemPositionWithOverflowAlignment):
(WebCore::valueForContentPositionAndDistributionWithOverflowAlignment):

  • css/CSSContentDistributionValue.cpp:

(WebCore::CSSContentDistributionValue::customCSSText const):

  • css/StyleBuilderConverter.h:

(WebCore::StyleBuilderConverter::convertSelfOrDefaultAlignmentData):

  • css/parser/CSSPropertyParser.cpp:

(WebCore::consumeOverflowPositionKeyword):
(WebCore::consumeContentPositionKeyword):
(WebCore::consumeContentDistributionOverflowPosition):
(WebCore::consumeSelfPositionOverflowPosition):

LayoutTests:

Rebaseline expected results of the test cases affected by this change.

  • css3/parse-align-content.html:
  • css3/parse-align-items.html:
  • css3/parse-align-self.html:
  • css3/parse-justify-content.html:
  • css3/overwrite-self-alignment.html:
  • css3/flexbox/new-alignment-values-invalid-if-grid-not-enabled.html:
  • css3/overwrite-content-alignment.html:
  • fast/css-grid-layout/grid-content-alignment-overflow.html:
  • fast/css-grid-layout/grid-align-justify-overflow.html:
  • fast/css/parse-justify-items.html:
  • fast/css/parse-justify-self.html:
  • fast/repaint/align-items-overflow-change.html:
  • fast/repaint/align-self-overflow-change.html:
  • fast/repaint/justify-items-overflow-change.html:
  • fast/repaint/justify-self-overflow-change.html:
File size: 2.8 KB
Line 
1/*
2 * Copyright (C) 2015 Igalia S.L. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "config.h"
27#include "CSSContentDistributionValue.h"
28
29#include "CSSValueList.h"
30
31namespace WebCore {
32
33CSSContentDistributionValue::CSSContentDistributionValue(CSSValueID distribution, CSSValueID position, CSSValueID overflow)
34 : CSSValue(CSSContentDistributionClass)
35 , m_distribution(distribution)
36 , m_position(position)
37 , m_overflow(overflow)
38{
39}
40
41CSSContentDistributionValue::~CSSContentDistributionValue() = default;
42
43String CSSContentDistributionValue::customCSSText() const
44{
45 auto& cssValuePool = CSSValuePool::singleton();
46 auto list = CSSValueList::createSpaceSeparated();
47 if (m_distribution != CSSValueInvalid)
48 list->append(distribution());
49 if (m_position != CSSValueInvalid) {
50 if (m_position == CSSValueFirstBaseline || m_position == CSSValueLastBaseline) {
51 CSSValueID preference = m_position == CSSValueFirstBaseline ? CSSValueFirst : CSSValueLast;
52 list->append(cssValuePool.createIdentifierValue(preference));
53 list->append(cssValuePool.createIdentifierValue(CSSValueBaseline));
54 } else {
55 if (m_overflow != CSSValueInvalid)
56 list->append(overflow());
57 list->append(position());
58 }
59 }
60 return list->customCSSText();
61}
62
63bool CSSContentDistributionValue::equals(const CSSContentDistributionValue& other) const
64{
65 return m_distribution == other.m_distribution && m_position == other.m_position && m_overflow == other.m_overflow;
66}
67
68}
Note: See TracBrowser for help on using the repository browser.