Bug 1497589 Part 4: Set ComputedFlexContainerInfo physical axis values, and expose them through the Flex API. r=dholbert

Depends on D8616

Differential Revision: https://phabricator.services.mozilla.com/D8617

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Brad Werth 2018-10-17 20:23:09 +00:00
Родитель 55045f0ce3
Коммит e2f5a79f00
3 изменённых файлов: 36 добавлений и 0 удалений

Просмотреть файл

@ -41,6 +41,9 @@ Flex::Flex(Element* aParent,
mLines.ElementAt(index) = line;
index++;
}
mMainAxisDirection = containerInfo->mMainAxisDirection;
mCrossAxisDirection = containerInfo->mCrossAxisDirection;
}
JSObject*

Просмотреть файл

@ -303,6 +303,8 @@ public:
// Accessors:
// XXXdholbert [BEGIN DEPRECATED]
// These should not be used in layout, but they are useful for devtools API
// which reports physical axis direction.
AxisOrientationType GetMainAxis() const { return mMainAxis; }
AxisOrientationType GetCrossAxis() const { return mCrossAxis; }
// XXXdholbert [END DEPRECATED]
@ -4669,6 +4671,21 @@ nsFlexContainerFrame::IsUsedFlexBasisContent(const nsStyleCoord* aFlexBasis,
aMainSize->GetUnit() == eStyleUnit_Auto);
}
static mozilla::dom::FlexPhysicalDirection
ConvertAxisOrientationTypeToAPIEnum(AxisOrientationType aAxisOrientation)
{
switch (aAxisOrientation) {
case eAxis_LR:
return mozilla::dom::FlexPhysicalDirection::Horizontal_lr;
case eAxis_RL:
return mozilla::dom::FlexPhysicalDirection::Horizontal_rl;
case eAxis_TB:
return mozilla::dom::FlexPhysicalDirection::Vertical_tb;
default:
return mozilla::dom::FlexPhysicalDirection::Vertical_bt;
}
}
void
nsFlexContainerFrame::DoFlexLayout(nsPresContext* aPresContext,
ReflowOutput& aDesiredSize,
@ -4723,6 +4740,19 @@ nsFlexContainerFrame::DoFlexLayout(nsPresContext* aPresContext,
"Shouldn't have lines yet.");
}
// Set the axis physical directions.
AxisOrientationType mainAxis = aAxisTracker.GetMainAxis();
AxisOrientationType crossAxis = aAxisTracker.GetCrossAxis();
if (aAxisTracker.AreAxesInternallyReversed()) {
mainAxis = GetReverseAxis(mainAxis);
crossAxis = GetReverseAxis(crossAxis);
}
containerInfo->mMainAxisDirection =
ConvertAxisOrientationTypeToAPIEnum(mainAxis);
containerInfo->mCrossAxisDirection =
ConvertAxisOrientationTypeToAPIEnum(crossAxis);
for (const FlexLine* line = lines.getFirst(); line;
line = line->getNext()) {
ComputedFlexLineInfo* lineInfo =

Просмотреть файл

@ -11,6 +11,7 @@
#include "nsContainerFrame.h"
#include "mozilla/UniquePtr.h"
#include "mozilla/dom/FlexBinding.h"
class nsStyleCoord;
@ -72,6 +73,8 @@ struct ComputedFlexLineInfo
struct ComputedFlexContainerInfo
{
nsTArray<ComputedFlexLineInfo> mLines;
mozilla::dom::FlexPhysicalDirection mMainAxisDirection;
mozilla::dom::FlexPhysicalDirection mCrossAxisDirection;
};
/**