Commit Graph

359 Commits

Author SHA1 Message Date
Daniel Holbert
75d2d72989 Bug 812687 part 6: Rename & invert polarity of a flexbox frame-state-bit, for consistency with grid. r=mats
This patch is just flipping some logic in a way that should produce the same
outcome, so it shouldn't affect behavior.

MozReview-Commit-ID: LM4HbJD3D9w
2017-04-05 19:31:47 -07:00
Daniel Holbert
77a2a41739 Bug 812687 part 5: Adjust nsFlexContainerFrame to use CSSOrderAwareFrameIterator instead of reordering its child frame list. r=mats
This patch shouldn't change our layout order or paint order for flex items
(though it will change our behavior for the better when an abspos child is
present, as discussed in bug 1345873).

This patch *will* change the tab-index behavior of flex items. Previously, the
default tab order would match the visual order (i.e. it would respect "order"),
because it depends on the frame tree, and we sorted the frame tree by
"order". Now, the tab-index will come from the DOM order (the unmodified frame
tree), as the spec requires.

MozReview-Commit-ID: 9OsqQX1sEn3
2017-04-05 19:31:47 -07:00
Ting-Yu Lin
c9565a3132 Bug 1322570 Part 3 - Get StyleContext from parent frame in nsFlexContainerFrame::Init(). r=dholbert
In stylo, nsStyleContext::GetParent() is not valid.

MozReview-Commit-ID: 5FbgUwobG3U
2017-03-20 14:12:28 +08:00
Mats Palmgren
4729a520a5 Bug 1333482 part 2 - [css-ui] Change all consumers of StyleDisplay::mAppearance to use the accessor UsedAppearance() instead, and make mAppearance/mMozAppearance private. r=dholbert
MozReview-Commit-ID: 8JwLsY1CLDJ
2017-03-23 22:11:18 -07:00
Daniel Holbert
f89085c65d Bug 1340309 part 1: Resolve "align-self:auto"/"justify-self:auto" to flex/grid parent's *-items value, when resolving static pos of abspos children. r=mats
MozReview-Commit-ID: 6fSmo1WGqow
2017-02-24 08:38:31 -08:00
Ting-Yu Lin
e6769617e9 Bug 775624 Part 22 - Remove NS_FRAME_COMPLETE. r=dholbert
This patch is written by the following script with some manual adjustment to
the comment in nsRubyTextContainerFrame.cpp and nsRubyFrame.cpp, and
nsColumnSetFrame's constructor.

function rename() {
find layout\
     -type f\
     \( -name "*.cpp" -or\
        -name "*.h" \)\
        -exec sed -i -r "s/$1/$2/g" "{}" \;
}

rename "nsReflowStatus *([a-zA-Z0-9]*) = NS_FRAME_COMPLETE" "nsReflowStatus \1"
rename "([a-zA-Z0-9.*]*) *= NS_FRAME_COMPLETE;" "\1.Reset();"
rename "([a-zA-Z0-9.*]*) == NS_FRAME_COMPLETE" "\1.IsEmpty()"

MozReview-Commit-ID: 9tqQAHvdQex
2017-02-14 17:55:48 +08:00
Ting-Yu Lin
19548476c9 Bug 775624 Part 7 - Remove NS_FRAME_SET_INCOMPLETE. r=dholbert
This patch is written by the help of the following script.

function rename() {
find layout\
     -type f\
     \( -name "*.cpp" -or\
        -name "*.h" \)\
        -exec sed -i -r "s/$1/$2/g" "{}" \;
}

rename "NS_FRAME_SET_INCOMPLETE\(\*([a-zA-Z0-9.*]*)\)" "\1->SetIncomplete()"
rename "NS_FRAME_SET_INCOMPLETE\(([a-zA-Z0-9.*]*)\)" "\1.SetIncomplete()"

MozReview-Commit-ID: GOd4y2N6dcz
2017-02-11 23:06:17 +08:00
Ting-Yu Lin
8d6d261f9f Bug 775624 Part 5 - Remove NS_FRAME_IS_COMPLETE. r=dholbert
This patch is written by the help of the following script.

function rename() {
find layout\
     -type f\
     \( -name "*.cpp" -or\
        -name "*.h" \)\
        -exec sed -i -r "s/$1/$2/g" "{}" \;
}

rename "NS_FRAME_IS_COMPLETE\(([a-zA-Z0-9.*]*)\)" "\1.IsComplete()"

