Bug 1152913 part 1: Make FlexboxAxisTracker store the WritingMode & representation of how flex axes map to it. r=mats

This commit is contained in:
Daniel Holbert 2015-04-10 13:35:15 -07:00
parent 49fa4bf5dd
commit 4d8faad43f

View File

@ -160,11 +160,26 @@ public:
const WritingMode& aWM);
// Accessors:
// XXXdholbert [BEGIN DEPRECATED]
AxisOrientationType GetMainAxis() const { return mMainAxis; }
AxisOrientationType GetCrossAxis() const { return mCrossAxis; }
bool IsMainAxisHorizontal() const { return IsAxisHorizontal(mMainAxis); }
bool IsCrossAxisHorizontal() const { return IsAxisHorizontal(mCrossAxis); }
// XXXdholbert [END DEPRECATED]
// Returns true if our main axis is in the reverse direction of our
// writing mode's corresponding axis. (From 'flex-direction: *-reverse')
bool IsMainAxisReversed() const {
return mIsMainAxisReversed;
}
// Returns true if our cross axis is in the reverse direction of our
// writing mode's corresponding axis. (From 'flex-wrap: *-reverse')
bool IsCrossAxisReversed() const {
return mIsCrossAxisReversed;
}
bool IsRowOriented() const { return mIsRowOriented; }
nscoord GetMainComponent(const nsSize& aSize) const {
return GET_MAIN_COMPONENT(*this, aSize.width, aSize.height);
@ -259,12 +274,27 @@ private:
// XXXdholbert This is private so that callers outside of FlexboxAxisTracker
// don't depend on it. This lets us move away from AxisOrientationType to a
// logical-axis-relative representation more seamlessly.
// XXXdholbert [BEGIN DEPRECATED]
static inline bool IsAxisHorizontal(AxisOrientationType aAxis) {
return eAxis_LR == aAxis || eAxis_RL == aAxis;
}
AxisOrientationType mMainAxis;
AxisOrientationType mCrossAxis;
// XXXdholbert [END DEPRECATED]
const WritingMode mWM; // The flex container's writing mode.
bool mIsRowOriented; // Is our main axis the inline axis?
// (Are we 'flex-direction:row[-reverse]'?)
bool mIsMainAxisReversed; // Is our main axis in the opposite direction
// as mWM's corresponding axis? (e.g. RTL vs LTR)
bool mIsCrossAxisReversed; // Is our cross axis in the opposite direction
// as mWM's corresponding axis? (e.g. BTT vs TTB)
// Implementation detail -- this indicates whether we've decided to
// transparently reverse our axes & our child ordering, to avoid having
// frames flow from bottom to top in either axis (& to make pagination saner).
bool mAreAxesInternallyReversed;
};
@ -2927,7 +2957,8 @@ BlockDirToAxisOrientation(WritingMode::BlockDir aBlockDir)
FlexboxAxisTracker::FlexboxAxisTracker(const nsStylePosition* aStylePosition,
const WritingMode& aWM)
: mAreAxesInternallyReversed(false)
: mWM(aWM),
mAreAxesInternallyReversed(false)
{
uint32_t flexDirection = aStylePosition->mFlexDirection;
@ -2936,23 +2967,31 @@ FlexboxAxisTracker::FlexboxAxisTracker(const nsStylePosition* aStylePosition,
// those terms have explicit definition in the writing-modes spec, which are
// the opposite of how I'd be using them here.)
AxisOrientationType inlineDimension =
InlineDirToAxisOrientation(aWM.GetInlineDir());
InlineDirToAxisOrientation(mWM.GetInlineDir());
AxisOrientationType blockDimension =
BlockDirToAxisOrientation(aWM.GetBlockDir());
BlockDirToAxisOrientation(mWM.GetBlockDir());
// Determine main axis:
switch (flexDirection) {
case NS_STYLE_FLEX_DIRECTION_ROW:
mMainAxis = inlineDimension;
mIsRowOriented = true;
mIsMainAxisReversed = false;
break;
case NS_STYLE_FLEX_DIRECTION_ROW_REVERSE:
mMainAxis = GetReverseAxis(inlineDimension);
mIsRowOriented = true;
mIsMainAxisReversed = true;
break;
case NS_STYLE_FLEX_DIRECTION_COLUMN:
mMainAxis = blockDimension;
mIsRowOriented = false;
mIsMainAxisReversed = false;
break;
case NS_STYLE_FLEX_DIRECTION_COLUMN_REVERSE:
mMainAxis = GetReverseAxis(blockDimension);
mIsRowOriented = false;
mIsMainAxisReversed = true;
break;
default:
MOZ_CRASH("Unexpected computed value for 'flex-flow' property");
@ -2971,6 +3010,9 @@ FlexboxAxisTracker::FlexboxAxisTracker(const nsStylePosition* aStylePosition,
// "flex-wrap: wrap-reverse" reverses our cross axis.
if (aStylePosition->mFlexWrap == NS_STYLE_FLEX_WRAP_WRAP_REVERSE) {
mCrossAxis = GetReverseAxis(mCrossAxis);
mIsCrossAxisReversed = true;
} else {
mIsCrossAxisReversed = false;
}
// Master switch to enable/disable bug 983427's code for reversing our axes
@ -2986,6 +3028,8 @@ FlexboxAxisTracker::FlexboxAxisTracker(const nsStylePosition* aStylePosition,
mMainAxis = GetReverseAxis(mMainAxis);
mCrossAxis = GetReverseAxis(mCrossAxis);
mAreAxesInternallyReversed = true;
mIsMainAxisReversed = !mIsMainAxisReversed;
mIsCrossAxisReversed = !mIsCrossAxisReversed;
}
}