зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 3 changesets (bug 1809568) for causing build bustages on nsLineLayout.cpp. CLOSED TREE
Backed out changeset 573dc0bd9554 (bug 1809568) Backed out changeset b8401947aea0 (bug 1809568) Backed out changeset 7ecabe895121 (bug 1809568)
This commit is contained in:
Родитель
e50ec05b89
Коммит
c9ffb3ffa8
|
@ -3020,7 +3020,6 @@ exports.CSS_PROPERTIES = {
|
|||
"float",
|
||||
"clear",
|
||||
"vertical-align",
|
||||
"baseline-source",
|
||||
"overflow-clip-box-inline",
|
||||
"overflow-clip-box-block",
|
||||
"overflow-x",
|
||||
|
@ -4014,23 +4013,6 @@ exports.CSS_PROPERTIES = {
|
|||
"unset"
|
||||
]
|
||||
},
|
||||
"baseline-source": {
|
||||
"isInherited": false,
|
||||
"subproperties": [
|
||||
"baseline-source"
|
||||
],
|
||||
"supports": [],
|
||||
"values": [
|
||||
"auto",
|
||||
"first",
|
||||
"inherit",
|
||||
"initial",
|
||||
"last",
|
||||
"revert",
|
||||
"revert-layer",
|
||||
"unset"
|
||||
]
|
||||
},
|
||||
"block-size": {
|
||||
"isInherited": false,
|
||||
"subproperties": [
|
||||
|
|
|
@ -19,12 +19,6 @@ enum class BaselineSharingGroup : uint8_t {
|
|||
Last = 1,
|
||||
};
|
||||
|
||||
// Layout context under which the baseline is being exported to.
|
||||
enum class BaselineExportContext : uint8_t {
|
||||
LineLayout = 0,
|
||||
Other = 1,
|
||||
};
|
||||
|
||||
class Baseline {
|
||||
public:
|
||||
/**
|
||||
|
|
|
@ -5954,8 +5954,8 @@ bool nsLayoutUtils::GetLastLineBaseline(WritingMode aWM, const nsIFrame* aFrame,
|
|||
// `ColumnSetWrapperFrame` level, but this keeps it symmetric to
|
||||
// `GetFirstLinePosition`.
|
||||
if (aFrame->IsColumnSetFrame()) {
|
||||
const auto baseline = aFrame->GetNaturalBaselineBOffset(
|
||||
aWM, BaselineSharingGroup::Last, BaselineExportContext::Other);
|
||||
const auto baseline =
|
||||
aFrame->GetNaturalBaselineBOffset(aWM, BaselineSharingGroup::Last);
|
||||
if (!baseline) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -86,8 +86,7 @@ LogicalSize nsCheckboxRadioFrame::ComputeAutoSize(
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsCheckboxRadioFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
NS_ASSERTION(!IsSubtreeDirty(), "frame must not be dirty");
|
||||
|
||||
if (aBaselineGroup == BaselineSharingGroup::Last) {
|
||||
|
|
|
@ -62,8 +62,8 @@ class nsCheckboxRadioFrame final : public nsAtomicContainerFrame,
|
|||
nsEventStatus* aEventStatus) override;
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
/**
|
||||
* Respond to the request to resize and/or reflow
|
||||
|
|
|
@ -65,8 +65,7 @@ nscoord nsDateTimeControlFrame::GetPrefISize(gfxContext* aRenderingContext) {
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsDateTimeControlFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
return nsTextControlFrame::GetSingleLineTextControlBaseline(
|
||||
this, mFirstBaseline, aWM, aBaselineGroup);
|
||||
}
|
||||
|
|
|
@ -62,8 +62,8 @@ class nsDateTimeControlFrame final : public nsContainerFrame {
|
|||
nsReflowStatus& aStatus) override;
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
nscoord mFirstBaseline = NS_INTRINSIC_ISIZE_UNKNOWN;
|
||||
};
|
||||
|
|
|
@ -851,8 +851,7 @@ nscoord nsFieldSetFrame::SynthesizeFallbackBaseline(
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsFieldSetFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
if (StyleDisplay()->IsContainLayout()) {
|
||||
// If we are layout-contained, our child 'inner' should not
|
||||
// affect how we calculate our baseline.
|
||||
|
@ -863,8 +862,7 @@ Maybe<nscoord> nsFieldSetFrame::GetNaturalBaselineBOffset(
|
|||
return Nothing{};
|
||||
}
|
||||
MOZ_ASSERT(!inner->GetWritingMode().IsOrthogonalTo(aWM));
|
||||
const auto result =
|
||||
inner->GetNaturalBaselineBOffset(aWM, aBaselineGroup, aExportContext);
|
||||
const auto result = inner->GetNaturalBaselineBOffset(aWM, aBaselineGroup);
|
||||
if (!result) {
|
||||
return Nothing{};
|
||||
}
|
||||
|
|
|
@ -41,8 +41,8 @@ class nsFieldSetFrame final : public nsContainerFrame {
|
|||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
BaselineSharingGroup GetDefaultBaselineSharingGroup() const override;
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
|
|
@ -313,8 +313,7 @@ void nsHTMLButtonControlFrame::ReflowButtonContents(
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsHTMLButtonControlFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
if (StyleDisplay()->IsContainLayout()) {
|
||||
return Nothing{};
|
||||
}
|
||||
|
@ -323,12 +322,11 @@ Maybe<nscoord> nsHTMLButtonControlFrame::GetNaturalBaselineBOffset(
|
|||
if (MOZ_UNLIKELY(inner->GetWritingMode().IsOrthogonalTo(aWM))) {
|
||||
return Nothing{};
|
||||
}
|
||||
auto result =
|
||||
inner->GetNaturalBaselineBOffset(aWM, aBaselineGroup, aExportContext)
|
||||
.valueOrFrom([inner, aWM, aBaselineGroup]() {
|
||||
return Baseline::SynthesizeBOffsetFromBorderBox(inner, aWM,
|
||||
aBaselineGroup);
|
||||
});
|
||||
auto result = inner->GetNaturalBaselineBOffset(aWM, aBaselineGroup)
|
||||
.valueOrFrom([inner, aWM, aBaselineGroup]() {
|
||||
return Baseline::SynthesizeBOffsetFromBorderBox(
|
||||
inner, aWM, aBaselineGroup);
|
||||
});
|
||||
|
||||
nscoord innerBStart = inner->BStart(aWM, GetSize());
|
||||
if (aBaselineGroup == BaselineSharingGroup::First) {
|
||||
|
|
|
@ -39,8 +39,8 @@ class nsHTMLButtonControlFrame : public nsContainerFrame,
|
|||
nsReflowStatus& aStatus) override;
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
virtual nsresult HandleEvent(nsPresContext* aPresContext,
|
||||
mozilla::WidgetGUIEvent* aEvent,
|
||||
|
|
|
@ -71,8 +71,7 @@ nsListControlFrame::nsListControlFrame(ComputedStyle* aStyle,
|
|||
nsListControlFrame::~nsListControlFrame() = default;
|
||||
|
||||
Maybe<nscoord> nsListControlFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
// Unlike scroll frames which we inherit from, we don't export a baseline.
|
||||
return Nothing{};
|
||||
}
|
||||
|
|
|
@ -56,8 +56,8 @@ class nsListControlFrame final : public nsHTMLScrollFrame,
|
|||
NS_DECL_FRAMEARENA_HELPERS(nsListControlFrame)
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
// nsIFrame
|
||||
nsresult HandleEvent(nsPresContext* aPresContext,
|
||||
|
|
|
@ -78,8 +78,8 @@ class nsTextControlFrame : public nsContainerFrame,
|
|||
nsReflowStatus& aStatus) override;
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override {
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override {
|
||||
if (!IsSingleLineTextControl()) {
|
||||
return Nothing{};
|
||||
}
|
||||
|
|
|
@ -60,8 +60,7 @@ class BRFrame final : public nsIFrame {
|
|||
nscoord GetPrefISize(gfxContext* aRenderingContext) override;
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override;
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
bool IsFrameOfType(uint32_t aFlags) const override {
|
||||
return nsIFrame::IsFrameOfType(
|
||||
|
@ -204,8 +203,7 @@ nscoord BRFrame::GetPrefISize(gfxContext* aRenderingContext) {
|
|||
}
|
||||
|
||||
Maybe<nscoord> BRFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
if (aBaselineGroup == BaselineSharingGroup::Last) {
|
||||
return Nothing{};
|
||||
}
|
||||
|
|
|
@ -235,8 +235,7 @@ nscoord ColumnSetWrapperFrame::GetPrefISize(gfxContext* aRenderingContext) {
|
|||
template <typename Iterator>
|
||||
Maybe<nscoord> ColumnSetWrapperFrame::GetBaselineBOffset(
|
||||
Iterator aStart, Iterator aEnd, WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const {
|
||||
BaselineSharingGroup aBaselineGroup) const {
|
||||
// Either forward iterator + first baseline, or reverse iterator + last
|
||||
// baseline
|
||||
MOZ_ASSERT((*aStart == PrincipalChildList().FirstChild() &&
|
||||
|
@ -252,8 +251,7 @@ Maybe<nscoord> ColumnSetWrapperFrame::GetBaselineBOffset(
|
|||
// baseline.
|
||||
for (auto itr = aStart; itr != aEnd; ++itr) {
|
||||
const nsIFrame* kid = *itr;
|
||||
auto kidBaseline =
|
||||
kid->GetNaturalBaselineBOffset(aWM, aBaselineGroup, aExportContext);
|
||||
auto kidBaseline = kid->GetNaturalBaselineBOffset(aWM, aBaselineGroup);
|
||||
if (!kidBaseline) {
|
||||
continue;
|
||||
}
|
||||
|
@ -272,16 +270,13 @@ Maybe<nscoord> ColumnSetWrapperFrame::GetBaselineBOffset(
|
|||
}
|
||||
|
||||
Maybe<nscoord> ColumnSetWrapperFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
if (aBaselineGroup == BaselineSharingGroup::First) {
|
||||
return GetBaselineBOffset(PrincipalChildList().cbegin(),
|
||||
PrincipalChildList().cend(), aWM, aBaselineGroup,
|
||||
aExportContext);
|
||||
PrincipalChildList().cend(), aWM, aBaselineGroup);
|
||||
}
|
||||
return GetBaselineBOffset(PrincipalChildList().crbegin(),
|
||||
PrincipalChildList().crend(), aWM, aBaselineGroup,
|
||||
aExportContext);
|
||||
PrincipalChildList().crend(), aWM, aBaselineGroup);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
|
|
|
@ -60,8 +60,7 @@ class ColumnSetWrapperFrame final : public nsBlockFrame {
|
|||
nscoord GetPrefISize(gfxContext* aRenderingContext) override;
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const override;
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
private:
|
||||
explicit ColumnSetWrapperFrame(ComputedStyle* aStyle,
|
||||
|
@ -79,8 +78,7 @@ class ColumnSetWrapperFrame final : public nsBlockFrame {
|
|||
template <typename Iterator>
|
||||
Maybe<nscoord> GetBaselineBOffset(Iterator aStart, Iterator aEnd,
|
||||
WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const;
|
||||
BaselineSharingGroup aBaselineGroup) const;
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -603,76 +603,54 @@ nscoord nsBlockFrame::SynthesizeFallbackBaseline(
|
|||
return Baseline::SynthesizeBOffsetFromMarginBox(this, aWM, aBaselineGroup);
|
||||
}
|
||||
|
||||
template <typename LineIterator>
|
||||
Maybe<nscoord> nsBlockFrame::GetBaselineBOffset(
|
||||
LineIterator aStart, LineIterator aEnd, WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const {
|
||||
MOZ_ASSERT((std::is_same_v<LineIterator, ConstLineIterator> &&
|
||||
aBaselineGroup == BaselineSharingGroup::First) ||
|
||||
(std::is_same_v<LineIterator, ConstReverseLineIterator> &&
|
||||
aBaselineGroup == BaselineSharingGroup::Last),
|
||||
"Iterator direction must match baseline sharing group.");
|
||||
for (auto line = aStart; line != aEnd; ++line) {
|
||||
if (!line->IsBlock()) {
|
||||
// XXX Is this the right test? We have some bogus empty lines
|
||||
// floating around, but IsEmpty is perhaps too weak.
|
||||
if (line->BSize() != 0 || !line->IsEmpty()) {
|
||||
const auto ascent = line->BStart() + line->GetLogicalAscent();
|
||||
if (aBaselineGroup == BaselineSharingGroup::Last) {
|
||||
return Some(BSize(aWM) - ascent);
|
||||
}
|
||||
return Some(ascent);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
nsIFrame* kid = line->mFirstChild;
|
||||
if (aWM.IsOrthogonalTo(kid->GetWritingMode())) {
|
||||
continue;
|
||||
}
|
||||
if (aExportContext == BaselineExportContext::LineLayout &&
|
||||
kid->IsTableWrapperFrame()) {
|
||||
// `<table>` in inline-block context does not export any baseline.
|
||||
continue;
|
||||
}
|
||||
const auto kidBaselineGroup =
|
||||
aExportContext == BaselineExportContext::LineLayout
|
||||
? kid->GetDefaultBaselineSharingGroup()
|
||||
: aBaselineGroup;
|
||||
const auto kidBaseline =
|
||||
kid->GetNaturalBaselineBOffset(aWM, kidBaselineGroup, aExportContext);
|
||||
if (!kidBaseline) {
|
||||
continue;
|
||||
}
|
||||
auto result = *kidBaseline;
|
||||
if (kidBaselineGroup == BaselineSharingGroup::Last) {
|
||||
result = kid->BSize(aWM) - result;
|
||||
}
|
||||
// Ignore relative positioning for baseline calculations.
|
||||
const nsSize& sz = line->mContainerSize;
|
||||
result += kid->GetLogicalNormalPosition(aWM, sz).B(aWM);
|
||||
if (aBaselineGroup == BaselineSharingGroup::Last) {
|
||||
return Some(BSize(aWM) - result);
|
||||
}
|
||||
return Some(result);
|
||||
}
|
||||
return Nothing{};
|
||||
}
|
||||
|
||||
Maybe<nscoord> nsBlockFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
if (StyleDisplay()->IsContainLayout()) {
|
||||
return Nothing{};
|
||||
}
|
||||
|
||||
if (aBaselineGroup == BaselineSharingGroup::First) {
|
||||
return GetBaselineBOffset(LinesBegin(), LinesEnd(), aWM, aBaselineGroup,
|
||||
aExportContext);
|
||||
nscoord result;
|
||||
if (!nsLayoutUtils::GetFirstLineBaseline(aWM, this, &result)) {
|
||||
return Nothing{};
|
||||
}
|
||||
return Some(result);
|
||||
}
|
||||
|
||||
return GetBaselineBOffset(LinesRBegin(), LinesREnd(), aWM, aBaselineGroup,
|
||||
aExportContext);
|
||||
for (ConstReverseLineIterator line = LinesRBegin(), line_end = LinesREnd();
|
||||
line != line_end; ++line) {
|
||||
if (line->IsBlock()) {
|
||||
nsIFrame* kid = line->mFirstChild;
|
||||
if (aWM.IsOrthogonalTo(kid->GetWritingMode())) {
|
||||
continue;
|
||||
}
|
||||
if (kid->IsTableWrapperFrame()) {
|
||||
// `<table>` in block display context does not export any baseline.
|
||||
continue;
|
||||
}
|
||||
const auto kidBaselineGroup = kid->GetDefaultBaselineSharingGroup();
|
||||
const auto kidBaseline =
|
||||
kid->GetNaturalBaselineBOffset(aWM, kidBaselineGroup);
|
||||
if (!kidBaseline) {
|
||||
continue;
|
||||
}
|
||||
auto result = *kidBaseline;
|
||||
if (kidBaselineGroup == BaselineSharingGroup::Last) {
|
||||
result = kid->BSize(aWM) - result;
|
||||
}
|
||||
// Ignore relative positioning for baseline calculations.
|
||||
const nsSize& sz = line->mContainerSize;
|
||||
result += kid->GetLogicalNormalPosition(aWM, sz).B(aWM);
|
||||
return Some(BSize(aWM) - result);
|
||||
} else {
|
||||
// XXX Is this the right test? We have some bogus empty lines
|
||||
// floating around, but IsEmpty is perhaps too weak.
|
||||
if (line->BSize() != 0 || !line->IsEmpty()) {
|
||||
return Some(BSize(aWM) - (line->BStart() + line->GetLogicalAscent()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return Nothing{};
|
||||
}
|
||||
|
||||
nscoord nsBlockFrame::GetCaretBaseline() const {
|
||||
|
@ -1592,8 +1570,7 @@ void nsBlockFrame::Reflow(nsPresContext* aPresContext, ReflowOutput& aMetrics,
|
|||
const auto baselineGroup = BaselineSharingGroup::First;
|
||||
Maybe<nscoord> result;
|
||||
if (MOZ_LIKELY(!wm.IsOrthogonalTo(marker->GetWritingMode()))) {
|
||||
result = marker->GetNaturalBaselineBOffset(
|
||||
wm, baselineGroup, BaselineExportContext::LineLayout);
|
||||
result = marker->GetNaturalBaselineBOffset(wm, baselineGroup);
|
||||
}
|
||||
const auto markerBaseline = result.valueOrFrom([bbox, wm, marker]() {
|
||||
return bbox.BSize(wm) + marker->GetLogicalUsedMargin(wm).BEnd(wm);
|
||||
|
|
|
@ -133,8 +133,8 @@ class nsBlockFrame : public nsContainerFrame {
|
|||
return BaselineSharingGroup::Last;
|
||||
}
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
nscoord GetCaretBaseline() const override;
|
||||
void DestroyFrom(nsIFrame* aDestructRoot,
|
||||
PostDestroyData& aPostDestroyData) override;
|
||||
|
@ -276,12 +276,6 @@ class nsBlockFrame : public nsContainerFrame {
|
|||
private:
|
||||
void CheckIntrinsicCacheAgainstShrinkWrapState();
|
||||
|
||||
template <typename LineIterator>
|
||||
Maybe<nscoord> GetBaselineBOffset(LineIterator aStart, LineIterator aEnd,
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const;
|
||||
|
||||
public:
|
||||
nscoord GetMinISize(gfxContext* aRenderingContext) override;
|
||||
nscoord GetPrefISize(gfxContext* aRenderingContext) override;
|
||||
|
|
|
@ -1297,12 +1297,10 @@ void nsColumnSetFrame::AppendDirectlyOwnedAnonBoxes(
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsColumnSetFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
Maybe<nscoord> result;
|
||||
for (const auto* kid : mFrames) {
|
||||
auto kidBaseline =
|
||||
kid->GetNaturalBaselineBOffset(aWM, aBaselineGroup, aExportContext);
|
||||
auto kidBaseline = kid->GetNaturalBaselineBOffset(aWM, aBaselineGroup);
|
||||
if (!kidBaseline) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -75,8 +75,8 @@ class nsColumnSetFrame final : public nsContainerFrame {
|
|||
const nsPoint& aPt);
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
protected:
|
||||
nscoord mLastBalanceBSize;
|
||||
|
|
|
@ -426,8 +426,7 @@ void nsFirstLetterFrame::DrainOverflowFrames(nsPresContext* aPresContext) {
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsFirstLetterFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
if (aBaselineGroup == BaselineSharingGroup::Last) {
|
||||
return Nothing{};
|
||||
}
|
||||
|
|
|
@ -61,8 +61,8 @@ class nsFirstLetterFrame final : public nsContainerFrame {
|
|||
|
||||
virtual bool CanContinueTextRun() const override;
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
virtual LogicalSides GetLogicalSkipSides() const override;
|
||||
|
||||
// override of nsFrame method
|
||||
|
|
|
@ -416,8 +416,7 @@ class nsFlexContainerFrame::FlexItem final {
|
|||
// If the nsLayoutUtils getter fails, then ask the frame directly:
|
||||
auto baselineGroup = aUseFirstBaseline ? BaselineSharingGroup::First
|
||||
: BaselineSharingGroup::Last;
|
||||
if (auto baseline = mFrame->GetNaturalBaselineBOffset(
|
||||
mWM, baselineGroup, BaselineExportContext::Other)) {
|
||||
if (auto baseline = mFrame->GetNaturalBaselineBOffset(mWM, baselineGroup)) {
|
||||
// Offset for last baseline from `GetNaturalBaselineBOffset` originates
|
||||
// from the frame's block end, so convert it back.
|
||||
mAscent = baselineGroup == BaselineSharingGroup::First
|
||||
|
@ -4637,8 +4636,7 @@ void nsFlexContainerFrame::Reflow(nsPresContext* aPresContext,
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsFlexContainerFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
if (StyleDisplay()->IsContainLayout() ||
|
||||
HasAnyStateBits(NS_STATE_FLEX_SYNTHESIZE_BASELINE)) {
|
||||
return Nothing{};
|
||||
|
|
|
@ -166,8 +166,8 @@ class nsFlexContainerFrame final : public nsContainerFrame,
|
|||
#endif
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
// Unions the child overflow from our in-flow children.
|
||||
void UnionInFlowChildOverflow(mozilla::OverflowAreas&);
|
||||
|
|
|
@ -1421,8 +1421,7 @@ nscoord nsHTMLScrollFrame::SynthesizeFallbackBaseline(
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsHTMLScrollFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
// Block containers that are scrollable always have a last baseline
|
||||
// that are synthesized from block-end margin edge.
|
||||
// Note(dshin): This behaviour is really only relevant to `inline-block`
|
||||
|
@ -1430,8 +1429,7 @@ Maybe<nscoord> nsHTMLScrollFrame::GetNaturalBaselineBOffset(
|
|||
// baselines are calculated through `GetFirstLineBaseline`, which does
|
||||
// calculations of its own.
|
||||
// https://drafts.csswg.org/css-align/#baseline-export
|
||||
if (aExportContext == BaselineExportContext::LineLayout &&
|
||||
aBaselineGroup == BaselineSharingGroup::Last &&
|
||||
if (aBaselineGroup == BaselineSharingGroup::Last &&
|
||||
mScrolledFrame->IsBlockFrameOrSubclass()) {
|
||||
return Some(SynthesizeFallbackBaseline(aWM, aBaselineGroup));
|
||||
}
|
||||
|
@ -1441,8 +1439,7 @@ Maybe<nscoord> nsHTMLScrollFrame::GetNaturalBaselineBOffset(
|
|||
}
|
||||
|
||||
// OK, here's where we defer to our scrolled frame.
|
||||
return mScrolledFrame
|
||||
->GetNaturalBaselineBOffset(aWM, aBaselineGroup, aExportContext)
|
||||
return mScrolledFrame->GetNaturalBaselineBOffset(aWM, aBaselineGroup)
|
||||
.map([this, aWM](nscoord aBaseline) {
|
||||
// We have to add our border BStart thickness to whatever it returns, to
|
||||
// produce an offset in our frame-rect's coordinate system. (We don't
|
||||
|
|
|
@ -130,8 +130,8 @@ class nsHTMLScrollFrame : public nsContainerFrame,
|
|||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
// Recomputes the scrollable overflow area we store in the helper to take
|
||||
// children that are affected by perpsective set on the outer frame and scroll
|
||||
|
|
|
@ -9568,9 +9568,7 @@ nscoord nsGridContainerFrame::SynthesizeBaseline(
|
|||
baseline = isOrthogonal ? grid->GetIBaseline(aGroup)
|
||||
: grid->GetBBaseline(aGroup);
|
||||
} else if (!isOrthogonal && aGridOrderItem.mIsInEdgeTrack) {
|
||||
baseline = child
|
||||
->GetNaturalBaselineBOffset(childWM, aGroup,
|
||||
BaselineExportContext::Other)
|
||||
baseline = child->GetNaturalBaselineBOffset(childWM, aGroup)
|
||||
.valueOrFrom([aGroup, child, childWM]() {
|
||||
return Baseline::SynthesizeBOffsetFromBorderBox(
|
||||
child, childWM, aGroup);
|
||||
|
|
|
@ -131,8 +131,8 @@ class nsGridContainerFrame final : public nsContainerFrame,
|
|||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override {
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override {
|
||||
if (StyleDisplay()->IsContainLayout() ||
|
||||
HasAnyStateBits(NS_STATE_GRID_SYNTHESIZE_BASELINE)) {
|
||||
return Nothing{};
|
||||
|
|
|
@ -2092,15 +2092,13 @@ nscoord nsIFrame::SynthesizeFallbackBaseline(
|
|||
}
|
||||
|
||||
nscoord nsIFrame::GetLogicalBaseline(WritingMode aWM) const {
|
||||
return GetLogicalBaseline(aWM, GetDefaultBaselineSharingGroup(),
|
||||
BaselineExportContext::LineLayout);
|
||||
return GetLogicalBaseline(aWM, GetDefaultBaselineSharingGroup());
|
||||
}
|
||||
|
||||
nscoord nsIFrame::GetLogicalBaseline(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
const auto result =
|
||||
GetNaturalBaselineBOffset(aWM, aBaselineGroup, aExportContext)
|
||||
GetNaturalBaselineBOffset(aWM, aBaselineGroup)
|
||||
.valueOrFrom([this, aWM, aBaselineGroup]() {
|
||||
return SynthesizeFallbackBaseline(aWM, aBaselineGroup);
|
||||
});
|
||||
|
|
|
@ -519,7 +519,6 @@ class nsIFrame : public nsQueryFrame {
|
|||
public:
|
||||
using AlignmentContext = mozilla::AlignmentContext;
|
||||
using BaselineSharingGroup = mozilla::BaselineSharingGroup;
|
||||
using BaselineExportContext = mozilla::BaselineExportContext;
|
||||
template <typename T>
|
||||
using Maybe = mozilla::Maybe<T>;
|
||||
template <typename T, typename E>
|
||||
|
@ -1529,19 +1528,14 @@ class nsIFrame : public nsQueryFrame {
|
|||
|
||||
/**
|
||||
* `GetNaturalBaselineBOffset`, but determines the baseline sharing group
|
||||
* through `GetDefaultBaselineSharingGroup` (If not specified), assuming line
|
||||
* layout context, and never fails, returning a synthesized baseline through
|
||||
* through `GetDefaultBaselineSharingGroup` (If not specified), and never
|
||||
* fails, returning a synthesized baseline through
|
||||
* `SynthesizeFallbackBaseline`. Unlike `GetNaturalBaselineBOffset`, Result is
|
||||
* always relative to the block start of the frame.
|
||||
*/
|
||||
nscoord GetLogicalBaseline(mozilla::WritingMode aWM) const;
|
||||
/**
|
||||
* Same as the above, but with baseline sharing group & export
|
||||
* context specified.
|
||||
*/
|
||||
nscoord GetLogicalBaseline(mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const;
|
||||
BaselineSharingGroup aBaselineGroup) const;
|
||||
|
||||
/**
|
||||
* Return true if the frame has a first(last) inline-axis baseline per
|
||||
|
@ -1549,21 +1543,14 @@ class nsIFrame : public nsQueryFrame {
|
|||
* the relevant block-axis border-box edge (Start for
|
||||
* BaselineSharingGroup::First, end for BaselineSharingGroup::Last), where
|
||||
* a positive value points towards the content-box.
|
||||
* Some frames can export different baselines depending if it's in a line
|
||||
* layout context or any other context (e.g. Flex, grid).
|
||||
* https://drafts.csswg.org/css-align-3/#baseline-export
|
||||
* @note The returned value is only valid when reflow is not needed.
|
||||
* @note You should only call this on frames with a WM that's parallel to aWM.
|
||||
* @note We're approaching `nsLayoutUtils::Get(First|Last)LineBaseline` ==
|
||||
* `GetNaturalBaselineBOffset(aWM, (First|Last), Other)`. Grid relies on
|
||||
* baseline synthesis behaviour in `nsLayoutUtils` implementations (bug
|
||||
* 1609403), which blocks its removal.
|
||||
* @param aWM the writing-mode of the alignment context.
|
||||
* @return the baseline offset, if one exists
|
||||
*/
|
||||
virtual Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const {
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
return Nothing{};
|
||||
}
|
||||
|
||||
|
@ -1670,8 +1657,7 @@ class nsIFrame : public nsQueryFrame {
|
|||
|
||||
public:
|
||||
/**
|
||||
* Get the suitable baseline sharing group for this element, assuming line
|
||||
* layout.
|
||||
* Get the suitable baseline sharing group for this element.
|
||||
*/
|
||||
virtual BaselineSharingGroup GetDefaultBaselineSharingGroup() const {
|
||||
return BaselineSharingGroup::First;
|
||||
|
|
|
@ -841,8 +841,7 @@ LogicalSides nsInlineFrame::GetLogicalSkipSides() const {
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsInlineFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
if (aBaselineGroup == BaselineSharingGroup::Last) {
|
||||
return Nothing{};
|
||||
}
|
||||
|
|
|
@ -97,8 +97,8 @@ class nsInlineFrame : public nsContainerFrame {
|
|||
virtual void PullOverflowsFromPrevInFlow() override;
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
virtual bool DrainSelfOverflowList() override;
|
||||
|
||||
/**
|
||||
|
|
|
@ -1335,18 +1335,6 @@ bool nsLineLayout::CanPlaceFrame(PerFrameData* pfd, bool aNotSafeToBreak,
|
|||
return false;
|
||||
}
|
||||
|
||||
BaselineSharingGroup BaselineSourceToBaselineSharingGroup(
|
||||
const nsIFrame& aFrame) {
|
||||
switch (aFrame.StyleDisplay()->mBaselineSource) {
|
||||
case StyleBaselineSource::First:
|
||||
return BaselineSharingGroup::First;
|
||||
case StyleBaselineSource::Last:
|
||||
return BaselineSharingGroup::Last;
|
||||
case StyleBaselineSource::Auto:
|
||||
return aFrame.GetDefaultBaselineSharingGroup();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Place the frame. Update running counters.
|
||||
*/
|
||||
|
@ -1361,32 +1349,10 @@ void nsLineLayout::PlaceFrame(PerFrameData* pfd, ReflowOutput& aMetrics) {
|
|||
? lineWM.IsLineInverted() ? 0 : aMetrics.BSize(lineWM)
|
||||
: aMetrics.BSize(lineWM) / 2;
|
||||
} else {
|
||||
if (pfd->mFrame->StyleDisplay()->mBaselineSource ==
|
||||
StyleBaselineSource::Auto) {
|
||||
if (aMetrics.BlockStartAscent() == ReflowOutput::ASK_FOR_BASELINE) {
|
||||
pfd->mAscent = pfd->mFrame->GetLogicalBaseline(lineWM);
|
||||
} else {
|
||||
pfd->mAscent = aMetrics.BlockStartAscent();
|
||||
}
|
||||
if (aMetrics.BlockStartAscent() == ReflowOutput::ASK_FOR_BASELINE) {
|
||||
pfd->mAscent = pfd->mFrame->GetLogicalBaseline(lineWM);
|
||||
} else {
|
||||
const auto sourceGroup = [pfd]() {
|
||||
switch (pfd->mFrame->StyleDisplay()->mBaselineSource) {
|
||||
case StyleBaselineSource::First:
|
||||
return BaselineSharingGroup::First;
|
||||
case StyleBaselineSource::Last:
|
||||
return BaselineSharingGroup::Last;
|
||||
case StyleBaselineSource::Auto:
|
||||
break;
|
||||
}
|
||||
MOZ_ASSERT_UNREACHABLE("Auto should be already handled?");
|
||||
}();
|
||||
// We ignore line-layout specific layout quirks by setting
|
||||
// `BaselineExportContext::Other`.
|
||||
// Note(dshin): For a lot of frames, the export context does not make a
|
||||
// difference, and we may be wasting the value cached in
|
||||
// `BlockStartAscent`.
|
||||
pfd->mAscent = pfd->mFrame->GetLogicalBaseline(
|
||||
lineWM, sourceGroup, BaselineExportContext::Other);
|
||||
pfd->mAscent = aMetrics.BlockStartAscent();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1450,6 +1416,7 @@ void nsLineLayout::RemoveMarkerFrame(nsIFrame* aFrame) {
|
|||
psd->mFirstFrame = pfd->mNext;
|
||||
FreeFrame(pfd);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void nsLineLayout::DumpPerSpanData(PerSpanData* psd, int32_t aIndent) {
|
||||
nsIFrame::IndentBy(stdout, aIndent);
|
||||
|
|
|
@ -262,8 +262,7 @@ nsIFrame::SizeComputationResult nsRubyBaseContainerFrame::ComputeSize(
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsRubyBaseContainerFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
if (aBaselineGroup == BaselineSharingGroup::Last) {
|
||||
return Nothing{};
|
||||
}
|
||||
|
|
|
@ -47,8 +47,8 @@ class nsRubyBaseContainerFrame final : public nsContainerFrame {
|
|||
nsReflowStatus& aStatus) override;
|
||||
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
#ifdef DEBUG_FRAME_DUMP
|
||||
virtual nsresult GetFrameName(nsAString& aResult) const override;
|
||||
|
|
|
@ -10058,8 +10058,7 @@ bool nsTextFrame::IsAtEndOfLine() const {
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsTextFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
if (aBaselineGroup == BaselineSharingGroup::Last) {
|
||||
return Nothing{};
|
||||
}
|
||||
|
|
|
@ -367,8 +367,8 @@ class nsTextFrame : public nsIFrame {
|
|||
bool IsEmpty() final;
|
||||
bool IsSelfEmpty() final { return IsEmpty(); }
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
bool HasSignificantTerminalNewline() const final;
|
||||
|
||||
|
|
|
@ -646,7 +646,6 @@ cbindgen-types = [
|
|||
{ gecko = "StyleFontSynthesis", servo = "crate::values::computed::font::FontSynthesis" },
|
||||
{ gecko = "StyleBoolInteger", servo = "crate::values::computed::BoolInteger" },
|
||||
{ gecko = "StyleTime", servo = "crate::values::computed::Time" },
|
||||
{ gecko = "StyleBaselineSource", servo = "crate::values::computed::BaselineSource" },
|
||||
]
|
||||
|
||||
mapped-generic-types = [
|
||||
|
|
|
@ -2224,7 +2224,6 @@ nsStyleDisplay::nsStyleDisplay(const Document& aDocument)
|
|||
mPerspectiveOrigin(Position::FromPercentage(0.5f)),
|
||||
mVerticalAlign(
|
||||
StyleVerticalAlign::Keyword(StyleVerticalAlignKeyword::Baseline)),
|
||||
mBaselineSource(StyleBaselineSource::Auto),
|
||||
mWebkitLineClamp(0),
|
||||
mShapeMargin(LengthPercentage::Zero()),
|
||||
mShapeOutside(StyleShapeOutside::None()) {
|
||||
|
@ -2280,7 +2279,6 @@ nsStyleDisplay::nsStyleDisplay(const nsStyleDisplay& aSource)
|
|||
mChildPerspective(aSource.mChildPerspective),
|
||||
mPerspectiveOrigin(aSource.mPerspectiveOrigin),
|
||||
mVerticalAlign(aSource.mVerticalAlign),
|
||||
mBaselineSource(aSource.mBaselineSource),
|
||||
mWebkitLineClamp(aSource.mWebkitLineClamp),
|
||||
mShapeImageThreshold(aSource.mShapeImageThreshold),
|
||||
mShapeMargin(aSource.mShapeMargin),
|
||||
|
@ -2517,8 +2515,7 @@ nsChangeHint nsStyleDisplay::CalcDifference(
|
|||
}
|
||||
|
||||
if (mWebkitLineClamp != aNewData.mWebkitLineClamp ||
|
||||
mVerticalAlign != aNewData.mVerticalAlign ||
|
||||
mBaselineSource != aNewData.mBaselineSource) {
|
||||
mVerticalAlign != aNewData.mVerticalAlign) {
|
||||
// XXX Can this just be AllReflowHints + RepaintFrame, and be included in
|
||||
// the block below?
|
||||
hint |= NS_STYLE_HINT_REFLOW;
|
||||
|
|
|
@ -1381,7 +1381,6 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleDisplay {
|
|||
mozilla::Position mPerspectiveOrigin;
|
||||
|
||||
mozilla::StyleVerticalAlign mVerticalAlign;
|
||||
mozilla::StyleBaselineSource mBaselineSource;
|
||||
|
||||
mozilla::StyleLineClamp mWebkitLineClamp;
|
||||
|
||||
|
|
|
@ -8418,17 +8418,6 @@ var gCSSProperties = {
|
|||
invalid_values: [],
|
||||
quirks_values: { "5": "5px" },
|
||||
},
|
||||
"baseline-source": {
|
||||
domProp: "baselineSource",
|
||||
inherited: false,
|
||||
type: CSS_TYPE_LONGHAND,
|
||||
applies_to_first_letter: true,
|
||||
applies_to_first_line: true,
|
||||
applies_to_placeholder: true,
|
||||
initial_values: ["auto"],
|
||||
other_values: ["first", "last"],
|
||||
invalid_values: [],
|
||||
},
|
||||
visibility: {
|
||||
domProp: "visibility",
|
||||
inherited: true,
|
||||
|
|
|
@ -3542,8 +3542,7 @@ nscoord nsTableFrame::SynthesizeFallbackBaseline(
|
|||
|
||||
/* virtual */
|
||||
Maybe<nscoord> nsTableFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
if (StyleDisplay()->IsContainLayout()) {
|
||||
return Nothing{};
|
||||
}
|
||||
|
|
|
@ -439,8 +439,8 @@ class nsTableFrame : public nsContainerFrame {
|
|||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
/** return the row span of a cell, taking into account row span magic at the
|
||||
* bottom of a table. The row span equals the number of rows spanned by aCell
|
||||
|
|
|
@ -41,8 +41,7 @@ nscoord nsTableWrapperFrame::SynthesizeFallbackBaseline(
|
|||
}
|
||||
|
||||
Maybe<nscoord> nsTableWrapperFrame::GetNaturalBaselineBOffset(
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const {
|
||||
WritingMode aWM, BaselineSharingGroup aBaselineGroup) const {
|
||||
// Baseline is determined by row
|
||||
// (https://drafts.csswg.org/css-align-3/#baseline-export). If the row
|
||||
// direction is going to be orthogonal to the parent's writing mode, the
|
||||
|
@ -53,8 +52,7 @@ Maybe<nscoord> nsTableWrapperFrame::GetNaturalBaselineBOffset(
|
|||
return Nothing{};
|
||||
}
|
||||
auto* innerTable = InnerTableFrame();
|
||||
return innerTable
|
||||
->GetNaturalBaselineBOffset(aWM, aBaselineGroup, aExportContext)
|
||||
return innerTable->GetNaturalBaselineBOffset(aWM, aBaselineGroup)
|
||||
.map([this, aWM, aBaselineGroup, innerTable](nscoord aBaseline) {
|
||||
auto bStart = innerTable->BStart(aWM, mRect.Size());
|
||||
if (aBaselineGroup == BaselineSharingGroup::First) {
|
||||
|
|
|
@ -68,8 +68,8 @@ class nsTableWrapperFrame : public nsContainerFrame {
|
|||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
Maybe<nscoord> GetNaturalBaselineBOffset(
|
||||
mozilla::WritingMode aWM, BaselineSharingGroup aBaselineGroup,
|
||||
BaselineExportContext aExportContext) const override;
|
||||
mozilla::WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup) const override;
|
||||
|
||||
virtual nscoord GetMinISize(gfxContext* aRenderingContext) override;
|
||||
virtual nscoord GetPrefISize(gfxContext* aRenderingContext) override;
|
||||
|
|
|
@ -447,7 +447,6 @@ class Longhand(Property):
|
|||
"AlignSelf",
|
||||
"Appearance",
|
||||
"AspectRatio",
|
||||
"BaselineSource",
|
||||
"BreakBetween",
|
||||
"BreakWithin",
|
||||
"BackgroundRepeat",
|
||||
|
|
|
@ -94,16 +94,6 @@ ${helpers.predefined_type(
|
|||
servo_restyle_damage = "reflow",
|
||||
)}
|
||||
|
||||
${helpers.predefined_type(
|
||||
"baseline-source",
|
||||
"BaselineSource",
|
||||
"computed::BaselineSource::Auto",
|
||||
engines="gecko servo-2013",
|
||||
animation_value_type="discrete",
|
||||
spec="https://drafts.csswg.org/css-inline-3/#baseline-source",
|
||||
servo_restyle_damage = "reflow",
|
||||
)}
|
||||
|
||||
// CSS 2.1, Section 11 - Visual effects
|
||||
|
||||
${helpers.single_keyword(
|
||||
|
|
|
@ -18,7 +18,7 @@ pub use crate::values::specified::box_::{
|
|||
Float as SpecifiedFloat, Overflow, OverflowAnchor, OverflowClipBox, OverscrollBehavior,
|
||||
ScrollAxis, ScrollSnapAlign, ScrollSnapAxis, ScrollSnapStop, ScrollSnapStrictness,
|
||||
ScrollSnapType, ScrollTimelineName, ScrollbarGutter, TouchAction, TransitionProperty,
|
||||
WillChange, BaselineSource,
|
||||
WillChange,
|
||||
};
|
||||
|
||||
use std::fmt::{self, Write};
|
||||
|
|
|
@ -58,7 +58,7 @@ pub use self::box_::{Display, LineClamp, Overflow, OverflowAnchor, TransitionPro
|
|||
pub use self::box_::{OverflowClipBox, OverscrollBehavior, Perspective, Resize, ScrollbarGutter};
|
||||
pub use self::box_::{ScrollAxis, ScrollSnapAlign, ScrollSnapAxis, ScrollSnapStop};
|
||||
pub use self::box_::{ScrollSnapStrictness, ScrollSnapType, ScrollTimelineName};
|
||||
pub use self::box_::{TouchAction, VerticalAlign, WillChange, BaselineSource};
|
||||
pub use self::box_::{TouchAction, VerticalAlign, WillChange};
|
||||
pub use self::color::{Color, ColorOrAuto, ColorPropertyValue, ColorScheme, PrintColorAdjust, ForcedColorAdjust};
|
||||
pub use self::column::ColumnCount;
|
||||
pub use self::counters::{Content, ContentItem, CounterIncrement, CounterReset, CounterSet};
|
||||
|
|
|
@ -637,33 +637,6 @@ impl Parse for VerticalAlign {
|
|||
}
|
||||
}
|
||||
|
||||
/// A specified value for the `baseline-source` property.
|
||||
/// https://drafts.csswg.org/css-inline-3/#baseline-source
|
||||
#[derive(
|
||||
Clone,
|
||||
Copy,
|
||||
Debug,
|
||||
Eq,
|
||||
Hash,
|
||||
MallocSizeOf,
|
||||
Parse,
|
||||
PartialEq,
|
||||
SpecifiedValueInfo,
|
||||
ToCss,
|
||||
ToShmem,
|
||||
ToComputedValue,
|
||||
ToResolvedValue,
|
||||
)]
|
||||
#[repr(u8)]
|
||||
pub enum BaselineSource {
|
||||
/// `Last` for `inline-block`, `First` otherwise.
|
||||
Auto,
|
||||
/// Use first baseline for alignment.
|
||||
First,
|
||||
/// Use last baseline for alignment.
|
||||
Last,
|
||||
}
|
||||
|
||||
/// https://drafts.csswg.org/css-animations/#animation-iteration-count
|
||||
#[derive(Clone, Debug, MallocSizeOf, PartialEq, Parse, SpecifiedValueInfo, ToCss, ToShmem)]
|
||||
pub enum AnimationIterationCount {
|
||||
|
|
|
@ -44,7 +44,7 @@ pub use self::box_::{
|
|||
pub use self::box_::{OverflowClipBox, OverscrollBehavior, Perspective, Resize, ScrollbarGutter};
|
||||
pub use self::box_::{ScrollAxis, ScrollSnapAlign, ScrollSnapAxis, ScrollSnapStop};
|
||||
pub use self::box_::{ScrollSnapStrictness, ScrollSnapType, ScrollTimelineName};
|
||||
pub use self::box_::{TouchAction, TransitionProperty, VerticalAlign, WillChange, BaselineSource};
|
||||
pub use self::box_::{TouchAction, TransitionProperty, VerticalAlign, WillChange};
|
||||
pub use self::color::{Color, ColorOrAuto, ColorPropertyValue, ColorScheme, PrintColorAdjust, ForcedColorAdjust};
|
||||
pub use self::column::ColumnCount;
|
||||
pub use self::counters::{Content, ContentItem, CounterIncrement, CounterReset, CounterSet};
|
||||
|
|
|
@ -147,7 +147,6 @@ include = [
|
|||
"Position",
|
||||
"PositionOrAuto",
|
||||
"BackgroundSize",
|
||||
"BaselineSource",
|
||||
"BorderImageSlice",
|
||||
"BorderSpacing",
|
||||
"BorderRadius",
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
[baseline-source-computed.html]
|
||||
[Property baseline-source value 'auto']
|
||||
expected: FAIL
|
||||
|
||||
[Property baseline-source value 'first']
|
||||
expected: FAIL
|
||||
|
||||
[Property baseline-source value 'last']
|
||||
expected: FAIL
|
|
@ -0,0 +1,21 @@
|
|||
[baseline-source-first-001.html]
|
||||
[.target > * 1]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 3]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 5]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 7]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 9]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 15]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 21]
|
||||
expected: FAIL
|
|
@ -1,8 +1,30 @@
|
|||
[baseline-source-first-002.html]
|
||||
[.target > * 1]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 3]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 4]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 5]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 7]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 9]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 10]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 15]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 19]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=144517
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 21]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=144517
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
[baseline-source-first-003.html]
|
||||
[.target > * 1]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 3]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 5]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 7]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 9]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 15]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 21]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[baseline-source-invalid.html]
|
||||
expected:
|
||||
if (os == "android") and fission: [TIMEOUT, OK]
|
|
@ -1,16 +1,21 @@
|
|||
[baseline-source-last-001.html]
|
||||
[.target > * 3]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 9]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1827484
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 11]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1827481
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 13]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 17]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1827481
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 19]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=144517
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 21]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,24 +1,30 @@
|
|||
[baseline-source-last-002.html]
|
||||
[.target > * 3]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 4]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 5]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 9]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1827484
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 10]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1827484
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 11]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1827481
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 13]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 17]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1827481
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 19]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=144517
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 21]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=144517
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,16 +1,24 @@
|
|||
[baseline-source-last-003.html]
|
||||
[.target > * 3]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 5]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 9]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1827484
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 11]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1827481
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 13]
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 17]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1827481
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 19]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=144517
|
||||
expected: FAIL
|
||||
|
||||
[.target > * 21]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,5 +1,79 @@
|
|||
[baseline-source-no-interpolation.html]
|
||||
bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1805727
|
||||
[CSS Transitions: property <baseline-source> from [initial\] to [last\] at (0.5) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Transitions: property <baseline-source> from [initial\] to [last\] at (0.6) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Transitions: property <baseline-source> from [initial\] to [last\] at (1) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Transitions: property <baseline-source> from [initial\] to [last\] at (1.5) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Transitions with transition: all: property <baseline-source> from [initial\] to [last\] at (-0.3) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Transitions with transition: all: property <baseline-source> from [initial\] to [last\] at (0) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Transitions with transition: all: property <baseline-source> from [initial\] to [last\] at (0.3) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Transitions with transition: all: property <baseline-source> from [initial\] to [last\] at (0.5) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Transitions with transition: all: property <baseline-source> from [initial\] to [last\] at (0.6) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Transitions with transition: all: property <baseline-source> from [initial\] to [last\] at (1) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Transitions with transition: all: property <baseline-source> from [initial\] to [last\] at (1.5) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Animations: property <baseline-source> from [initial\] to [last\] at (-0.3) should be [initial\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Animations: property <baseline-source> from [initial\] to [last\] at (0) should be [initial\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Animations: property <baseline-source> from [initial\] to [last\] at (0.3) should be [initial\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Animations: property <baseline-source> from [initial\] to [last\] at (0.5) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Animations: property <baseline-source> from [initial\] to [last\] at (0.6) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Animations: property <baseline-source> from [initial\] to [last\] at (1) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Animations: property <baseline-source> from [initial\] to [last\] at (1.5) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[Web Animations: property <baseline-source> from [initial\] to [last\] at (-0.3) should be [initial\]]
|
||||
expected: FAIL
|
||||
|
||||
[Web Animations: property <baseline-source> from [initial\] to [last\] at (0) should be [initial\]]
|
||||
expected: FAIL
|
||||
|
||||
[Web Animations: property <baseline-source> from [initial\] to [last\] at (0.3) should be [initial\]]
|
||||
expected: FAIL
|
||||
|
||||
[Web Animations: property <baseline-source> from [initial\] to [last\] at (0.5) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[Web Animations: property <baseline-source> from [initial\] to [last\] at (0.6) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[Web Animations: property <baseline-source> from [initial\] to [last\] at (1) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[Web Animations: property <baseline-source> from [initial\] to [last\] at (1.5) should be [last\]]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Transitions: property <baseline-source> from [initial\] to [last\] at (0) should be [initial\]]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
[baseline-source-valid.html]
|
||||
[e.style['baseline-source'\] = "auto" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['baseline-source'\] = "first" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['baseline-source'\] = "last" should set the property value]
|
||||
expected: FAIL
|
Загрузка…
Ссылка в новой задаче