MozReview-Commit-ID: GOd4y2N6dcz
2017-02-11 22:45:07 +08:00
Daniel Holbert
0b0d45f941 Bug 1338053: Make nsFlexContainerFrame::MarkIntrinsicISizesDirty() also call its parent class's method. r=emilio
MozReview-Commit-ID: 72oIlunLcVq
2017-02-08 23:08:43 -08:00
Emilio Cobos Álvarez
26da59250b Bug 1336708: Don't reuse cached flex-item reflow measurements if the item's computed height has changed. r=dholbert
For some stretched items, we override the computed height of the input for
measuring reflows, which may change the ascent and height result.

Just use that as a key for the reflow result cache too.

MozReview-Commit-ID: 9NyObfVucnC
2017-02-07 21:00:45 +01:00
Emilio Cobos Álvarez
ca5d1fcc3f Bug 1209697: Part 2, Cache flex measuring reflows to avoid exponential behavior. r=dholbert
MozReview-Commit-ID: 8vcLUvASEFM
Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
2017-01-06 15:34:16 +01:00
Mats Palmgren
61cfb996e0 Bug 1312379 part 2 - [css-flexbox] Improve support for CSS Alignment 'last baseline' alignment by exporting the last baseline when asked for. r=dholbert 2016-12-20 23:56:35 +01:00
Mats Palmgren
05b26d81fe Bug 1312379 part 1 - [css-align][css-flexbox][css-grid] Introduce nsIFrame methods for calculating baselines per CSS Alignment and CSS2 'vertical-align'. r=dholbert 2016-12-20 23:56:35 +01:00
Mats Palmgren
a20d15d791 Bug 1313811 - [css-flexbox] Synthesize the flex container baseline per alignment context when needed. r=dholbert 2016-12-20 23:56:34 +01:00
Daniel Holbert
b6e1c09873 Bug 1321698 part 3: Fold nsFlexContainerFrame's old IsLegacyBox() function into its only remaining caller, nsFlexContainerFrame::Init(). r=mats
This patch is to prevent any new callers of this API, since we can now rely on
the new frame state bit (NS_STATE_FLEX_IS_LEGACY_WEBKIT_BOX) to test for this.

MozReview-Commit-ID: BONaqPC30Cn
2016-12-02 10:44:07 -08:00
Daniel Holbert
722ae072a3 Bug 1321698 part 2: Use the new frame state bit to check for -webkit-box containers. r=mats
Note that at the callsites in nsCSSFrameConstructor.cpp, we have to also check
the frame type (since the frame state bit is in a range of bits whose meaning
differs depending on frame type).  The first change in this patch is the
addition of a convenience fucntion that checks both the frame type as well as
the frame state bit.

MozReview-Commit-ID: DEOThTX5NAO
2016-12-02 10:32:31 -08:00
Daniel Holbert
5525e62a8c Bug 1321698 part 1: Set a frame state bit on nsFlexContainerFrame if it's emulating -webkit-box. r=mats
MozReview-Commit-ID: 5eL55atUBnT
2016-12-02 01:02:00 -08:00
Brad Werth
48766c6be8 Bug 1221524 Part 3: Implement align-self:last baseline behavior in flex containers. r=dholbert
MozReview-Commit-ID: 7Qo7LPu74Ra
2016-11-07 09:53:14 -08:00
Brad Werth
73a61a957d Bug 1221524 Part 1: Map align-self:"baseline" to "flex-start" when FlexItem writing mode is orthogonal to container main axis. r=dholbert
MozReview-Commit-ID: 2IlkVDWNirG
2016-10-31 14:46:52 -07:00
Mats Palmgren
d9df1bc378 Bug 1313254 part 2 - [css-align] Change "last-baseline" to "last baseline" in layout/ (scripted change). r=dholbert 2016-11-05 02:57:07 +01:00
Mats Palmgren
f00cf4e1ad Bug 1300369 part 8 - Move nsLayoutUtils::ComputeSizeWithIntrinsicDimensions to a nsFrame method (idempotent patch). r=dholbert 2016-11-05 02:57:06 +01:00
Daniel Holbert
046bfe73d7 Bug 1269046 part 7: Give nsFlexContainerFrame a CSSAlignmentForAbsPosChild() implementation (to determine appropriate align enum for abspos children). r=mats
MozReview-Commit-ID: LFQfKPlR9Gv
2016-10-31 08:59:40 -07:00
Daniel Holbert
4039ad99a4 Bug 1269046 part 6: Add a flags enum-class to customize FlexboxAxisTracker behavior. r=mats
Right now, there's only one flag in this new class (with no usages until a
later patch). This flag suppresses a hack, which otherwise makes us
transparently reverse the child list & flex axes in some circumstances, to
prevent bottom-to-top child ordering. (We don't want that hack when we're
dealing with individual abspos children, since it only makes things more
complicated.)

