⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 275495 in webkit


Ignore:
Timestamp:
Apr 6, 2021, 1:39:45 AM (6 years ago)
Author:
svillar@igalia.com
Message:

[css-grid] Initialize auto-repeat data in RenderStyle in applyInitialGridTemplate{Columns|Rows}
​https://bugs.webkit.org/show_bug.cgi?id=222852

Reviewed by Antti Koivisto.

We should initialize the auto repeat data (like auto repeat tracks or the insertion point) whenever
applyInitialGridTemplateXXX is called. That method is normally called using different RenderStyle's
but under some circumstances it might be the same. For those cases we wouldn't like to end up with
obsolete data from a previous style resolution.

The same applies also to the applyInheritGridTemplateXXX calls. We're also removing a duplicate call
to setGridAutoRepeat{Row|Column}sInsertionPoint() that is not needed at all.

In order to have a single place with all the style properties affecting columns and rows, all the set
calls were moved to a macro that is used by all the apply{Initial|Inherit}GridTemplate{Columns|Rows}
methods. This would allow us to prevent eventual out-of-sync issues like this one.

  • style/StyleBuilderCustom.h:

(WebCore::Style::BuilderCustom::applyInitialGridTemplateColumns):
(WebCore::Style::BuilderCustom::applyInheritGridTemplateColumns):
(WebCore::Style::BuilderCustom::applyInitialGridTemplateRows):
(WebCore::Style::BuilderCustom::applyInheritGridTemplateRows):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r275494 r275495  
     12021-03-24  Sergio Villar Senin  <svillar@igalia.com>
     2
     3        [css-grid] Initialize auto-repeat data in RenderStyle in applyInitialGridTemplate{Columns|Rows}
     4        https://bugs.webkit.org/show_bug.cgi?id=222852
     5
     6        Reviewed by Antti Koivisto.
     7
     8        We should initialize the auto repeat data (like auto repeat tracks or the insertion point) whenever
     9        applyInitialGridTemplateXXX is called. That method is normally called using different RenderStyle's
     10        but under some circumstances it might be the same. For those cases we wouldn't like to end up with
     11        obsolete data from a previous style resolution.
     12
     13        The same applies also to the applyInheritGridTemplateXXX calls. We're also removing a duplicate call
     14        to setGridAutoRepeat{Row|Column}sInsertionPoint() that is not needed at all.
     15
     16        In order to have a single place with all the style properties affecting columns and rows, all the set
     17        calls were moved to a macro that is used by all the apply{Initial|Inherit}GridTemplate{Columns|Rows}
     18        methods. This would allow us to prevent eventual out-of-sync issues like this one.
     19
     20        * style/StyleBuilderCustom.h:
     21        (WebCore::Style::BuilderCustom::applyInitialGridTemplateColumns):
     22        (WebCore::Style::BuilderCustom::applyInheritGridTemplateColumns):
     23        (WebCore::Style::BuilderCustom::applyInitialGridTemplateRows):
     24        (WebCore::Style::BuilderCustom::applyInheritGridTemplateRows):
     25
    1262021-04-06  Rob Buis  <rbuis@igalia.com>
    227
  • trunk/Source/WebCore/style/StyleBuilderCustom.h

    r275420 r275495  
    18951895}
    18961896
     1897#define SET_TRACKS_DATA_INTERNAL(tracksData, style, parentStyle, TrackType) \
     1898    ASSERT(tracksData || parentStyle); \
     1899    style.setGrid##TrackType##s(tracksData ? tracksData->m_trackSizes : parentStyle->grid##TrackType##s()); \
     1900    style.setNamedGrid##TrackType##Lines(tracksData ? tracksData->m_namedGridLines : parentStyle->namedGrid##TrackType##Lines()); \
     1901    style.setOrderedNamedGrid##TrackType##Lines(tracksData ? tracksData->m_orderedNamedGridLines : parentStyle->orderedNamedGrid##TrackType##Lines()); \
     1902    style.setGridAutoRepeat##TrackType##s(tracksData ? tracksData->m_autoRepeatTrackSizes : parentStyle->gridAutoRepeat##TrackType##s()); \
     1903    style.setGridAutoRepeat##TrackType##sInsertionPoint(tracksData ? tracksData->m_autoRepeatInsertionPoint : parentStyle->gridAutoRepeat##TrackType##sInsertionPoint()); \
     1904    style.setAutoRepeatNamedGrid##TrackType##Lines(tracksData ? tracksData->m_autoRepeatNamedGridLines : parentStyle->autoRepeatNamedGrid##TrackType##Lines()); \
     1905    style.setAutoRepeatOrderedNamedGrid##TrackType##Lines(tracksData ? tracksData->m_autoRepeatOrderedNamedGridLines : parentStyle->autoRepeatOrderedNamedGrid##TrackType##Lines()); \
     1906    style.setGridAutoRepeat##TrackType##sType(tracksData ? tracksData->m_autoRepeatType : parentStyle->gridAutoRepeat##TrackType##sType());
     1907
     1908#define SET_INHERIT_TRACKS_DATA(style, parentStyle, TrackType) \
     1909    BuilderConverter::TracksData* tracksData = nullptr; \
     1910    const RenderStyle* parentStylePointer = &parentStyle; \
     1911    SET_TRACKS_DATA_INTERNAL(tracksData, style, parentStylePointer, TrackType)
     1912
     1913#define SET_TRACKS_DATA(tracksData, style, TrackType) \
     1914    BuilderConverter::TracksData* tracksDataPointer = &tracksData; \
     1915    const RenderStyle* parentStyle = nullptr; \
     1916    SET_TRACKS_DATA_INTERNAL(tracksDataPointer, style, parentStyle, TrackType)
     1917
    18971918inline void BuilderCustom::applyInitialGridTemplateColumns(BuilderState& builderState)
    18981919{
    1899     builderState.style().setGridColumns(RenderStyle::initialGridColumns());
    1900     builderState.style().setNamedGridColumnLines(RenderStyle::initialNamedGridColumnLines());
    1901     builderState.style().setOrderedNamedGridColumnLines(RenderStyle::initialOrderedNamedGridColumnLines());
     1920    BuilderConverter::TracksData initialTracksData;
     1921    SET_TRACKS_DATA(initialTracksData, builderState.style(), Column);
    19021922}
    19031923
    19041924inline void BuilderCustom::applyInheritGridTemplateColumns(BuilderState& builderState)
    19051925{
    1906     builderState.style().setGridColumns(builderState.parentStyle().gridColumns());
    1907     builderState.style().setNamedGridColumnLines(builderState.parentStyle().namedGridColumnLines());
    1908     builderState.style().setOrderedNamedGridColumnLines(builderState.parentStyle().orderedNamedGridColumnLines());
    1909 }
    1910 
    1911 #define SET_TRACKS_DATA(tracksData, style, TrackType) \
    1912     style.setGrid##TrackType##s(tracksData.m_trackSizes); \
    1913     style.setNamedGrid##TrackType##Lines(tracksData.m_namedGridLines); \
    1914     style.setOrderedNamedGrid##TrackType##Lines(tracksData.m_orderedNamedGridLines); \
    1915     style.setGridAutoRepeat##TrackType##s(tracksData.m_autoRepeatTrackSizes); \
    1916     style.setGridAutoRepeat##TrackType##sInsertionPoint(tracksData.m_autoRepeatInsertionPoint); \
    1917     style.setAutoRepeatNamedGrid##TrackType##Lines(tracksData.m_autoRepeatNamedGridLines); \
    1918     style.setAutoRepeatOrderedNamedGrid##TrackType##Lines(tracksData.m_autoRepeatOrderedNamedGridLines); \
    1919     style.setGridAutoRepeat##TrackType##sType(tracksData.m_autoRepeatType); \
    1920     style.setGridAutoRepeat##TrackType##sInsertionPoint(tracksData.m_autoRepeatInsertionPoint);
     1926    SET_INHERIT_TRACKS_DATA(builderState.style(), builderState.parentStyle(), Column);
     1927}
    19211928
    19221929inline void BuilderCustom::applyValueGridTemplateColumns(BuilderState& builderState, CSSValue& value)
    … …  
    19341941inline void BuilderCustom::applyInitialGridTemplateRows(BuilderState& builderState)
    19351942{
    1936     builderState.style().setGridRows(RenderStyle::initialGridRows());
    1937     builderState.style().setNamedGridRowLines(RenderStyle::initialNamedGridRowLines());
    1938     builderState.style().setOrderedNamedGridRowLines(RenderStyle::initialOrderedNamedGridRowLines());
     1943    BuilderConverter::TracksData initialTracksData;
     1944    SET_TRACKS_DATA(initialTracksData, builderState.style(), Row);
    19391945}
    19401946
    19411947inline void BuilderCustom::applyInheritGridTemplateRows(BuilderState& builderState)
    19421948{
    1943     builderState.style().setGridRows(builderState.parentStyle().gridRows());
    1944     builderState.style().setNamedGridRowLines(builderState.parentStyle().namedGridRowLines());
    1945     builderState.style().setOrderedNamedGridRowLines(builderState.parentStyle().orderedNamedGridRowLines());
     1949    SET_INHERIT_TRACKS_DATA(builderState.style(), builderState.parentStyle(), Row);
    19461950}
    19471951
Note: See TracChangeset for help on using the changeset viewer.