diff --git a/layout/forms/nsTextControlFrame.cpp b/layout/forms/nsTextControlFrame.cpp
index 6dbf74df475e..7d5dd04515f6 100644
--- a/layout/forms/nsTextControlFrame.cpp
+++ b/layout/forms/nsTextControlFrame.cpp
@@ -146,12 +146,12 @@ nsTextControlFrame::GetType() const
return nsGkAtoms::textInputFrame;
}
-nsresult
+LogicalSize
nsTextControlFrame::CalcIntrinsicSize(nsRenderingContext* aRenderingContext,
WritingMode aWM,
- LogicalSize& aIntrinsicSize,
- float aFontSizeInflation)
+ float aFontSizeInflation) const
{
+ LogicalSize intrinsicSize(aWM);
// Get leading and the Average/MaxAdvance char width
nscoord lineHeight = 0;
nscoord charWidth = 0;
@@ -168,7 +168,7 @@ nsTextControlFrame::CalcIntrinsicSize(nsRenderingContext* aRenderingContext,
// Set the width equal to the width in characters
int32_t cols = GetCols();
- aIntrinsicSize.ISize(aWM) = cols * charWidth;
+ intrinsicSize.ISize(aWM) = cols * charWidth;
// To better match IE, take the maximum character width(in twips) and remove
// 4 pixels add this on as additional padding(internalPadding). But only do
@@ -185,12 +185,12 @@ nsTextControlFrame::CalcIntrinsicSize(nsRenderingContext* aRenderingContext,
internalPadding += t - rest;
}
// Now add the extra padding on (so that small input sizes work well)
- aIntrinsicSize.ISize(aWM) += internalPadding;
+ intrinsicSize.ISize(aWM) += internalPadding;
} else {
// This is to account for the anonymous
having a 1 twip width
// in Full Standards mode, see BRFrame::Reflow and bug 228752.
if (PresContext()->CompatibilityMode() == eCompatibility_FullStandards) {
- aIntrinsicSize.ISize(aWM) += 1;
+ intrinsicSize.ISize(aWM) += 1;
}
}
@@ -200,14 +200,14 @@ nsTextControlFrame::CalcIntrinsicSize(nsRenderingContext* aRenderingContext,
if (eStyleUnit_Coord == lsCoord.GetUnit()) {
nscoord letterSpacing = lsCoord.GetCoordValue();
if (letterSpacing != 0) {
- aIntrinsicSize.ISize(aWM) += cols * letterSpacing;
+ intrinsicSize.ISize(aWM) += cols * letterSpacing;
}
}
}
// Set the height equal to total number of rows (times the height of each
// line, of course)
- aIntrinsicSize.BSize(aWM) = lineHeight * GetRows();
+ intrinsicSize.BSize(aWM) = lineHeight * GetRows();
// Add in the size of the scrollbars for textarea
if (IsTextArea()) {
@@ -221,12 +221,11 @@ nsTextControlFrame::CalcIntrinsicSize(nsRenderingContext* aRenderingContext,
scrollableFrame->GetDesiredScrollbarSizes(PresContext(),
aRenderingContext));
- aIntrinsicSize.ISize(aWM) += scrollbarSizes.IStartEnd(aWM);
- aIntrinsicSize.BSize(aWM) += scrollbarSizes.BStartEnd(aWM);
+ intrinsicSize.ISize(aWM) += scrollbarSizes.IStartEnd(aWM);
+ intrinsicSize.BSize(aWM) += scrollbarSizes.BStartEnd(aWM);
}
}
-
- return NS_OK;
+ return intrinsicSize;
}
nsresult
@@ -447,15 +446,12 @@ nsTextControlFrame::AppendAnonymousContentTo(nsTArray& aElements,
nscoord
nsTextControlFrame::GetPrefISize(nsRenderingContext* aRenderingContext)
{
- DebugOnly result = 0;
- DISPLAY_PREF_WIDTH(this, result);
-
- float inflation = nsLayoutUtils::FontSizeInflationFor(this);
- WritingMode wm = GetWritingMode();
- LogicalSize autoSize(wm);
- CalcIntrinsicSize(aRenderingContext, wm, autoSize, inflation);
-
- return autoSize.ISize(wm);
+ nscoord result = 0;
+ DISPLAY_PREF_WIDTH(this, result);
+ float inflation = nsLayoutUtils::FontSizeInflationFor(this);
+ WritingMode wm = GetWritingMode();
+ result = CalcIntrinsicSize(aRenderingContext, wm, inflation).ISize(wm);
+ return result;
}
nscoord
@@ -464,9 +460,7 @@ nsTextControlFrame::GetMinISize(nsRenderingContext* aRenderingContext)
// Our min width is just our preferred width if we have auto width.
nscoord result;
DISPLAY_MIN_WIDTH(this, result);
-
result = GetPrefISize(aRenderingContext);
-
return result;
}
@@ -481,15 +475,10 @@ nsTextControlFrame::ComputeAutoSize(nsRenderingContext* aRenderingContext,
ComputeSizeFlags aFlags)
{
float inflation = nsLayoutUtils::FontSizeInflationFor(this);
- LogicalSize autoSize(aWM);
- nsresult rv = CalcIntrinsicSize(aRenderingContext, aWM, autoSize, inflation);
- if (NS_FAILED(rv)) {
- // What now?
- autoSize.SizeTo(aWM, 0, 0);
- }
+ LogicalSize autoSize = CalcIntrinsicSize(aRenderingContext, aWM, inflation);
#ifdef DEBUG
// Note: Ancestor ComputeAutoSize only computes a width if we're auto-width
- else {
+ {
const nsStyleCoord& inlineStyleCoord =
aWM.IsVertical() ? StylePosition()->mHeight : StylePosition()->mWidth;
if (inlineStyleCoord.GetUnit() == eStyleUnit_Auto) {
diff --git a/layout/forms/nsTextControlFrame.h b/layout/forms/nsTextControlFrame.h
index b6f8445ffd1f..a76cba5145b7 100644
--- a/layout/forms/nsTextControlFrame.h
+++ b/layout/forms/nsTextControlFrame.h
@@ -188,9 +188,9 @@ public: //for methods who access nsTextControlFrame directly
DEFINE_TEXTCTRL_CONST_FORWARDER(bool, IsTextArea)
DEFINE_TEXTCTRL_CONST_FORWARDER(bool, IsPlainTextControl)
DEFINE_TEXTCTRL_CONST_FORWARDER(bool, IsPasswordTextControl)
- DEFINE_TEXTCTRL_FORWARDER(int32_t, GetCols)
- DEFINE_TEXTCTRL_FORWARDER(int32_t, GetWrapCols)
- DEFINE_TEXTCTRL_FORWARDER(int32_t, GetRows)
+ DEFINE_TEXTCTRL_CONST_FORWARDER(int32_t, GetCols)
+ DEFINE_TEXTCTRL_CONST_FORWARDER(int32_t, GetWrapCols)
+ DEFINE_TEXTCTRL_CONST_FORWARDER(int32_t, GetRows)
#undef DEFINE_TEXTCTRL_CONST_FORWARDER
#undef DEFINE_TEXTCTRL_FORWARDER
@@ -274,10 +274,9 @@ protected:
// Compute our intrinsic size. This does not include any borders, paddings,
// etc. Just the size of our actual area for the text (and the scrollbars,
// for