MozReview-Commit-ID: HYUf0vjlfiJ
2016-10-31 08:58:18 -07:00
Daniel Holbert
6f4f739c51 Bug 1269046 part 4: Set flags on nsPlaceholderFrame & ReflowInput to track abspos frames that need CSS Box Alignment to resolve static position. r=mats
(We'll react to the ReflowInput flags and do the actual CSS Box Alignment in a
later patch in this series.)

MozReview-Commit-ID: EZd7npWSzQI
2016-10-31 08:58:18 -07:00
Daniel Holbert
dbc9ef0f5b Bug 1269045 part 3: Stop wrapping placeholder frames in anonymous flex items. r=mats
This patch also:
 * Removes some now-unnecessary code from nsFlexContainerFrame, which was for jumping from wrapped-placeholders to their out-of-flow frames (for DOM comparisons). This code is now unnecessary because placeholders won't be wrapped anymore.
 * Updates some reftests with abspos content to match the updated spec's expectations, with one marked as "fails" for the time being (until bug 1269046 implements css box alignment, which we need to render that test correctly).

MozReview-Commit-ID: 8canWfXk6Kf
2016-10-31 08:58:17 -07:00
Daniel Holbert
c612fd5a12 Bug 1269045 part 2: Separate out abspos placeholders when creating FlexItems, and give them a trivial reflow at container's content-box origin. r=mats
MozReview-Commit-ID: 5lXUsusLryC
2016-10-31 08:58:17 -07:00
Daniel Holbert
abc754ea58 Bug 1269045 part 1: Adjust flex item "order"-sorting code to treat placeholder frames as <= anything they're compared against, including each other. r=mats
This patch makes the following specific changes:
 (1) Adds an early-return to both versions of the IsOrderLEQ function, to treat placeholder children as LEQ everything (including each other). This will tend to sort them to the beginning of the child list, which is unimportant but fine. More importantly, though: this means our "order"-sorting code won't reorder placeholders *with respect to each other* (since our sort algorithm is stable). So their painting order won't be affected by the "order" property, which is required by the spec.
 (2) Drops some nsPlaceholderFrame::GetRealFrameFor() calls -- they're unnecessary, since any placeholder frames will have prompted us to return earlier.

One caveat to (2): this patch does leave a few "nsPlaceholderFrame::GetRealFrameFor()" calls in place, *for the moment*.  These remaining calls are for handling placeholders that are wrapped, i.e. inside of anonymous flex items. These calls are still needed to avoid assertion-failures (i.e. to get a consistent ordering) at this point, but they'll be removed in a later patch in this same bug, when we stop wrapping placeholders in anonymous flex items.

MozReview-Commit-ID: 1R6NW30Kxgv
2016-10-31 08:58:17 -07:00
Phil Ringnalda
04ae3c60e8 Backed out 12 changesets (bug 1269045, bug 1269046) as the most likely cause of Windows build bustage
CLOSED TREE

Backed out changeset 16db55b642a9 (bug 1269046)
Backed out changeset a0008dd33cf4 (bug 1269046)
Backed out changeset 75b58c4e61e6 (bug 1269046)
Backed out changeset fb7655f3e1cf (bug 1269046)
Backed out changeset 8088e5a9e6e3 (bug 1269046)
Backed out changeset eea6479452f0 (bug 1269046)
Backed out changeset eb4b52bf06ec (bug 1269046)
Backed out changeset 539db74e4a88 (bug 1269046)
Backed out changeset f57f9ac1435e (bug 1269045)
Backed out changeset 2162d5c9fb54 (bug 1269045)
Backed out changeset 7aa8199183fc (bug 1269045)
Backed out changeset 86a391e3e163 (bug 1269045)

