mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-04 14:58:37 +09:00
CSS: inline-block with a display:block <input> child element has a wrong baseline (HTML forms)
This commit is contained in:
parent
8d256442ca
commit
67a10f51a0
20 changed files with 990 additions and 29 deletions
|
|
@ -5,26 +5,22 @@
|
|||
|
||||
#include "nsFieldSetFrame.h"
|
||||
|
||||
#include "mozilla/gfx/2D.h"
|
||||
#include "nsCSSAnonBoxes.h"
|
||||
#include "nsLayoutUtils.h"
|
||||
#include "nsLegendFrame.h"
|
||||
#include "nsCSSRendering.h"
|
||||
#include <algorithm>
|
||||
#include "nsIFrame.h"
|
||||
#include "nsPresContext.h"
|
||||
#include "mozilla/RestyleManager.h"
|
||||
#include "nsGkAtoms.h"
|
||||
#include "nsStyleConsts.h"
|
||||
#include "nsDisplayList.h"
|
||||
#include "nsRenderingContext.h"
|
||||
#include "nsIScrollableFrame.h"
|
||||
#include "mozilla/gfx/2D.h"
|
||||
#include "mozilla/Likely.h"
|
||||
#include "mozilla/Maybe.h"
|
||||
#include "nsCSSAnonBoxes.h"
|
||||
#include "nsCSSRendering.h"
|
||||
#include "nsDisplayList.h"
|
||||
#include "nsGkAtoms.h"
|
||||
#include "nsIFrameInlines.h"
|
||||
#include "nsLayoutUtils.h"
|
||||
#include "nsLegendFrame.h"
|
||||
#include "nsRenderingContext.h"
|
||||
#include "nsStyleConsts.h"
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::gfx;
|
||||
using namespace mozilla::image;
|
||||
using namespace mozilla::layout;
|
||||
|
||||
nsContainerFrame*
|
||||
|
|
@ -126,7 +122,7 @@ void
|
|||
nsDisplayFieldSetBorderBackground::Paint(nsDisplayListBuilder* aBuilder,
|
||||
nsRenderingContext* aCtx)
|
||||
{
|
||||
DrawResult result = static_cast<nsFieldSetFrame*>(mFrame)->
|
||||
image::DrawResult result = static_cast<nsFieldSetFrame*>(mFrame)->
|
||||
PaintBorder(aBuilder, *aCtx, ToReferenceFrame(), mVisibleRect);
|
||||
|
||||
nsDisplayItemGenericImageGeometry::UpdateDrawResult(this, result);
|
||||
|
|
@ -210,7 +206,7 @@ nsFieldSetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
contentDisplayItems.MoveTo(aLists);
|
||||
}
|
||||
|
||||
DrawResult
|
||||
image::DrawResult
|
||||
nsFieldSetFrame::PaintBorder(
|
||||
nsDisplayListBuilder* aBuilder,
|
||||
nsRenderingContext& aRenderingContext,
|
||||
|
|
@ -695,9 +691,50 @@ nsFieldSetFrame::AccessibleType()
|
|||
#endif
|
||||
|
||||
nscoord
|
||||
nsFieldSetFrame::GetLogicalBaseline(WritingMode aWritingMode) const
|
||||
nsFieldSetFrame::GetLogicalBaseline(WritingMode aWM) const
|
||||
{
|
||||
switch (StyleDisplay()->mDisplay) {
|
||||
case mozilla::StyleDisplay::Grid:
|
||||
case mozilla::StyleDisplay::InlineGrid:
|
||||
case mozilla::StyleDisplay::Flex:
|
||||
case mozilla::StyleDisplay::InlineFlex:
|
||||
return BaselineBOffset(aWM, BaselineSharingGroup::eFirst,
|
||||
AlignmentContext::eInline);
|
||||
default:
|
||||
return BSize(aWM) - BaselineBOffset(aWM, BaselineSharingGroup::eLast,
|
||||
AlignmentContext::eInline);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
nsFieldSetFrame::GetVerticalAlignBaseline(WritingMode aWM,
|
||||
nscoord* aBaseline) const
|
||||
{
|
||||
nsIFrame* inner = GetInner();
|
||||
return inner->BStart(aWritingMode, GetParent()->GetSize()) +
|
||||
inner->GetLogicalBaseline(aWritingMode);
|
||||
MOZ_ASSERT(!inner->GetWritingMode().IsOrthogonalTo(aWM));
|
||||
if (!inner->GetVerticalAlignBaseline(aWM, aBaseline)) {
|
||||
return false;
|
||||
}
|
||||
nscoord innerBStart = inner->BStart(aWM, GetSize());
|
||||
*aBaseline += innerBStart;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
nsFieldSetFrame::GetNaturalBaselineBOffset(WritingMode aWM,
|
||||
BaselineSharingGroup aBaselineGroup,
|
||||
nscoord* aBaseline) const
|
||||
{
|
||||
nsIFrame* inner = GetInner();
|
||||
MOZ_ASSERT(!inner->GetWritingMode().IsOrthogonalTo(aWM));
|
||||
if (!inner->GetNaturalBaselineBOffset(aWM, aBaselineGroup, aBaseline)) {
|
||||
return false;
|
||||
}
|
||||
nscoord innerBStart = inner->BStart(aWM, GetSize());
|
||||
if (aBaselineGroup == BaselineSharingGroup::eFirst) {
|
||||
*aBaseline += innerBStart;
|
||||
} else {
|
||||
*aBaseline += BSize(aWM) - (innerBStart + inner->BSize(aWM));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue