mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 1152913 part 1: Make FlexboxAxisTracker store the WritingMode & representation of how flex axes map to it. r=mats
This commit is contained in:
parent
49fa4bf5dd
commit
4d8faad43f
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user