Bug 150891

Summary: [css-grid] Grid placement conflict handling
Product: WebKit Reporter: Sergio Villar Senin <svillar>
Component: Layout and RenderingAssignee: Sergio Villar Senin <svillar>
Status: RESOLVED FIXED    
Severity: Normal CC: benjamin, commit-queue, darin, esprehn+autocc, glenn, jfernandez, kling, kondapallykalyan, rego, svillar
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on:    
Bug Blocks: 60731    
Attachments:
Description Flags
Patch darin: review+

Description Sergio Villar Senin 2015-11-04 04:31:39 PST
The specs have recently changed. If the placement for a grid item contains two lines, and the start line is further end-ward than the end line, swap the two lines.
Comment 1 Sergio Villar Senin 2015-11-05 08:11:49 PST
Created attachment 264865 [details]
Patch
Comment 2 Darin Adler 2015-11-06 09:02:55 PST
Comment on attachment 264865 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=264865&action=review

> Source/WebCore/rendering/style/GridResolvedPosition.cpp:300
> +    m_integerPosition = isStartSide(side) ? integerPosition : std::max<int>(0, integerPosition - 1);

This conversion to int and back to unsigned is not a clean way to clamp at zero? I suggest instead we write:

    if (!isStartSide(side) && integerPosition)
        --integerPosition;

    m_integerPosition = integerPosition;

> Source/WebCore/rendering/style/GridResolvedPosition.h:138
> +        return std::max<int>(m_integerPosition - 1, 0);

Same issue here with converting to and from int. I would instead write:

    return m_integerPosition ? m_integerPosition - 1 : 0;
Comment 3 Sergio Villar Senin 2015-11-09 04:24:53 PST
Committed r192153: <http://trac.webkit.org/changeset/192153>