MozReview-Commit-ID: HYL7Bh8l02E
2016-10-27 21:59:00 -07:00
Daniel Holbert
f0899cafae Bug 1269046 part 7: Give nsFlexContainerFrame a CSSAlignmentForAbsPosChild() implementation (to determine appropriate align enum for abspos children). r=mats
MozReview-Commit-ID: LFQfKPlR9Gv
2016-10-27 18:58:26 -07:00
Daniel Holbert
4746b90f98 Bug 1269046 part 6: Add a flags enum-class to customize FlexboxAxisTracker behavior. r=mats
Right now, there's only one flag in this new class (with no usages until a
later patch). This flag suppresses a hack, which otherwise makes us
transparently reverse the child list & flex axes in some circumstances, to
prevent bottom-to-top child ordering. (We don't want that hack when we're
dealing with individual abspos children, since it only makes things more
complicated.)

MozReview-Commit-ID: HYUf0vjlfiJ
2016-10-27 18:58:26 -07:00
Daniel Holbert
51815d7446 Bug 1269046 part 4: Set flags on nsPlaceholderFrame & ReflowInput to track abspos frames that need CSS Box Alignment to resolve static position. r=mats
(We'll react to the ReflowInput flags and do the actual CSS Box Alignment in a
later patch in this series.)

MozReview-Commit-ID: EZd7npWSzQI
2016-10-27 18:58:26 -07:00
Daniel Holbert
4ec892cc09 Bug 1269045 part 3: Stop wrapping placeholder frames in anonymous flex items. r=mats
This patch also:
 * Removes some now-unnecessary code from nsFlexContainerFrame, which was for jumping from wrapped-placeholders to their out-of-flow frames (for DOM comparisons). This code is now unnecessary because placeholders won't be wrapped anymore.
 * Updates some reftests with abspos content to match the updated spec's expectations, with one marked as "fails" for the time being (until bug 1269046 implements css box alignment, which we need to render that test correctly).

MozReview-Commit-ID: 8canWfXk6Kf
2016-10-27 18:58:26 -07:00
Daniel Holbert
76e7d7d54f Bug 1269045 part 2: Separate out abspos placeholders when creating FlexItems, and give them a trivial reflow at container's content-box origin. r=mats
MozReview-Commit-ID: 5lXUsusLryC
2016-10-27 18:58:26 -07:00
Daniel Holbert
7b6b5973bb Bug 1269045 part 1: Adjust flex item "order"-sorting code to treat placeholder frames as <= anything they're compared against, including each other. r=mats
This patch makes the following specific changes:
 (1) Adds an early-return to both versions of the IsOrderLEQ function, to treat placeholder children as LEQ everything (including each other). This will tend to sort them to the beginning of the child list, which is unimportant but fine. More importantly, though: this means our "order"-sorting code won't reorder placeholders *with respect to each other* (since our sort algorithm is stable). So their painting order won't be affected by the "order" property, which is required by the spec.
 (2) Drops some nsPlaceholderFrame::GetRealFrameFor() calls -- they're unnecessary, since any placeholder frames will have prompted us to return earlier.

One caveat to (2): this patch does leave a few "nsPlaceholderFrame::GetRealFrameFor()" calls in place, *for the moment*.  These remaining calls are for handling placeholders that are wrapped, i.e. inside of anonymous flex items. These calls are still needed to avoid assertion-failures (i.e. to get a consistent ordering) at this point, but they'll be removed in a later patch in this same bug, when we stop wrapping placeholders in anonymous flex items.

MozReview-Commit-ID: 1R6NW30Kxgv
2016-10-27 18:58:25 -07:00
Daniel Holbert
e8ea031c67 Bug 1313421 part 2: Use flex container's FlexLine linked-list to determine the first flex item, rather than its child-frame list. r=mats
This shouldn't change our behavior right now, but it will make a difference
after bug 1269045 -- when that bug lands, we'll have nsPlaceholderFrames (which
are not flex items) in the child-frame list, which means we can't depend on its
first entry being a flex item anymore.

MozReview-Commit-ID: KRXYaK8R8bc
2016-10-27 18:56:48 -07:00
Daniel Holbert
255517923b Bug 1313421 part 1: Unconditionally cache a FlexItem's ascent, after it's been reflowed. r=mats
This removes a (very minor) optimization. The optimization was simply that we
avoided storing this nscoord value, if we could tell that we weren't ever going
to need it. Now it's becoming a bit more complicated to prove that we'll never
need it, so we might as well just store it unconditionally.

