diff --git a/mozilla/layout/forms/nsHTMLButtonControlFrame.cpp b/mozilla/layout/forms/nsHTMLButtonControlFrame.cpp
index 09ed7c6ad0b..bddc2c3f424 100644
--- a/mozilla/layout/forms/nsHTMLButtonControlFrame.cpp
+++ b/mozilla/layout/forms/nsHTMLButtonControlFrame.cpp
@@ -411,8 +411,37 @@ nsHTMLButtonControlFrame::Paint(nsIPresContext& aPresContext,
mRenderer.PaintButton(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer, rect);
}
+#if 0 // old way
PaintChildren(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer);
+#else // temporary
+ // XXX This is temporary
+ // clips to it's size minus the border and padding,
+ // but the real problem is the FirstChild (the AreaFrame)
+ // isn't being constrained properly
+ // Bug #17474
+ const nsStyleSpacing* spacing;
+ GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
+ nsMargin borderPadding;
+ borderPadding.SizeTo(0, 0, 0, 0);
+ spacing->CalcBorderPaddingFor(this, borderPadding);
+
+ nsRect rect;
+ GetRect(rect);
+ rect.x = 0;
+ rect.y = 0;
+ rect.Deflate(borderPadding);
+ aRenderingContext.PushState();
+ PRBool clipEmpty;
+
+ aRenderingContext.SetClipRect(rect, nsClipCombine_kReplace, clipEmpty);
+
+ PaintChildren(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer);
+
+ aRenderingContext.PopState(clipEmpty);
+
+#endif
+
return NS_OK;
}
@@ -557,6 +586,7 @@ nsHTMLButtonControlFrame::Reflow(nsIPresContext& aPresContext,
nsRect rect = nsRect(focusPadding.left + aReflowState.mComputedBorderPadding.left, focusPadding.top + aReflowState.mComputedBorderPadding.top, aDesiredSize.width, aDesiredSize.height);
firstKid->SetRect(&aPresContext, rect);
+#if 0 // old way
// if computed use the computed values.
if (aReflowState.mComputedWidth != NS_INTRINSICSIZE && (aDesiredSize.width < aReflowState.mComputedWidth))
aDesiredSize.width = aReflowState.mComputedWidth;
@@ -568,6 +598,19 @@ nsHTMLButtonControlFrame::Reflow(nsIPresContext& aPresContext,
else
aDesiredSize.height += focusPadding.top + focusPadding.bottom;
+#else // temporary for Bug #17474
+ // if computed use the computed values.
+ if (aReflowState.mComputedWidth != NS_INTRINSICSIZE)
+ aDesiredSize.width = aReflowState.mComputedWidth;
+ else
+ aDesiredSize.width += focusPadding.left + focusPadding.right;
+
+ if (aReflowState.mComputedHeight != NS_INTRINSICSIZE)
+ aDesiredSize.height = aReflowState.mComputedHeight;
+ else
+ aDesiredSize.height += focusPadding.top + focusPadding.bottom;
+#endif
+
AddComputedBorderPaddingToDesiredSize(aDesiredSize, aReflowState);
//aDesiredSize.width += aReflowState.mComputedBorderPadding.left + aReflowState.mComputedBorderPadding.right;
//aDesiredSize.height += aReflowState.mComputedBorderPadding.top + aReflowState.mComputedBorderPadding.bottom;
diff --git a/mozilla/layout/html/forms/src/nsHTMLButtonControlFrame.cpp b/mozilla/layout/html/forms/src/nsHTMLButtonControlFrame.cpp
index 09ed7c6ad0b..bddc2c3f424 100644
--- a/mozilla/layout/html/forms/src/nsHTMLButtonControlFrame.cpp
+++ b/mozilla/layout/html/forms/src/nsHTMLButtonControlFrame.cpp
@@ -411,8 +411,37 @@ nsHTMLButtonControlFrame::Paint(nsIPresContext& aPresContext,
mRenderer.PaintButton(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer, rect);
}
+#if 0 // old way
PaintChildren(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer);
+#else // temporary
+ // XXX This is temporary
+ // clips to it's size minus the border and padding,
+ // but the real problem is the FirstChild (the AreaFrame)
+ // isn't being constrained properly
+ // Bug #17474
+ const nsStyleSpacing* spacing;
+ GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
+ nsMargin borderPadding;
+ borderPadding.SizeTo(0, 0, 0, 0);
+ spacing->CalcBorderPaddingFor(this, borderPadding);
+
+ nsRect rect;
+ GetRect(rect);
+ rect.x = 0;
+ rect.y = 0;
+ rect.Deflate(borderPadding);
+ aRenderingContext.PushState();
+ PRBool clipEmpty;
+
+ aRenderingContext.SetClipRect(rect, nsClipCombine_kReplace, clipEmpty);
+
+ PaintChildren(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer);
+
+ aRenderingContext.PopState(clipEmpty);
+
+#endif
+
return NS_OK;
}
@@ -557,6 +586,7 @@ nsHTMLButtonControlFrame::Reflow(nsIPresContext& aPresContext,
nsRect rect = nsRect(focusPadding.left + aReflowState.mComputedBorderPadding.left, focusPadding.top + aReflowState.mComputedBorderPadding.top, aDesiredSize.width, aDesiredSize.height);
firstKid->SetRect(&aPresContext, rect);
+#if 0 // old way
// if computed use the computed values.
if (aReflowState.mComputedWidth != NS_INTRINSICSIZE && (aDesiredSize.width < aReflowState.mComputedWidth))
aDesiredSize.width = aReflowState.mComputedWidth;
@@ -568,6 +598,19 @@ nsHTMLButtonControlFrame::Reflow(nsIPresContext& aPresContext,
else
aDesiredSize.height += focusPadding.top + focusPadding.bottom;
+#else // temporary for Bug #17474
+ // if computed use the computed values.
+ if (aReflowState.mComputedWidth != NS_INTRINSICSIZE)
+ aDesiredSize.width = aReflowState.mComputedWidth;
+ else
+ aDesiredSize.width += focusPadding.left + focusPadding.right;
+
+ if (aReflowState.mComputedHeight != NS_INTRINSICSIZE)
+ aDesiredSize.height = aReflowState.mComputedHeight;
+ else
+ aDesiredSize.height += focusPadding.top + focusPadding.bottom;
+#endif
+
AddComputedBorderPaddingToDesiredSize(aDesiredSize, aReflowState);
//aDesiredSize.width += aReflowState.mComputedBorderPadding.left + aReflowState.mComputedBorderPadding.right;
//aDesiredSize.height += aReflowState.mComputedBorderPadding.top + aReflowState.mComputedBorderPadding.bottom;