summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2022-07-29 13:24:43 +0000
committerMoonchild <moonchild@palemoon.org>2022-07-29 13:24:43 +0000
commitd60f501490398dfce8d270f8345fa674eae9e64b (patch)
treeaabd0ce7c9d13251c07e1680d2c24f666c865dc2
parent900107da1bea93a20765202169a5fc0b9620858e (diff)
parent071412ab291a9f6181780dd0e5e2316c4a292a7c (diff)
downloaduxp-d60f501490398dfce8d270f8345fa674eae9e64b.tar.gz
Merge branch '1970-form-focusring-styling'
-rw-r--r--layout/forms/nsButtonFrameRenderer.cpp153
-rw-r--r--layout/forms/nsButtonFrameRenderer.h22
-rw-r--r--layout/forms/nsComboboxControlFrame.cpp3
-rw-r--r--layout/forms/nsHTMLButtonControlFrame.cpp101
-rw-r--r--layout/forms/test/test_issue1970_manual.html35
-rw-r--r--layout/generic/BlockReflowInput.cpp3
-rw-r--r--layout/generic/ReflowInput.cpp25
-rw-r--r--layout/generic/ReflowInput.h23
-rw-r--r--layout/generic/nsBRFrame.cpp2
-rw-r--r--layout/generic/nsRubyBaseContainerFrame.cpp2
-rw-r--r--layout/reftests/bugs/491180-1-ref.html2
-rw-r--r--layout/reftests/bugs/491180-2-ref.html2
-rw-r--r--layout/reftests/css-grid/grid-item-intrinsic-size-normal-001-ref.html82
-rw-r--r--layout/reftests/css-sizing/min-intrinsic-with-percents-across-elements-ref.html8
-rw-r--r--layout/reftests/forms/button/focus-area-percent-units-1-ref.html52
-rw-r--r--layout/reftests/forms/button/focus-area-percent-units-1.html62
-rw-r--r--layout/reftests/forms/button/focus-area-percent-units-2-ref.html68
-rw-r--r--layout/reftests/forms/button/focus-area-percent-units-2.html51
-rw-r--r--layout/reftests/forms/button/percent-height-child-2-ref.html54
-rw-r--r--layout/reftests/forms/button/percent-height-child-2.html63
-rw-r--r--layout/reftests/forms/button/percent-width-child-2-ref.html55
-rw-r--r--layout/reftests/forms/button/percent-width-child-2.html62
-rw-r--r--layout/reftests/forms/button/reftest.list9
-rw-r--r--layout/reftests/forms/button/width-auto-size-em-ltr-ref.html1
-rw-r--r--layout/reftests/forms/button/width-auto-size-em-rtl-ref.html1
-rw-r--r--layout/reftests/forms/button/width-auto-size-ltr-ref.html1
-rw-r--r--layout/reftests/forms/button/width-auto-size-rtl-ref.html1
-rw-r--r--layout/reftests/forms/button/width-erode-all-focuspadding-ltr-ref.html20
-rw-r--r--layout/reftests/forms/button/width-erode-all-focuspadding-ltr.html21
-rw-r--r--layout/reftests/forms/button/width-erode-overflow-focuspadding-ltr-ref.html20
-rw-r--r--layout/reftests/forms/button/width-erode-overflow-focuspadding-ltr.html21
-rw-r--r--layout/reftests/forms/button/width-erode-overflow-focuspadding-rtl-ref.html21
-rw-r--r--layout/reftests/forms/button/width-erode-overflow-focuspadding-rtl.html22
-rw-r--r--layout/reftests/forms/button/width-erode-part-focuspadding-ltr-ref.html20
-rw-r--r--layout/reftests/forms/button/width-erode-part-focuspadding-ltr.html21
-rw-r--r--layout/reftests/forms/button/width-erode-part-focuspadding-rtl-ref.html21
-rw-r--r--layout/reftests/forms/button/width-erode-part-focuspadding-rtl.html22
-rw-r--r--layout/reftests/forms/button/width-exact-fit-ltr.html2
-rw-r--r--layout/reftests/forms/button/width-exact-fit-rtl.html2
-rw-r--r--layout/reftests/forms/select/vertical-centering-ref.html13
-rw-r--r--layout/reftests/forms/select/vertical-centering.html5
-rw-r--r--layout/reftests/writing-mode/ua-style-sheet-button-1a-ref.html4
-rw-r--r--layout/reftests/writing-mode/ua-style-sheet-input-color-1-ref.html4
-rw-r--r--layout/style/nsLayoutStylesheetCache.cpp1
-rw-r--r--layout/style/res/forms.css25
-rw-r--r--widget/gtk/gtk3drawing.cpp3
46 files changed, 196 insertions, 1015 deletions
diff --git a/layout/forms/nsButtonFrameRenderer.cpp b/layout/forms/nsButtonFrameRenderer.cpp
index 5372acb7fb..5113572995 100644
--- a/layout/forms/nsButtonFrameRenderer.cpp
+++ b/layout/forms/nsButtonFrameRenderer.cpp
@@ -36,9 +36,6 @@ nsButtonFrameRenderer::~nsButtonFrameRenderer()
if (mInnerFocusStyle) {
mInnerFocusStyle->FrameRelease();
}
- if (mOuterFocusStyle) {
- mOuterFocusStyle->FrameRelease();
- }
#endif
}
@@ -244,10 +241,9 @@ void nsDisplayButtonForeground::Paint(nsDisplayListBuilder* aBuilder,
!presContext->GetTheme()->ThemeDrawsFocusForWidget(disp->mAppearance)) {
nsRect r = nsRect(ToReferenceFrame(), mFrame->GetSize());
- // Draw the focus and outline borders.
+ // Draw the -moz-focus-inner border
DrawResult result =
- mBFR->PaintOutlineAndFocusBorders(aBuilder, presContext, *aCtx,
- mVisibleRect, r);
+ mBFR->PaintInnerFocusBorder(aBuilder, presContext, *aCtx, mVisibleRect, r);
nsDisplayItemGenericImageGeometry::UpdateDrawResult(this, result);
}
@@ -274,28 +270,48 @@ nsButtonFrameRenderer::DisplayButton(nsDisplayListBuilder* aBuilder,
// Only display focus rings if we actually have them. Since at most one
// button would normally display a focus ring, most buttons won't have them.
- if ((mOuterFocusStyle && mOuterFocusStyle->StyleBorder()->HasBorder()) ||
- (mInnerFocusStyle && mInnerFocusStyle->StyleBorder()->HasBorder())) {
+ if (mInnerFocusStyle && mInnerFocusStyle->StyleBorder()->HasBorder()) {
aForeground->AppendNewToTop(new (aBuilder)
nsDisplayButtonForeground(aBuilder, this));
}
return NS_OK;
}
+void
+nsButtonFrameRenderer::GetButtonInnerFocusRect(const nsRect& aRect, nsRect& aResult)
+{
+ GetButtonRect(aRect, aResult);
+ aResult.Deflate(mFrame->GetUsedBorderAndPadding());
+
+ if (mInnerFocusStyle) {
+ nsMargin innerFocusPadding(0,0,0,0);
+ mInnerFocusStyle->StylePadding()->GetPadding(innerFocusPadding);
+
+ nsMargin framePadding = mFrame->GetUsedPadding();
+
+ innerFocusPadding.top = std::min(innerFocusPadding.top,
+ framePadding.top);
+ innerFocusPadding.right = std::min(innerFocusPadding.right,
+ framePadding.right);
+ innerFocusPadding.bottom = std::min(innerFocusPadding.bottom,
+ framePadding.bottom);
+ innerFocusPadding.left = std::min(innerFocusPadding.left,
+ framePadding.left);
+
+ aResult.Inflate(innerFocusPadding);
+ }
+}
+
DrawResult
-nsButtonFrameRenderer::PaintOutlineAndFocusBorders(
+nsButtonFrameRenderer::PaintInnerFocusBorder(
nsDisplayListBuilder* aBuilder,
nsPresContext* aPresContext,
nsRenderingContext& aRenderingContext,
const nsRect& aDirtyRect,
const nsRect& aRect)
{
- // once we have all that we'll draw the focus if we have it. We will
- // need to draw 2 focuses, the inner and the outer. This is so we
- // can do any kind of look and feel. Some buttons have focus on the
- // outside like mac and motif. While others like windows have it
- // inside (dotted line). Usually only one will be specifed. But I
- // guess you could have both if you wanted to.
+ // we draw the -moz-focus-inner border just inside the button's
+ // normal border and padding, to match Windows themes.
nsRect rect;
@@ -305,19 +321,7 @@ nsButtonFrameRenderer::PaintOutlineAndFocusBorders(
DrawResult result = DrawResult::SUCCESS;
- if (mOuterFocusStyle) {
- // ---------- paint the outer focus border -------------
-
- GetButtonOuterFocusRect(aRect, rect);
-
- result &=
- nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, mFrame,
- aDirtyRect, rect, mOuterFocusStyle, flags);
- }
-
if (mInnerFocusStyle) {
- // ---------- paint the inner focus border -------------
-
GetButtonInnerFocusRect(aRect, rect);
result &=
@@ -358,83 +362,12 @@ nsButtonFrameRenderer::PaintBorder(
void
-nsButtonFrameRenderer::GetButtonOuterFocusRect(const nsRect& aRect, nsRect& focusRect)
-{
- focusRect = aRect;
-}
-
-void
nsButtonFrameRenderer::GetButtonRect(const nsRect& aRect, nsRect& r)
{
r = aRect;
- r.Deflate(GetButtonOuterFocusBorderAndPadding());
-}
-
-
-void
-nsButtonFrameRenderer::GetButtonInnerFocusRect(const nsRect& aRect, nsRect& focusRect)
-{
- GetButtonRect(aRect, focusRect);
- focusRect.Deflate(GetButtonBorderAndPadding());
- focusRect.Deflate(GetButtonInnerFocusMargin());
}
-nsMargin
-nsButtonFrameRenderer::GetButtonOuterFocusBorderAndPadding()
-{
- nsMargin result(0,0,0,0);
-
- if (mOuterFocusStyle) {
- mOuterFocusStyle->StylePadding()->GetPadding(result);
- result += mOuterFocusStyle->StyleBorder()->GetComputedBorder();
- }
-
- return result;
-}
-
-nsMargin
-nsButtonFrameRenderer::GetButtonBorderAndPadding()
-{
- return mFrame->GetUsedBorderAndPadding();
-}
-
-/**
- * Gets the size of the buttons border this is the union of the normal and disabled borders.
- */
-nsMargin
-nsButtonFrameRenderer::GetButtonInnerFocusMargin()
-{
- nsMargin innerFocusMargin(0,0,0,0);
-
- if (mInnerFocusStyle) {
- const nsStyleMargin* margin = mInnerFocusStyle->StyleMargin();
- margin->GetMargin(innerFocusMargin);
- }
-
- return innerFocusMargin;
-}
-
-nsMargin
-nsButtonFrameRenderer::GetButtonInnerFocusBorderAndPadding()
-{
- nsMargin result(0,0,0,0);
-
- if (mInnerFocusStyle) {
- mInnerFocusStyle->StylePadding()->GetPadding(result);
- result += mInnerFocusStyle->StyleBorder()->GetComputedBorder();
- }
-
- return result;
-}
-
-// gets all the focus borders and padding that will be added to the regular border
-nsMargin
-nsButtonFrameRenderer::GetAddedButtonBorderAndPadding()
-{
- return GetButtonOuterFocusBorderAndPadding() + GetButtonInnerFocusMargin() + GetButtonInnerFocusBorderAndPadding();
-}
-
/**
* Call this when styles change
*/
@@ -449,30 +382,18 @@ nsButtonFrameRenderer::ReResolveStyles(nsPresContext* aPresContext)
if (mInnerFocusStyle) {
mInnerFocusStyle->FrameRelease();
}
- if (mOuterFocusStyle) {
- mOuterFocusStyle->FrameRelease();
- }
#endif
- // style for the inner such as a dotted line (Windows)
+ // get styles assigned to -moz-focus-inner (ie dotted border on Windows)
mInnerFocusStyle =
styleSet->ProbePseudoElementStyle(mFrame->GetContent()->AsElement(),
CSSPseudoElementType::mozFocusInner,
context);
- // style for outer focus like a ridged border (MAC).
- mOuterFocusStyle =
- styleSet->ProbePseudoElementStyle(mFrame->GetContent()->AsElement(),
- CSSPseudoElementType::mozFocusOuter,
- context);
-
#ifdef DEBUG
if (mInnerFocusStyle) {
mInnerFocusStyle->FrameAddRef();
}
- if (mOuterFocusStyle) {
- mOuterFocusStyle->FrameAddRef();
- }
#endif
}
@@ -482,8 +403,6 @@ nsButtonFrameRenderer::GetStyleContext(int32_t aIndex) const
switch (aIndex) {
case NS_BUTTON_RENDERER_FOCUS_INNER_CONTEXT_INDEX:
return mInnerFocusStyle;
- case NS_BUTTON_RENDERER_FOCUS_OUTER_CONTEXT_INDEX:
- return mOuterFocusStyle;
default:
return nullptr;
}
@@ -501,14 +420,6 @@ nsButtonFrameRenderer::SetStyleContext(int32_t aIndex, nsStyleContext* aStyleCon
#endif
mInnerFocusStyle = aStyleContext;
break;
- case NS_BUTTON_RENDERER_FOCUS_OUTER_CONTEXT_INDEX:
-#ifdef DEBUG
- if (mOuterFocusStyle) {
- mOuterFocusStyle->FrameRelease();
- }
-#endif
- mOuterFocusStyle = aStyleContext;
- break;
}
#ifdef DEBUG
aStyleContext->FrameAddRef();
diff --git a/layout/forms/nsButtonFrameRenderer.h b/layout/forms/nsButtonFrameRenderer.h
index 8662c52e05..d21303efaf 100644
--- a/layout/forms/nsButtonFrameRenderer.h
+++ b/layout/forms/nsButtonFrameRenderer.h
@@ -20,8 +20,7 @@ class nsStyleContext;
#define NS_BUTTON_RENDERER_FOCUS_INNER_CONTEXT_INDEX 0
-#define NS_BUTTON_RENDERER_FOCUS_OUTER_CONTEXT_INDEX 1
-#define NS_BUTTON_RENDERER_LAST_CONTEXT_INDEX NS_BUTTON_RENDERER_FOCUS_OUTER_CONTEXT_INDEX
+#define NS_BUTTON_RENDERER_LAST_CONTEXT_INDEX NS_BUTTON_RENDERER_FOCUS_INNER_CONTEXT_INDEX
class nsButtonFrameRenderer {
typedef mozilla::image::DrawResult DrawResult;
@@ -38,11 +37,11 @@ public:
nsDisplayList* aBackground, nsDisplayList* aForeground);
- DrawResult PaintOutlineAndFocusBorders(nsDisplayListBuilder* aBuilder,
- nsPresContext* aPresContext,
- nsRenderingContext& aRenderingContext,
- const nsRect& aDirtyRect,
- const nsRect& aRect);
+ DrawResult PaintInnerFocusBorder(nsDisplayListBuilder* aBuilder,
+ nsPresContext* aPresContext,
+ nsRenderingContext& aRenderingContext,
+ const nsRect& aDirtyRect,
+ const nsRect& aRect);
DrawResult PaintBorder(nsDisplayListBuilder* aBuilder,
nsPresContext* aPresContext,
@@ -57,14 +56,8 @@ public:
bool isActive();
bool isDisabled();
- void GetButtonOuterFocusRect(const nsRect& aRect, nsRect& aResult);
void GetButtonRect(const nsRect& aRect, nsRect& aResult);
void GetButtonInnerFocusRect(const nsRect& aRect, nsRect& aResult);
- nsMargin GetButtonOuterFocusBorderAndPadding();
- nsMargin GetButtonBorderAndPadding();
- nsMargin GetButtonInnerFocusMargin();
- nsMargin GetButtonInnerFocusBorderAndPadding();
- nsMargin GetAddedButtonBorderAndPadding();
nsStyleContext* GetStyleContext(int32_t aIndex) const;
void SetStyleContext(int32_t aIndex, nsStyleContext* aStyleContext);
@@ -76,9 +69,8 @@ protected:
private:
- // cached styles for focus and outline.
+ // cached style for optional inner focus outline (used on Windows).
RefPtr<nsStyleContext> mInnerFocusStyle;
- RefPtr<nsStyleContext> mOuterFocusStyle;
nsFrame* mFrame;
};
diff --git a/layout/forms/nsComboboxControlFrame.cpp b/layout/forms/nsComboboxControlFrame.cpp
index 459c6f7ecc..2d0395d7a1 100644
--- a/layout/forms/nsComboboxControlFrame.cpp
+++ b/layout/forms/nsComboboxControlFrame.cpp
@@ -1322,7 +1322,8 @@ nsComboboxDisplayFrame::Reflow(nsPresContext* aPresContext,
// Note that the only way we can have a computed block size here is
// if the combobox had a specified block size. If it didn't, size
// based on what our rows look like, for lack of anything better.
- state.SetComputedBSize(mComboBox->mListControlFrame->GetBSizeOfARow());
+ //state.SetComputedBSize(mComboBox->mListControlFrame->GetBSizeOfARow());
+ state.SetLineHeight(state.mParentReflowInput->GetLineHeight());
}
WritingMode wm = aReflowInput.GetWritingMode();
nscoord computedISize = mComboBox->mDisplayISize -
diff --git a/layout/forms/nsHTMLButtonControlFrame.cpp b/layout/forms/nsHTMLButtonControlFrame.cpp
index afedfa7748..1ec0ec6c94 100644
--- a/layout/forms/nsHTMLButtonControlFrame.cpp
+++ b/layout/forms/nsHTMLButtonControlFrame.cpp
@@ -157,10 +157,6 @@ nsHTMLButtonControlFrame::GetMinISize(nsRenderingContext* aRenderingContext)
kid,
nsLayoutUtils::MIN_ISIZE);
- result += GetWritingMode().IsVertical()
- ? mRenderer.GetAddedButtonBorderAndPadding().TopBottom()
- : mRenderer.GetAddedButtonBorderAndPadding().LeftRight();
-
return result;
}
@@ -175,10 +171,6 @@ nsHTMLButtonControlFrame::GetPrefISize(nsRenderingContext* aRenderingContext)
kid,
nsLayoutUtils::PREF_ISIZE);
- result += GetWritingMode().IsVertical()
- ? mRenderer.GetAddedButtonBorderAndPadding().TopBottom()
- : mRenderer.GetAddedButtonBorderAndPadding().LeftRight();
-
return result;
}
@@ -192,9 +184,6 @@ nsHTMLButtonControlFrame::Reflow(nsPresContext* aPresContext,
DO_GLOBAL_REFLOW_COUNT("nsHTMLButtonControlFrame");
DISPLAY_REFLOW(aPresContext, this, aReflowInput, aDesiredSize, aStatus);
- NS_PRECONDITION(aReflowInput.ComputedISize() != NS_INTRINSICSIZE,
- "Should have real computed inline-size by now");
-
if (mState & NS_FRAME_FIRST_REFLOW) {
nsFormControlFrame::RegUnRegAccessKey(static_cast<nsIFrame*>(this), true);
}
@@ -237,34 +226,6 @@ nsHTMLButtonControlFrame::Reflow(nsPresContext* aPresContext,
NS_FRAME_SET_TRUNCATION(aStatus, aReflowInput, aDesiredSize);
}
-// Helper-function that lets us clone the button's reflow state, but with its
-// ComputedWidth and ComputedHeight reduced by the amount of renderer-specific
-// focus border and padding that we're using. (This lets us provide a more
-// appropriate content-box size for descendents' percent sizes to resolve
-// against.)
-static ReflowInput
-CloneReflowInputWithReducedContentBox(
- const ReflowInput& aButtonReflowInput,
- const nsMargin& aFocusPadding)
-{
- nscoord adjustedWidth =
- aButtonReflowInput.ComputedWidth() - aFocusPadding.LeftRight();
- adjustedWidth = std::max(0, adjustedWidth);
-
- // (Only adjust height if it's an actual length.)
- nscoord adjustedHeight = aButtonReflowInput.ComputedHeight();
- if (adjustedHeight != NS_INTRINSICSIZE) {
- adjustedHeight -= aFocusPadding.TopBottom();
- adjustedHeight = std::max(0, adjustedHeight);
- }
-
- ReflowInput clone(aButtonReflowInput);
- clone.SetComputedWidth(adjustedWidth);
- clone.SetComputedHeight(adjustedHeight);
-
- return clone;
-}
-
void
nsHTMLButtonControlFrame::ReflowButtonContents(nsPresContext* aPresContext,
ReflowOutput& aButtonDesiredSize,
@@ -275,53 +236,17 @@ nsHTMLButtonControlFrame::ReflowButtonContents(nsPresContext* aPresContext,
LogicalSize availSize = aButtonReflowInput.ComputedSize(wm);
availSize.BSize(wm) = NS_INTRINSICSIZE;
- // Buttons have some bonus renderer-determined border/padding,
- // which occupies part of the button's content-box area:
- LogicalMargin focusPadding =
- LogicalMargin(wm, mRenderer.GetAddedButtonBorderAndPadding());
-
- // See whether out availSize's inline-size is big enough. If it's
- // smaller than our intrinsic min iSize, that means that the kid
- // wouldn't really fit. In that case, we overflow into our internal
- // focuspadding (which other browsers don't have) so that there's a
- // little more space for it.
- // Note that GetMinISize includes the focusPadding.
- nscoord IOverflow = GetMinISize(aButtonReflowInput.mRenderingContext) -
- aButtonReflowInput.ComputedISize();
- nscoord IFocusPadding = focusPadding.IStartEnd(wm);
- nscoord focusPaddingReduction = std::min(IFocusPadding,
- std::max(IOverflow, 0));
- if (focusPaddingReduction > 0) {
- nscoord startReduction = focusPadding.IStart(wm);
- if (focusPaddingReduction != IFocusPadding) {
- startReduction = NSToCoordRound(startReduction *
- (float(focusPaddingReduction) /
- float(IFocusPadding)));
- }
- focusPadding.IStart(wm) -= startReduction;
- focusPadding.IEnd(wm) -= focusPaddingReduction - startReduction;
- }
-
// shorthand for a value we need to use in a bunch of places
const LogicalMargin& clbp = aButtonReflowInput.ComputedLogicalBorderPadding();
- // Indent the child inside us by the focus border. We must do this separate
- // from the regular border.
- availSize.ISize(wm) -= focusPadding.IStartEnd(wm);
-
LogicalPoint childPos(wm);
- childPos.I(wm) = focusPadding.IStart(wm) + clbp.IStart(wm);
+ childPos.I(wm) = clbp.IStart(wm);
availSize.ISize(wm) = std::max(availSize.ISize(wm), 0);
- // Give child a clone of the button's reflow state, with height/width reduced
- // by focusPadding, so that descendants with height:100% don't protrude.
- ReflowInput adjustedButtonReflowInput =
- CloneReflowInputWithReducedContentBox(aButtonReflowInput,
- focusPadding.GetPhysicalMargin(wm));
-
ReflowInput contentsReflowInput(aPresContext,
- adjustedButtonReflowInput,
- aFirstKid, availSize);
+ aButtonReflowInput,
+ aFirstKid,
+ availSize);
nsReflowStatus contentsReflowStatus;
ReflowOutput contentsDesiredSize(aButtonReflowInput);
@@ -346,9 +271,8 @@ nsHTMLButtonControlFrame::ReflowButtonContents(nsPresContext* aPresContext,
buttonContentBox.BSize(wm) = aButtonReflowInput.ComputedBSize();
} else {
// Button is intrinsically sized -- it should shrinkwrap the
- // button-contents' bSize, plus any focus-padding space:
- buttonContentBox.BSize(wm) =
- contentsDesiredSize.BSize(wm) + focusPadding.BStartEnd(wm);
+ // button-contents' bSize:
+ buttonContentBox.BSize(wm) = contentsDesiredSize.BSize(wm);
// Make sure we obey min/max-bSize in the case when we're doing intrinsic
// sizing (we get it for free when we have a non-intrinsic
@@ -363,8 +287,7 @@ nsHTMLButtonControlFrame::ReflowButtonContents(nsPresContext* aPresContext,
if (aButtonReflowInput.ComputedISize() != NS_INTRINSICSIZE) {
buttonContentBox.ISize(wm) = aButtonReflowInput.ComputedISize();
} else {
- buttonContentBox.ISize(wm) =
- contentsDesiredSize.ISize(wm) + focusPadding.IStartEnd(wm);
+ buttonContentBox.ISize(wm) = contentsDesiredSize.ISize(wm);
buttonContentBox.ISize(wm) =
NS_CSS_MINMAX(buttonContentBox.ISize(wm),
aButtonReflowInput.ComputedMinISize(),
@@ -372,16 +295,12 @@ nsHTMLButtonControlFrame::ReflowButtonContents(nsPresContext* aPresContext,
}
// Center child in the block-direction in the button
- // (technically, inside of the button's focus-padding area)
- nscoord extraSpace =
- buttonContentBox.BSize(wm) - focusPadding.BStartEnd(wm) -
- contentsDesiredSize.BSize(wm);
+ nscoord extraSpace = buttonContentBox.BSize(wm) - contentsDesiredSize.BSize(wm);
childPos.B(wm) = std::max(0, extraSpace / 2);
- // Adjust childPos.B() to be in terms of the button's frame-rect, instead of
- // its focus-padding rect:
- childPos.B(wm) += focusPadding.BStart(wm) + clbp.BStart(wm);
+ // Adjust childPos.B() to be in terms of the button's frame-rect:
+ childPos.B(wm) += clbp.BStart(wm);
nsSize containerSize =
(buttonContentBox + clbp.Size(wm)).GetPhysicalSize(wm);
diff --git a/layout/forms/test/test_issue1970_manual.html b/layout/forms/test/test_issue1970_manual.html
new file mode 100644
index 0000000000..223c6e845d
--- /dev/null
+++ b/layout/forms/test/test_issue1970_manual.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<style>
+.fontA {
+ font-family: "Noto Sans";
+}
+.fontB {
+ font-family: "Noto Sans CJK TC";
+}
+.fontC {
+ font-family: "WenQuanYi Zen Hei";
+}
+</style>
+</head>
+<body>
+<p>No clipping of the font glyphs should occur.</p>
+<select>
+ <option>Latin Text jpg</option>
+</select>
+<select>
+ <option>漢字 jpg</option>
+</select>
+<select class="fontA">
+ <option>漢字 jpg</option>
+</select>
+<select class="fontB">
+ <option>漢字 jpg</option>
+</select>
+<select class="fontC">
+ <option>漢字 jpg</option>
+</select>
+</body>
+</html> \ No newline at end of file
diff --git a/layout/generic/BlockReflowInput.cpp b/layout/generic/BlockReflowInput.cpp
index 86248ac141..e73ae6331c 100644
--- a/layout/generic/BlockReflowInput.cpp
+++ b/layout/generic/BlockReflowInput.cpp
@@ -43,6 +43,7 @@ BlockReflowInput::BlockReflowInput(const ReflowInput& aReflowInput,
mOverflowTracker(nullptr),
mBorderPadding(mReflowInput.ComputedLogicalBorderPadding()),
mPrevBEndMargin(),
+ mMinLineHeight(aReflowInput.GetLineHeight()),
mLineNumber(0),
mFloatBreakType(StyleClear::None),
mConsumedBSize(aConsumedBSize)
@@ -141,8 +142,6 @@ BlockReflowInput::BlockReflowInput(const ReflowInput& aReflowInput,
mPrevChild = nullptr;
mCurrentLine = aFrame->LinesEnd();
-
- mMinLineHeight = aReflowInput.CalcLineHeight();
}
nscoord
diff --git a/layout/generic/ReflowInput.cpp b/layout/generic/ReflowInput.cpp
index 0c3fef3825..01f36cc9db 100644
--- a/layout/generic/ReflowInput.cpp
+++ b/layout/generic/ReflowInput.cpp
@@ -2798,15 +2798,30 @@ ComputeLineHeight(nsStyleContext* aStyleContext,
return GetNormalLineHeight(fm);
}
-nscoord
-ReflowInput::CalcLineHeight() const
-{
+nscoord ReflowInput::GetLineHeight() const {
+ if (mLineHeight != NS_AUTOHEIGHT) {
+ return mLineHeight;
+ }
+
nscoord blockBSize =
nsLayoutUtils::IsNonWrapperBlock(mFrame) ? ComputedBSize() :
(mCBReflowInput ? mCBReflowInput->ComputedBSize() : NS_AUTOHEIGHT);
- return CalcLineHeight(mFrame->GetContent(), mFrame->StyleContext(), blockBSize,
- nsLayoutUtils::FontSizeInflationFor(mFrame));
+ mLineHeight = CalcLineHeight(mFrame->GetContent(),
+ mFrame->StyleContext(),
+ blockBSize,
+ nsLayoutUtils::FontSizeInflationFor(mFrame));
+}
+
+void ReflowInput::SetLineHeight(nscoord aLineHeight) {
+ MOZ_ASSERT(aLineHeight >= 0, "aLineHeight must be >= 0!");
+
+ if (mLineHeight != aLineHeight) {
+ mLineHeight = aLineHeight;
+ // Setting used line height can change a frame's block-size if mFrame's
+ // block-size behaves as auto.
+ InitResizeFlags(mFrame->PresContext(), mFrame->GetType());
+ }
}
/* static */ nscoord
diff --git a/layout/generic/ReflowInput.h b/layout/generic/ReflowInput.h
index 1d2df6af68..a70549d8eb 100644
--- a/layout/generic/ReflowInput.h
+++ b/layout/generic/ReflowInput.h
@@ -744,18 +744,24 @@ public:
nscoord GetContainingBlockContentISize(mozilla::WritingMode aWritingMode) const;
/**
- * Calculate the used line-height property. The return value will be >= 0.
+ * Get the used line-height property. The return value will be >= 0.
*/
- nscoord CalcLineHeight() const;
+ nscoord GetLineHeight() const;
+
+ /**
+ * Set the used line-height. aLineHeight must be >= 0.
+ */
+ void SetLineHeight(nscoord aLineHeight);
/**
- * Same as CalcLineHeight() above, but doesn't need a reflow state.
+ * Calculate the used line-height property without a reflow input instance.
+ * The return value will be >= 0.
*
* @param aBlockBSize The computed block size of the content rect of the block
- * that the line should fill.
- * Only used with line-height:-moz-block-height.
- * NS_AUTOHEIGHT results in a normal line-height for
- * line-height:-moz-block-height.
+ * that the line should fill.
+ * Only used with line-height:-moz-block-height.
+ * NS_AUTOHEIGHT results in a normal line-height for
+ * line-height:-moz-block-height.
* @param aFontSizeInflation The result of the appropriate
* nsLayoutUtils::FontSizeInflationFor call,
* or 1.0 if during intrinsic size
@@ -1000,6 +1006,9 @@ protected:
nscoord* aOutsideBoxSizing) const;
void CalculateBlockSideMargins(nsIAtom* aFrameType);
+
+ // Cache the used line-height property.
+ mutable nscoord mLineHeight = NS_AUTOHEIGHT;
};
} // namespace mozilla
diff --git a/layout/generic/nsBRFrame.cpp b/layout/generic/nsBRFrame.cpp
index 08c0fe3dda..e02711353a 100644
--- a/layout/generic/nsBRFrame.cpp
+++ b/layout/generic/nsBRFrame.cpp
@@ -125,7 +125,7 @@ BRFrame::Reflow(nsPresContext* aPresContext,
RefPtr<nsFontMetrics> fm =
nsLayoutUtils::GetInflatedFontMetricsForFrame(this);
if (fm) {
- nscoord logicalHeight = aReflowInput.CalcLineHeight();
+ nscoord logicalHeight = aReflowInput.GetLineHeight();
finalSize.BSize(wm) = logicalHeight;
aMetrics.SetBlockStartAscent(nsLayoutUtils::GetCenteredFontBaseline(
fm, logicalHeight, wm.IsLineInverted()));
diff --git a/layout/generic/nsRubyBaseContainerFrame.cpp b/layout/generic/nsRubyBaseContainerFrame.cpp
index 91bbf5de85..ed2a35b417 100644
--- a/layout/generic/nsRubyBaseContainerFrame.cpp
+++ b/layout/generic/nsRubyBaseContainerFrame.cpp
@@ -363,7 +363,7 @@ nsRubyBaseContainerFrame::Reflow(nsPresContext* aPresContext,
// Line number is useless for ruby text
// XXX nullptr here may cause problem, see comments for
// nsLineLayout::mBlockRI and nsLineLayout::AddFloat
- lineLayout->Init(nullptr, reflowInput->CalcLineHeight(), -1);
+ lineLayout->Init(nullptr, reflowInput->GetLineHeight(), -1);
reflowInput->mLineLayout = lineLayout;
// Border and padding are suppressed on ruby text containers.
diff --git a/layout/reftests/bugs/491180-1-ref.html b/layout/reftests/bugs/491180-1-ref.html
index 2cf61ad165..e9dcf7cc56 100644
--- a/layout/reftests/bugs/491180-1-ref.html
+++ b/layout/reftests/bugs/491180-1-ref.html
@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html>
- <div style="padding: 0; margin: 0; border: none; background: transparent; -moz-appearance: none; width: 0; height: 0; font: inherit; padding: 1px 0">
+ <div style="padding: 0; margin: 0; border: none; background: transparent; -moz-appearance: none; width: 0; height: 0; font: inherit; padding: 0">
Some text <div style="background: green; width: 100px; height: 100px"></div>
</div>
diff --git a/layout/reftests/bugs/491180-2-ref.html b/layout/reftests/bugs/491180-2-ref.html
index 2b7a85630d..7ab4aa58c5 100644
--- a/layout/reftests/bugs/491180-2-ref.html
+++ b/layout/reftests/bugs/491180-2-ref.html
@@ -1,4 +1,4 @@
<!DOCTYPE html>
<html>
- <div style="padding: 0; margin: 0; border: none; background: transparent; -moz-appearance: none; width: 20px; font: inherit; padding: 1px 0; white-space: pre; overflow: hidden">Some text</div>
+ <div style="padding: 0; margin: 0; border: none; background: transparent; -moz-appearance: none; width: 20px; font: inherit; padding: 0; white-space: pre; overflow: hidden">Some text</div>
</div>
diff --git a/layout/reftests/css-grid/grid-item-intrinsic-size-normal-001-ref.html b/layout/reftests/css-grid/grid-item-intrinsic-size-normal-001-ref.html
index 98cd026d6d..c0dbcbac03 100644
--- a/layout/reftests/css-grid/grid-item-intrinsic-size-normal-001-ref.html
+++ b/layout/reftests/css-grid/grid-item-intrinsic-size-normal-001-ref.html
@@ -147,79 +147,79 @@ button {
var buttonSizes =
[
['32px', '4px'],
- ['8px', '4px'],
- ['8px', '4px'],
- ['8px', '4px'],
- ['8px', '4px'],
- ['2px', '4px'],
+ ['0px', '0px'],
+ ['0px', '4px'],
+ ['0px', '4px'],
+ ['0px', '4px'],
+ ['0px', '4px'],
['32px', '20px'],
['10px', '20px'],
- ['8px', '20px'],
- ['8px', '20px'],
- ['8px', '20px'],
- ['8px', '20px'],
- ['8px', '20px'],
- ['8px', '20px'],
+ ['0px', '20px'],
+ ['0px', '20px'],
+ ['0px', '20px'],
+ ['0px', '20px'],
+ ['0px', '20px'],
+ ['0px', '20px'],
['32px', '4px'],
['10px', '4px'],
- ['8px', '4px'],
- ['8px', '4px'],
- ['8px', '4px'],
- ['8px', '4px'],
- ['8px', '4px'],
- ['2px', '4px'],
- ['4px', '32px'],
- ['2px', '32px'],
- ['4px', '4px'],
- ['2px', '4px'],
- ['4px', '32px'],
- ['2px', '32px'],
+ ['0px', '0px'],
+ ['0px', '0px'],
+ ['0px', '4px'],
+ ['0px', '4px'],
+ ['0px', '4px'],
+ ['0px', '4px'],
['4px', '32px'],
['2px', '32px'],
+ ['0px', '0px'],
+ ['2px', '0px'],
+ ['0px', '32px'],
+ ['0px', '32px'],
+ ['0px', '32px'],
+ ['0px', '32px'],
['20px', '32px'],
['20px', '10px'],
- ['20px', '4px'],
- ['20px', '4px'],
+ ['20px', '0px'],
+ ['20px', '0px'],
['20px', '32px'],
['20px', '10px'],
['20px', '32px'],
['20px', '10px'],
['4px', '32px'],
['4px', '10px'],
- ['8px', '4px'],
- ['8px', '4px'],
- ['8px', '32px'],
- ['8px', '10px'],
- ['8px', '32px'],
- ['8px', '10px'],
- ['20px', '4px'],
- ['20px', '4px'],
+ ['0px', '0px'],
+ ['0px', '0px'],
+ ['0px', '32px'],
+ ['0px', '10px'],
+ ['0px', '32px'],
+ ['0px', '10px'],
['20px', '4px'],
['20px', '4px'],
+ ['20px', '0px'],
+ ['20px', '0px'],
['20px', '4px'],
['20px', '2px'],
['20px', '4px'],
['20px', '2px'],
- ['20px', '4px'],
- ['20px', '4px'],
- ['20px', '4px'],
- ['20px', '4px'],
+ ['20px', '0px'],
+ ['20px', '0px'],
+ ['20px', '0px'],
+ ['20px', '0px'],
['20px', '32px'],
['20px', '10px'],
['20px', '32px'],
['20px', '10px'],
['32px', '20px'],
['10px', '20px'],
- ['8px', '20px'],
- ['8px', '20px'],
+ ['0px', '20px'],
+ ['0px', '20px'],
['32px', '20px'],
['10px', '20px'],
['32px', '20px'],
['10px', '20px'],
['4px', '20px'],
['2px', '20px'],
- ['4px', '20px'],
- ['4px', '20px'],
+ ['0px', '20px'],
+ ['0px', '20px'],
['4px', '20px'],
['2px', '20px'],
['4px', '20px'],
diff --git a/layout/reftests/css-sizing/min-intrinsic-with-percents-across-elements-ref.html b/layout/reftests/css-sizing/min-intrinsic-with-percents-across-elements-ref.html
index dbd50f8f4b..57dd5ac56c 100644
--- a/layout/reftests/css-sizing/min-intrinsic-with-percents-across-elements-ref.html
+++ b/layout/reftests/css-sizing/min-intrinsic-with-percents-across-elements-ref.html
@@ -89,14 +89,14 @@ canvas {
</tr></table>
<table><tr>
- <!-- 2px border, 2px padding, 4px ::-moz-focus-inner padding, 2px ::-moz-focus-inner border -->
- <td><div style="width: 10px"><input type="button" style="width: 5px"></div></td>
+ <!-- 2px border, 2px padding -->
+ <td><div style="width: 4px"><input type="button" style="width: 2px"></div></td>
<td>empty input type="button", width: 50%</td>
</tr></table>
<table><tr>
- <!-- 2px border, 2px padding, 4px ::-moz-focus-inner padding, 2px ::-moz-focus-inner border -->
- <td><div style="width: 10px"><input type="button" style="width: 5px"></div></td>
+ <!-- 2px border, 2px padding -->
+ <td><div style="width: 4px"><input type="button" style="width: 2px"></div></td>
<td>empty input type="button", max-width: 50%</td>
</tr></table>
diff --git a/layout/reftests/forms/button/focus-area-percent-units-1-ref.html b/layout/reftests/forms/button/focus-area-percent-units-1-ref.html
deleted file mode 100644
index 6c66d5f178..0000000000
--- a/layout/reftests/forms/button/focus-area-percent-units-1-ref.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE html>
-<!-- Any copyright is dedicated to the Public Domain.
- - http://creativecommons.org/publicdomain/zero/1.0/ -->
-<html>
-<head>
- <title>Reference case for bug 1272983</title>
- <style>
- /* Set explicit font size so that em units are predictable: */
- body, button { font: 10px sans-serif; }
-
- /* Set margin to 0 for all cases. In the first 6, that's how we expect
- the testcase to render; and in the 7th and 8th, our reference margin
- will be applied via a child div instead of via the pseudo-element. */
- button.mfi1::-moz-focus-inner,
- button.mfi2::-moz-focus-inner,
- button.mfi3::-moz-focus-inner,
- button.mfi4::-moz-focus-inner,
- button.mfi5::-moz-focus-inner,
- button.mfi6::-moz-focus-inner,
- button.mfi7::-moz-focus-inner,
- button.mfi8::-moz-focus-inner { margin: 0; }
-
- /* Use an explicit div instead of pseudo-element, for reference case's
- version of margin values that we actually expect to take effect: */
- button.mfi7 > div { margin: 10px; }
- button.mfi8 > div { margin: 20px; /* = 2em * 20px/em */ }
- </style>
-</head>
-<body>
- <button class="mfi1">mfi1</button>
- <button class="mfi2">mfi2</button>
- <button class="mfi3">mfi3</button>
- <button class="mfi4">mfi4</button>
- <br>
- <button class="mfi5">mfi5</button>
- <button class="mfi6">mfi6</button>
- <button class="mfi7"><div>mfi7</div></button>
- <button class="mfi8"><div>mfi8</div></button>
- <br>
-
- <button class="mfo1">mfo1</button>
- <button class="mfo2">mfo2</button>
- <button class="mfo3">mfo3</button>
- <button class="mfo4">mfo4</button>
- <br>
- <button class="mfo5">mfo5</button>
- <button class="mfo6">mfo6</button>
- <button class="mfo7">mfo7</button>
- <button class="mfo8">mfo8</button>
- <br>
-</body>
-</html>
diff --git a/layout/reftests/forms/button/focus-area-percent-units-1.html b/layout/reftests/forms/button/focus-area-percent-units-1.html
deleted file mode 100644
index 17d65b3b02..0000000000
--- a/layout/reftests/forms/button/focus-area-percent-units-1.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE html>
-<!-- Any copyright is dedicated to the Public Domain.
- - http://creativecommons.org/publicdomain/zero/1.0/ -->
-<html>
-<!-- The ::-moz-focus-inner & ::-moz-focus-outer button pseudo-elements only
- support CSS "margin" values that contain absolute lengths. Any percent or
- "auto" margin values will simply make the margin collapse to zero.
- This test verifies that this is indeed what happens (not anything worse).
--->
-<head>
- <title>Testcase for bug 1272983</title>
- <style>
- /* Set explicit font size so that em units are predictable: */
- body, button { font: 10px sans-serif; }
-
- /* Testing percent and auto margin values on "-moz-focus-inner": */
- button.mfi1::-moz-focus-inner { margin: 50%; }
- button.mfi2::-moz-focus-inner { margin: 50% 10px; }
- button.mfi3::-moz-focus-inner { margin: 10px 50%; }
- button.mfi4::-moz-focus-inner { margin: auto; }
- button.mfi5::-moz-focus-inner { margin: auto 10px; }
- button.mfi6::-moz-focus-inner { margin: 10px auto; }
- button.mfi7::-moz-focus-inner { margin: 10px; }
- button.mfi8::-moz-focus-inner { margin: 2em; }
-
- /* Testing percent and auto margin values on "-moz-focus-outer":
- (just for completeness -- really, 'margin' has no effect on
- the behavior of -moz-focus-outer) */
- button.mfo1::-moz-focus-outer { margin: 50%; }
- button.mfo2::-moz-focus-outer { margin: 50% 10px; }
- button.mfo3::-moz-focus-outer { margin: 10px 50%; }
- button.mfo4::-moz-focus-outer { margin: auto; }
- button.mfo5::-moz-focus-outer { margin: auto 10px; }
- button.mfo6::-moz-focus-outer { margin: 10px auto; }
- button.mfo7::-moz-focus-outer { margin: 10px; }
- button.mfo8::-moz-focus-outer { margin: 2em; }
- </style>
-</head>
-<body>
- <button class="mfi1">mfi1</button>
- <button class="mfi2">mfi2</button>
- <button class="mfi3">mfi3</button>
- <button class="mfi4">mfi4</button>
- <br>
- <button class="mfi5">mfi5</button>
- <button class="mfi6">mfi6</button>
- <button class="mfi7">mfi7</button>
- <button class="mfi8">mfi8</button>
- <br>
-
- <button class="mfo1">mfo1</button>
- <button class="mfo2">mfo2</button>
- <button class="mfo3">mfo3</button>
- <button class="mfo4">mfo4</button>
- <br>
- <button class="mfo5">mfo5</button>
- <button class="mfo6">mfo6</button>
- <button class="mfo7">mfo7</button>
- <button class="mfo8">mfo8</button>
- <br>
-</body>
-</html>
diff --git a/layout/reftests/forms/button/focus-area-percent-units-2-ref.html b/layout/reftests/forms/button/focus-area-percent-units-2-ref.html
deleted file mode 100644
index 6b6a6056d4..0000000000
--- a/layout/reftests/forms/button/focus-area-percent-units-2-ref.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<!-- Any copyright is dedicated to the Public Domain.
- - http://creativecommons.org/publicdomain/zero/1.0/ -->
-<html>
-<head>
- <title>Reference case for bug 1272983</title>
- <style>
- /* Set explicit font size so that em units are predictable: */
- body, button { font: 10px sans-serif; }
-
- /* Add outline to help visualize the padding outside of buttons: */
- button { outline: 1px solid black; }
-
- /* Set padding to 0 for all cases. In the first 3, that's how we expect
- the testcase to render; and in the 4th and 5th, our reference padding
- will be applied via a child div instead of via the pseudo-element. */
- button.mfi1::-moz-focus-inner,
- button.mfi2::-moz-focus-inner,
- button.mfi3::-moz-focus-inner,
- button.mfi4::-moz-focus-inner,
- button.mfi5::-moz-focus-inner { padding: 0; }
-
- /* Use an explicit div instead of pseudo-element, for reference case's
- version of padding values that we actually expect to take effect: */
- button.mfi4 > div { padding: 10px; }
- button.mfi5 > div { padding: 2em; }
-
- /* As above, set padding to 0 for all cases: */
- button.mfo1::-moz-focus-outer,
- button.mfo2::-moz-focus-outer,
- button.mfo3::-moz-focus-outer,
- button.mfo4::-moz-focus-outer,
- button.mfo5::-moz-focus-outer { padding: 0; }
-
- /* To make reference for -moz-focus-outer padding that we expect to
- take effect, we'll put the padding on a wrapper-div (and bump the
- button's outline to that div). */
- div.mfo4-wrapper { padding: 10px; }
- div.mfo5-wrapper { padding: 20px; /* = 2em * 10px/em */ }
-
- button.mfo4,
- button.mfo5 { outline: none; }
- div.mfo4-wrapper,
- div.mfo5-wrapper { display: inline-block; outline: 1px solid black; }
- </style>
-</head>
-<body>
- <button class="mfi1">mfi1</button>
- <button class="mfi2">mfi2</button>
- <button class="mfi3">mfi3</button>
- <br>
- <button class="mfi4"><div>mfi4</div></button>
- <button class="mfi5"><div>mfi5</div></button>
- <br>
-
- <button class="mfo1">mfo1</button>
- <button class="mfo2">mfo2</button>
- <button class="mfo3">mfo3</button>
- <br>
- <div class="mfo4-wrapper">
- <button class="mfo4">mfo4</button>
- </div>
- <div class="mfo5-wrapper">
- <button class="mfo5">mfo5</button>
- </div>
- <br>
-</body>
-</html>
diff --git a/layout/reftests/forms/button/focus-area-percent-units-2.html b/layout/reftests/forms/button/focus-area-percent-units-2.html
deleted file mode 100644
index 3c0cb8612f..0000000000
--- a/layout/reftests/forms/button/focus-area-percent-units-2.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE html>
-<!-- Any copyright is dedicated to the Public Domain.
- - http://creativecommons.org/publicdomain/zero/1.0/ -->
-<html>
-<!-- The ::-moz-focus-inner & ::-moz-focus-outer button pseudo-elements only
- support CSS "padding" values that contain absolute lengths. Any percent
- padding values will simply make the padding collapse to zero.
- This test verifies that this is indeed what happens (not anything worse).
--->
-<head>
- <title>Testcase for bug 1272983</title>
- <style>
- /* Set explicit font size so that em units are predictable: */
- body, button { font: 10px sans-serif; }
-
- /* Add outline to help visualize the padding outside of buttons: */
- button { outline: 1px solid black; }
-
- /* Testing percent and auto padding values on "-moz-focus-inner": */
- button.mfi1::-moz-focus-inner { padding: 50%; }
- button.mfi2::-moz-focus-inner { padding: 50% 10px; }
- button.mfi3::-moz-focus-inner { padding: 10px 50%; }
- button.mfi4::-moz-focus-inner { padding: 10px; }
- button.mfi5::-moz-focus-inner { padding: 2em; }
-
- /* Testing percent and auto padding values on "-moz-focus-outer": */
- button.mfo1::-moz-focus-outer { padding: 50%; }
- button.mfo2::-moz-focus-outer { padding: 50% 10px; }
- button.mfo3::-moz-focus-outer { padding: 10px 50%; }
- button.mfo4::-moz-focus-outer { padding: 10px; }
- button.mfo5::-moz-focus-outer { padding: 2em; }
- </style>
-</head>
-<body>
- <button class="mfi1">mfi1</button>
- <button class="mfi2">mfi2</button>
- <button class="mfi3">mfi3</button>
- <br>
- <button class="mfi4">mfi4</button>
- <button class="mfi5">mfi5</button>
- <br>
-
- <button class="mfo1">mfo1</button>
- <button class="mfo2">mfo2</button>
- <button class="mfo3">mfo3</button>
- <br>
- <button class="mfo4">mfo4</button>
- <button class="mfo5">mfo5</button>
- <br>
-</body>
-</html>
diff --git a/layout/reftests/forms/button/percent-height-child-2-ref.html b/layout/reftests/forms/button/percent-height-child-2-ref.html
deleted file mode 100644
index 7491ed71e4..0000000000
--- a/layout/reftests/forms/button/percent-height-child-2-ref.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE html>
-<!--
- Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/
--->
-<html>
-<head>
-<style>
-div.button {
- display: inline-block;
- width: 78px;
- border: 0;
-
- /* Padding to match the -moz-focus-inner border/padding in testcase: */
- padding: 7px 1px 3px;
-
- font: 10px sans-serif;
- text-align: center;
- vertical-align: top;
-
- color: black;
- background: gray;
-}
-
-div.p80 {
- background: pink;
-}
-
-div.p100 {
- background: yellow;
-}
-</style>
-</head>
-<body>
-<!--Button has explicit height for us to resolve against: -->
-<div class="button" style="height: 100px">
- <div class="p80" style="margin-top: 10px; height: 80px">abc</div>
-</div>
-
-<div class="button" style="height: 100px">
- <div class="p100" style="height: 100px">abc</div>
-</div>
-
-<!--Button is using intrinsic height: -->
-<div class="button">
- <div class="p80">abc</div>
-</div>
-
-<div class="button">
- <div class="p100">abc</div>
-</div>
-
-</body>
-</html>
diff --git a/layout/reftests/forms/button/percent-height-child-2.html b/layout/reftests/forms/button/percent-height-child-2.html
deleted file mode 100644
index 7eecea1ad4..0000000000
--- a/layout/reftests/forms/button/percent-height-child-2.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE html>
-<!--
- Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/
--->
-<!-- This test verifies that we honor percent heights on content inside of
- a <button> element (resolving the percent against the <button>).
- (In this testcase, the button has some focus-border/padding, which
- occupies part of the button's content-box and which we'll have to
- subtract out from the button's size before using it to resolve
- percentages sizes.) -->
-<html>
-<head>
-<style>
-button {
- width: 80px;
- border: 0;
- padding: 0;
-
- font: 10px sans-serif;
- vertical-align: top;
-
- color: black;
- background: gray;
- -moz-appearance: none;
-}
-button::-moz-focus-inner {
- padding: 6px 0 2px;
- border: 1px dotted transparent;
-}
-
-div.p80 {
- height: 80%;
- background: pink;
-}
-
-div.p100 {
- height: 100%;
- background: yellow;
-}
-</style>
-</head>
-<body>
-<!--Button has explicit height for us to resolve against: -->
-<button style="height: 110px">
- <div class="p80">abc</div>
-</button>
-
-<button style="height: 110px">
- <div class="p100">abc</div>
-</button>
-
-<!--Button is using intrinsic height: -->
-<button>
- <div class="p80">abc</div>
-</button>
-
-<button>
- <div class="p100">abc</div>
-</button>
-
-</body>
-</html>
diff --git a/layout/reftests/forms/button/percent-width-child-2-ref.html b/layout/reftests/forms/button/percent-width-child-2-ref.html
deleted file mode 100644
index 19a24a7375..0000000000
--- a/layout/reftests/forms/button/percent-width-child-2-ref.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!DOCTYPE html>
-<!--
- Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/
--->
-<html>
-<head>
-<style>
-div.button {
- display: inline-block;
- border: 0;
-
- /* Padding to match the -moz-focus-inner border/padding in testcase: */
- padding: 1px 7px 1px 3px;
-
- font: 10px sans-serif;
- text-align: center;
- vertical-align: top;
-
- color: black;
- background: gray;
-}
-
-div.p80 {
- width: 80%;
- background: pink;
-}
-
-div.p100 {
- width: 100%;
- background: yellow;
-}
-</style>
-</head>
-<body>
-<!--Button has explicit width for us to resolve against: -->
-<div class="button" style="width: 100px">
- <div class="p80">abc</div>
-</div>
-
-<div class="button" style="width: 100px">
- <div class="p100">abc</div>
-</div>
-
-<!--Button is using intrinsic width: -->
-<div class="button">
- <div class="p80">abc</div>
-</div>
-
-<div class="button">
- <div class="p100">abc</div>
-</div>
-
-</body>
-</html>
diff --git a/layout/reftests/forms/button/percent-width-child-2.html b/layout/reftests/forms/button/percent-width-child-2.html
deleted file mode 100644
index d46ff62af5..0000000000
--- a/layout/reftests/forms/button/percent-width-child-2.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE html>
-<!--
- Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/
--->
-<!-- This test verifies that we honor percent widths on content inside of
- a <button> element (resolving the percent against the <button>).
- (In this testcase, the button has some focus-border/padding, which
- occupies part of the button's content-box and which we'll have to
- subtract out from the button's size before using it to resolve
- percentages sizes.) -->
-<html>
-<head>
-<style>
-button {
- border: 0;
- padding: 0;
-
- font: 10px sans-serif;
- vertical-align: top;
-
- color: black;
- background: gray;
- -moz-appearance: none;
-}
-button::-moz-focus-inner {
- padding: 0 6px 0 2px;
- border: 1px dotted transparent;
-}
-
-div.p80 {
- width: 80%;
- background: pink;
-}
-
-div.p100 {
- width: 100%;
- background: yellow;
-}
-</style>
-</head>
-<body>
-<!--Button has explicit width for us to resolve against: -->
-<button style="width: 110px">
- <div class="p80">abc</div>
-</button>
-
-<button style="width: 110px">
- <div class="p100">abc</div>
-</button>
-
-<!--Button is using intrinsic width: -->
-<button>
- <div class="p80">abc</div>
-</button>
-
-<button>
- <div class="p100">abc</div>
-</button>
-
-</body>
-</html>
diff --git a/layout/reftests/forms/button/reftest.list b/layout/reftests/forms/button/reftest.list
index db314516df..7492c8f08c 100644
--- a/layout/reftests/forms/button/reftest.list
+++ b/layout/reftests/forms/button/reftest.list
@@ -1,9 +1,6 @@
== first-letter-1.html first-letter-1-ref.html
!= first-letter-1.html first-letter-1-noref.html
-== focus-area-percent-units-1.html focus-area-percent-units-1-ref.html
-== focus-area-percent-units-2.html focus-area-percent-units-2-ref.html
-
== max-height.html max-height-ref.html
== min-height.html min-height-ref.html
== overflow-areas-1.html overflow-areas-1-ref.html
@@ -31,13 +28,7 @@ pref(browser.display.focus_ring_width,1) == percent-width-child-2.html percent-
== width-auto-size-em-ltr.html width-auto-size-em-ltr-ref.html
== width-auto-size-ltr.html width-auto-size-ltr-ref.html
== width-exact-fit-ltr.html width-auto-size-ltr-ref.html
-== width-erode-part-focuspadding-ltr.html width-erode-part-focuspadding-ltr-ref.html
-== width-erode-all-focuspadding-ltr.html width-erode-all-focuspadding-ltr-ref.html
-== width-erode-overflow-focuspadding-ltr.html width-erode-overflow-focuspadding-ltr-ref.html
== width-auto-size-em-rtl.html width-auto-size-em-rtl-ref.html
== width-auto-size-rtl.html width-auto-size-rtl-ref.html
== width-exact-fit-rtl.html width-auto-size-rtl-ref.html
-== width-erode-part-focuspadding-rtl.html width-erode-part-focuspadding-rtl-ref.html
-== width-erode-all-focuspadding-rtl.html width-erode-all-focuspadding-rtl-ref.html
-== width-erode-overflow-focuspadding-rtl.html width-erode-overflow-focuspadding-rtl-ref.html
== display-grid-flex-columnset.html display-grid-flex-columnset-ref.html
diff --git a/layout/reftests/forms/button/width-auto-size-em-ltr-ref.html b/layout/reftests/forms/button/width-auto-size-em-ltr-ref.html
index 1e7ab40bba..4a998c3435 100644
--- a/layout/reftests/forms/button/width-auto-size-em-ltr-ref.html
+++ b/layout/reftests/forms/button/width-auto-size-em-ltr-ref.html
@@ -11,7 +11,6 @@ div.button {
span {
display: inline-block; vertical-align: middle;
height: 2em; width: 5em; border: 2px solid blue;
- margin: 1px 3px; /* for implicit focuspadding */
}
</style>
diff --git a/layout/reftests/forms/button/width-auto-size-em-rtl-ref.html b/layout/reftests/forms/button/width-auto-size-em-rtl-ref.html
index 1214714744..59f3ba424b 100644
--- a/layout/reftests/forms/button/width-auto-size-em-rtl-ref.html
+++ b/layout/reftests/forms/button/width-auto-size-em-rtl-ref.html
@@ -12,7 +12,6 @@ div.button {
span {
display: inline-block; vertical-align: middle;
height: 2em; width: 5em; border: 2px solid blue;
- margin: 1px 3px; /* for implicit focuspadding */
}
</style>
diff --git a/layout/reftests/forms/button/width-auto-size-ltr-ref.html b/layout/reftests/forms/button/width-auto-size-ltr-ref.html
index c1ba89860e..48372131ea 100644
--- a/layout/reftests/forms/button/width-auto-size-ltr-ref.html
+++ b/layout/reftests/forms/button/width-auto-size-ltr-ref.html
@@ -12,7 +12,6 @@ div.button {
span {
display: inline-block; vertical-align: middle;
height: 20px; width: 50px; border: 2px solid blue;
- margin: 1px 3px; /* for implicit focuspadding */
}
</style>
diff --git a/layout/reftests/forms/button/width-auto-size-rtl-ref.html b/layout/reftests/forms/button/width-auto-size-rtl-ref.html
index 3e09016dc3..f644a196f2 100644
--- a/layout/reftests/forms/button/width-auto-size-rtl-ref.html
+++ b/layout/reftests/forms/button/width-auto-size-rtl-ref.html
@@ -13,7 +13,6 @@ div.button {
span {
display: inline-block; vertical-align: middle;
height: 20px; width: 50px; border: 2px solid blue;
- margin: 1px 3px; /* for implicit focuspadding */
}
</style>
diff --git a/layout/reftests/forms/button/width-erode-all-focuspadding-ltr-ref.html b/layout/reftests/forms/button/width-erode-all-focuspadding-ltr-ref.html
deleted file mode 100644
index c85da00e3c..0000000000
--- a/layout/reftests/forms/button/width-erode-all-focuspadding-ltr-ref.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML>
-<style>
-
-div.button {
- display: inline-block;
- background: yellow;
- border: 2px solid fuchsia;
- padding: 2px;
- font-size: 10px;
-}
-
-span {
- display: inline-block; vertical-align: middle;
- height: 20px; width: 50px; border: 2px solid blue;
- margin: 1px 0px; /* for implicit focuspadding, fully eroded */
-}
-
-</style>
-
-<div class=button><span></span></div>
diff --git a/layout/reftests/forms/button/width-erode-all-focuspadding-ltr.html b/layout/reftests/forms/button/width-erode-all-focuspadding-ltr.html
deleted file mode 100644
index 4978a57e4e..0000000000
--- a/layout/reftests/forms/button/width-erode-all-focuspadding-ltr.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML>
-<style>
-
-button {
- -moz-appearance: none;
- background: yellow;
- border: 2px solid fuchsia;
- padding: 2px;
- font-size: 10px;
- width: 62px;
- border-radius: 0; /* override mobile/android/themes/core/content.css */
-}
-
-span {
- display: inline-block; vertical-align: middle;
- height: 20px; width: 50px; border: 2px solid blue;
-}
-
-</style>
-
-<button><span></span></button>
diff --git a/layout/reftests/forms/button/width-erode-overflow-focuspadding-ltr-ref.html b/layout/reftests/forms/button/width-erode-overflow-focuspadding-ltr-ref.html
deleted file mode 100644
index 6f7047cce3..0000000000
--- a/layout/reftests/forms/button/width-erode-overflow-focuspadding-ltr-ref.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML>
-<style>
-
-div.button {
- display: inline-block;
- background: yellow;
- border: 2px solid fuchsia;
- padding: 2px;
- font-size: 10px;
-}
-
-span {
- display: inline-block; vertical-align: middle;
- height: 20px; width: 50px; border: 2px solid blue;
- margin: 1px -2px 1px 0; /* for implicit focuspadding, fully eroded and overflowed */
-}
-
-</style>
-
-<div class=button><span></span></div>
diff --git a/layout/reftests/forms/button/width-erode-overflow-focuspadding-ltr.html b/layout/reftests/forms/button/width-erode-overflow-focuspadding-ltr.html
deleted file mode 100644
index daecef56e4..0000000000
--- a/layout/reftests/forms/button/width-erode-overflow-focuspadding-ltr.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML>
-<style>
-
-button {
- -moz-appearance: none;
- background: yellow;
- border: 2px solid fuchsia;
- padding: 2px;
- font-size: 10px;
- width: 60px;
- border-radius: 0; /* override mobile/android/themes/core/content.css */
-}
-
-span {
- display: inline-block; vertical-align: middle;
- height: 20px; width: 50px; border: 2px solid blue;
-}
-
-</style>
-
-<button><span></span></button>
diff --git a/layout/reftests/forms/button/width-erode-overflow-focuspadding-rtl-ref.html b/layout/reftests/forms/button/width-erode-overflow-focuspadding-rtl-ref.html
deleted file mode 100644
index 1b36154cfc..0000000000
--- a/layout/reftests/forms/button/width-erode-overflow-focuspadding-rtl-ref.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML>
-<html dir=rtl>
-<style>
-
-div.button {
- display: inline-block;
- background: yellow;
- border: 2px solid fuchsia;
- padding: 2px;
- font-size: 10px;
-}
-
-span {
- display: inline-block; vertical-align: middle;
- height: 20px; width: 50px; border: 2px solid blue;
- margin: 1px 0 1px -2px; /* for implicit focuspadding, fully eroded and overflowed */
-}
-
-</style>
-
-<div class=button><span></span></div>
diff --git a/layout/reftests/forms/button/width-erode-overflow-focuspadding-rtl.html b/layout/reftests/forms/button/width-erode-overflow-focuspadding-rtl.html
deleted file mode 100644
index b76a3957a5..0000000000
--- a/layout/reftests/forms/button/width-erode-overflow-focuspadding-rtl.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML>
-<html dir=rtl>
-<style>
-
-button {
- -moz-appearance: none;
- background: yellow;
- border: 2px solid fuchsia;
- padding: 2px;
- font-size: 10px;
- width: 60px;
- border-radius: 0; /* override mobile/android/themes/core/content.css */
-}
-
-span {
- display: inline-block; vertical-align: middle;
- height: 20px; width: 50px; border: 2px solid blue;
-}
-
-</style>
-
-<button><span></span></button>
diff --git a/layout/reftests/forms/button/width-erode-part-focuspadding-ltr-ref.html b/layout/reftests/forms/button/width-erode-part-focuspadding-ltr-ref.html
deleted file mode 100644
index 59cbd02086..0000000000
--- a/layout/reftests/forms/button/width-erode-part-focuspadding-ltr-ref.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML>
-<style>
-
-div.button {
- display: inline-block;
- background: yellow;
- border: 2px solid fuchsia;
- padding: 2px;
- font-size: 10px;
-}
-
-span {
- display: inline-block; vertical-align: middle;
- height: 20px; width: 50px; border: 2px solid blue;
- margin: 1px 2px; /* for implicit focuspadding, partly eroded */
-}
-
-</style>
-
-<div class=button><span></span></div>
diff --git a/layout/reftests/forms/button/width-erode-part-focuspadding-ltr.html b/layout/reftests/forms/button/width-erode-part-focuspadding-ltr.html
deleted file mode 100644
index c0d64b2797..0000000000
--- a/layout/reftests/forms/button/width-erode-part-focuspadding-ltr.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML>
-<style>
-
-button {
- -moz-appearance: none;
- background: yellow;
- border: 2px solid fuchsia;
- padding: 2px;
- font-size: 10px;
- width: 66px;
- border-radius: 0; /* override mobile/android/themes/core/content.css */
-}
-
-span {
- display: inline-block; vertical-align: middle;
- height: 20px; width: 50px; border: 2px solid blue;
-}
-
-</style>
-
-<button><span></span></button>
diff --git a/layout/reftests/forms/button/width-erode-part-focuspadding-rtl-ref.html b/layout/reftests/forms/button/width-erode-part-focuspadding-rtl-ref.html
deleted file mode 100644
index 0765a673df..0000000000
--- a/layout/reftests/forms/button/width-erode-part-focuspadding-rtl-ref.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML>
-<html dir=rtl>
-<style>
-
-div.button {
- display: inline-block;
- background: yellow;
- border: 2px solid fuchsia;
- padding: 2px;
- font-size: 10px;
-}
-
-span {
- display: inline-block; vertical-align: middle;
- height: 20px; width: 50px; border: 2px solid blue;
- margin: 1px 2px; /* for implicit focuspadding, partly eroded */
-}
-
-</style>
-
-<div class=button><span></span></div>
diff --git a/layout/reftests/forms/button/width-erode-part-focuspadding-rtl.html b/layout/reftests/forms/button/width-erode-part-focuspadding-rtl.html
deleted file mode 100644
index 9b88269385..0000000000
--- a/layout/reftests/forms/button/width-erode-part-focuspadding-rtl.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML>
-<html dir=rtl>
-<style>
-
-button {
- -moz-appearance: none;
- background: yellow;
- border: 2px solid fuchsia;
- padding: 2px;
- font-size: 10px;
- width: 66px;
- border-radius: 0; /* override mobile/android/themes/core/content.css */
-}
-
-span {
- display: inline-block; vertical-align: middle;
- height: 20px; width: 50px; border: 2px solid blue;
-}
-
-</style>
-
-<button><span></span></button>
diff --git a/layout/reftests/forms/button/width-exact-fit-ltr.html b/layout/reftests/forms/button/width-exact-fit-ltr.html
index 58db0aa70c..4978a57e4e 100644
--- a/layout/reftests/forms/button/width-exact-fit-ltr.html
+++ b/layout/reftests/forms/button/width-exact-fit-ltr.html
@@ -7,7 +7,7 @@ button {
border: 2px solid fuchsia;
padding: 2px;
font-size: 10px;
- width: 68px;
+ width: 62px;
border-radius: 0; /* override mobile/android/themes/core/content.css */
}
diff --git a/layout/reftests/forms/button/width-exact-fit-rtl.html b/layout/reftests/forms/button/width-exact-fit-rtl.html
index 996a69d831..d4b028b48e 100644
--- a/layout/reftests/forms/button/width-exact-fit-rtl.html
+++ b/layout/reftests/forms/button/width-exact-fit-rtl.html
@@ -8,7 +8,7 @@ button {
border: 2px solid fuchsia;
padding: 2px;
font-size: 10px;
- width: 68px;
+ width: 62px;
border-radius: 0; /* override mobile/android/themes/core/content.css */
}
diff --git a/layout/reftests/forms/select/vertical-centering-ref.html b/layout/reftests/forms/select/vertical-centering-ref.html
index f5d8554563..82bbb7d3d0 100644
--- a/layout/reftests/forms/select/vertical-centering-ref.html
+++ b/layout/reftests/forms/select/vertical-centering-ref.html
@@ -7,15 +7,12 @@
select {
-moz-appearance: none;
border: none;
- font-family: Ahem;
- font-size: 20px;
+ font: 20px/1 Ahem;
box-sizing: content-box;
- /*
- * Why are these top/bottom paddings 7px rather than 10px? 1px each is
- * eaten up by padding on the combobox display area, but I have no idea
- * where the extra 4px somewhere else are coming from...
- */
- padding: 7px 0 7px 0;
+ /* The testcase has 20px-tall text, which should be centered in a 40px-tall
+ content-box (with 10px of extra space above and below). We emulate that
+ by having explicit 10px of padding on top and bottom. */
+ padding: 10px 0 10px 0;
}
</style>
<select>
diff --git a/layout/reftests/forms/select/vertical-centering.html b/layout/reftests/forms/select/vertical-centering.html
index 6a2daa9e7b..fb464395d5 100644
--- a/layout/reftests/forms/select/vertical-centering.html
+++ b/layout/reftests/forms/select/vertical-centering.html
@@ -7,11 +7,10 @@
select {
-moz-appearance: none;
border: none;
- font-family: Ahem;
- font-size: 20px;
- padding: 0;
+ font: 20px/1 Ahem;
box-sizing: content-box;
height: 40px;
+ padding: 0;
}
</style>
<select>
diff --git a/layout/reftests/writing-mode/ua-style-sheet-button-1a-ref.html b/layout/reftests/writing-mode/ua-style-sheet-button-1a-ref.html
index 1c3bc73906..7567da08a6 100644
--- a/layout/reftests/writing-mode/ua-style-sheet-button-1a-ref.html
+++ b/layout/reftests/writing-mode/ua-style-sheet-button-1a-ref.html
@@ -10,12 +10,12 @@
.rtl button,
.ltr input[type="button"],
.rtl input[type="button"] {
- padding: 0px 6px;
+ padding: 0px 8px;
}
.v-rl button,
.v-rl input[type="button"] {
- padding: 6px 0px;
+ padding: 8px 0px;
}
</style>
<div class=ltr>
diff --git a/layout/reftests/writing-mode/ua-style-sheet-input-color-1-ref.html b/layout/reftests/writing-mode/ua-style-sheet-input-color-1-ref.html
index ddd3c7ec43..9b6bfe1a87 100644
--- a/layout/reftests/writing-mode/ua-style-sheet-input-color-1-ref.html
+++ b/layout/reftests/writing-mode/ua-style-sheet-input-color-1-ref.html
@@ -10,13 +10,13 @@
.rtl input[type="color"]:-moz-system-metric(color-picker-available) {
width: 64px;
height: 23px;
- padding: 0px 6px;
+ padding: 0px 8px;
}
.v-rl input[type="color"]:-moz-system-metric(color-picker-available) {
height: 64px;
width: 23px;
- padding: 6px 0px;
+ padding: 8px 0px;
}
</style>
<div class=ltr>
diff --git a/layout/style/nsLayoutStylesheetCache.cpp b/layout/style/nsLayoutStylesheetCache.cpp
index 7c09202e6a..9591ad4f4a 100644
--- a/layout/style/nsLayoutStylesheetCache.cpp
+++ b/layout/style/nsLayoutStylesheetCache.cpp
@@ -637,7 +637,6 @@ nsLayoutStylesheetCache::BuildPreferenceSheet(RefPtr<StyleSheet>* aSheet,
"button::-moz-focus-inner, input[type=\"reset\"]::-moz-focus-inner, "
"input[type=\"button\"]::-moz-focus-inner, "
"input[type=\"submit\"]::-moz-focus-inner { "
- "padding: 1px 2px 1px 2px; "
"border: %dpx %s transparent !important; }\n",
focusRingWidth,
focusRingStyle == 0 ? "solid" : "dotted");
diff --git a/layout/style/res/forms.css b/layout/style/res/forms.css
index db75151d48..a808822c89 100644
--- a/layout/style/res/forms.css
+++ b/layout/style/res/forms.css
@@ -251,6 +251,8 @@ select {
display: inline-block;
page-break-inside: avoid;
overflow-clip-box: padding-box !important; /* bug 992447 */
+ padding-block-start: 1px;
+ padding-block-end: 1px;
}
/* Need the "select[size][multiple]" selector to override the settings on
@@ -263,8 +265,6 @@ select[size][multiple] {
background-color: -moz-Field;
color: -moz-FieldText;
vertical-align: text-bottom;
- padding-block-start: 1px;
- padding-block-end: 1px;
padding-inline-start: 0;
padding-inline-end: 0;
-moz-appearance: listbox;
@@ -327,10 +327,6 @@ select:empty {
*|*::-moz-display-comboboxcontrol-frame {
overflow: -moz-hidden-unscrollable;
- /* This block-start/end padding plus the combobox block-start/end border need to
- add up to the block-start/end borderpadding of text inputs and buttons */
- padding-block-start: 1px;
- padding-block-end: 1px;
padding-inline-start: 4px;
padding-inline-end: 0;
color: inherit;
@@ -627,12 +623,12 @@ input[type="button"],
input[type="submit"] {
-moz-appearance: button;
/* The sum of border and padding on block-start and block-end
- must be the same here, for text inputs, and for <select>. For
- buttons, make sure to include the -moz-focus-inner border/padding. */
+ must be the same here, for text inputs, and for <select>.
+ Note -moz-focus-inner padding does not affect button size. */
padding-block-start: 0px;
- padding-inline-end: 6px;
+ padding-inline-end: 8px;
padding-block-end: 0px;
- padding-inline-start: 6px;
+ padding-inline-start: 8px;
border: 2px outset ThreeDLightShadow;
background-color: ButtonFace;
cursor: default;
@@ -725,9 +721,9 @@ input[type="button"]:active:hover,
input[type="submit"]:active:hover {
%ifndef XP_MACOSX
padding-block-start: 0px;
- padding-inline-end: 5px;
+ padding-inline-end: 7px;
padding-block-end: 0px;
- padding-inline-start: 7px;
+ padding-inline-start: 9px;
%endif
border-style: inset;
background-color: ButtonFace;
@@ -746,6 +742,7 @@ input[type="reset"]::-moz-focus-inner,
input[type="button"]::-moz-focus-inner,
input[type="submit"]::-moz-focus-inner,
input[type="file"] > button[type="button"]::-moz-focus-inner {
+ /* Note this padding only affects the -moz-focus-inner ring, not the button itself */
padding-block-start: 0px;
padding-inline-end: 2px;
padding-block-end: 0px;
@@ -776,9 +773,9 @@ input[type="submit"]:disabled {
/* The sum of border and padding on block-start and block-end
must be the same here and for text inputs */
padding-block-start: 0px;
- padding-inline-end: 6px;
+ padding-inline-end: 8px;
padding-block-end: 0px;
- padding-inline-start: 6px;
+ padding-inline-start: 8px;
border: 2px outset ThreeDLightShadow;
cursor: inherit;
}
diff --git a/widget/gtk/gtk3drawing.cpp b/widget/gtk/gtk3drawing.cpp
index c592fa51c9..c3216fbf34 100644
--- a/widget/gtk/gtk3drawing.cpp
+++ b/widget/gtk/gtk3drawing.cpp
@@ -2036,9 +2036,6 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
if (widget == MOZ_GTK_TOOLBAR_BUTTON)
gtk_style_context_restore(style);
- // XXX: Subtract 1 pixel from the border to account for the added
- // -moz-focus-inner border (Bug 1228281).
- *left -= 1; *top -= 1; *right -= 1; *bottom -= 1;
moz_gtk_add_style_border(style, left, top, right, bottom);
ReleaseStyleContext(style);