MozReview-Commit-ID: 94FFc9SO516
2016-10-27 18:56:41 -07:00
Daniel Holbert
7129e2309d Bug 1309119 part 2: Make nsFlexContainerFrame::IsLegacyBox assert that legacy -webkit-box elements are backed by nsFlexContainerFrame. r=mats
MozReview-Commit-ID: 62VsCtKJg3C
2016-10-20 13:23:51 -07:00
Daniel Holbert
ff99650d94 Bug 1309119 part 1: Expose nsFlexContainerFrame helper-function IsLegacyBox as a static method. r=mats
MozReview-Commit-ID: 8fztWk2sp0L
2016-10-20 13:23:51 -07:00
Brad Werth
5efd23fdd5 Bug 1235922 Part 4: Add support for "align-content: space-evenly" to flexbox layout. r=mats
MozReview-Commit-ID: 3ETuPrIURJ3
2016-10-14 17:17:33 -07:00
Daniel Holbert
fc4f02bd1d Bug 1235922 Part 2: Add support for "justify-content: space-evenly" to flexbox layout. r=mats
MozReview-Commit-ID: 6Am15EIVAXH
2016-10-14 17:16:00 -07:00
Brad Werth
b3ab8b18b5 Bug 1235922 Part 1: Introduce a helper-function to share code for justify-content and align-content space-around and space-between in flexbox layout. r=mats
MozReview-Commit-ID: tncRJiojh
2016-10-14 17:23:36 -07:00
Brad Werth
23a798cfe6 Bug 1310015: Change MainAxisTracker to consistently use NS_STYLE_JUSTIFY constants. r=mats
MozReview-Commit-ID: F8VfIuZJqFa
2016-10-13 14:20:48 -07:00
Julian Descottes
767cf287ed Bug 1308993 - aboutdebugging remove align-items: self-start;r=erahm
MozReview-Commit-ID: 7d054lVgwdt
2016-10-13 16:42:26 +02:00
Daniel Holbert
19aa0ed340 Bug 1090031: Apply CSS 'align-content' in flex containers if they *could* wrap (rather than if they *have* wrapped). r=mats
The spec says that single-line flex containers should stretch their one flex
line to the flex container's cross size, and should ignore 'align-content'.

Initially, the spec defined 'single-line' to include any flex container that
happens to have only 1 line (even if it's got 'flex-wrap:wrap' or
'wrap-reverse'). But later, the term 'single-line' was intentionally redefined
to *only* include flex containers that have 'flex-wrap: nowrap'.  So, instead
of checking the line-count, we should instead check 'flex-wrap', when deciding
whether to stretch our one line & ignore 'align-content'.


MozReview-Commit-ID: D2ZMIBS16ui
2016-10-12 09:04:03 -07:00
Wes Kocher
875b8d2e93 Backed out changeset 37e0c017b268 (bug 1090031) for reftest failures a=backout 2016-10-12 14:46:23 -07:00
Daniel Holbert
7be0e7ad64 Bug 1090031: Apply CSS 'align-content' in flex containers if they *could* wrap (rather than if they *have* wrapped). r=mats
The spec says that single-line flex containers should stretch their one flex
line to the flex container's cross size, and should ignore 'align-content'.

Initially, the spec defined 'single-line' to include any flex container that
happens to have only 1 line (even if it's got 'flex-wrap:wrap' or
'wrap-reverse'). But later, the term 'single-line' was intentionally redefined
to *only* include flex containers that have 'flex-wrap: nowrap'.  So, instead
of checking the line-count, we should instead check 'flex-wrap', when deciding
whether to stretch our one line & ignore 'align-content'.


MozReview-Commit-ID: D2ZMIBS16ui
2016-10-12 09:04:03 -07:00
Brad Werth
59ba3ec6e3 Bug 1306894 Part 1: Cache baseline from nsFlexContainerFrame::Reflow() for use in later calls to GetLogicalBaseline(). r=dholbert
MozReview-Commit-ID: JXUK8a0L1RZ
2016-10-11 12:54:00 -07:00
Brad Werth
bd72b09910 Bug 1221565 Part 2: Make nsFlexContainerFrame map justify-content and align-content values of 'left' and 'right' to 'start' or 'end'. r=dholbert
MozReview-Commit-ID: 8sZyFwIlpr4
2016-10-07 09:22:52 -07:00
Brad Werth
ca944ec246 Bug 1221565 Part 1: Make nsFlexContainerFrame map align-self values of 'left' and 'right' to either 'start' or 'end'. r=dholbert
MozReview-Commit-ID: 8Xv4BzZ3Okv
2016-10-06 15:55:39 -07:00
Mats Palmgren
860b9c5155 Bug 984869 - Add support for display:flex/grid and columnset layout to <button>. r=tn 2016-10-06 22:43:22 +02:00