It wasn't call the NavQuirks sizing code when in NavQuirks mode.
Bug 42521,41629 r=kmcclusk git-svn-id: svn://10.0.0.236/trunk@73018 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
ca8d63a49a
commit
6601b1f95f
@ -847,20 +847,15 @@ nsGfxTextControlFrame2::GetColRowSizeAttr(nsIFormControlFrame* aFrame,
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::ReflowStandard(nsIPresContext* aPresContext,
|
||||
nsHTMLReflowMetrics& aDesiredSize,
|
||||
const nsHTMLReflowState& aReflowState,
|
||||
nsReflowStatus& aStatus,
|
||||
nsMargin& aBorder,
|
||||
nsMargin& aPadding)
|
||||
nsSize& aDesiredSize,
|
||||
const nsHTMLReflowState& aReflowState,
|
||||
nsReflowStatus& aStatus,
|
||||
nsMargin& aBorder,
|
||||
nsMargin& aPadding)
|
||||
{
|
||||
// get the css size and let the frame use or override it
|
||||
nsSize styleSize;
|
||||
nsFormControlFrame::GetStyleSize(aPresContext, aReflowState, styleSize);
|
||||
|
||||
nsSize desiredSize;
|
||||
nsSize minSize;
|
||||
|
||||
PRBool widthExplicit, heightExplicit;
|
||||
PRInt32 ignore;
|
||||
PRInt32 type;
|
||||
GetType(&type);
|
||||
@ -872,16 +867,14 @@ nsGfxTextControlFrame2::ReflowStandard(nsIPresContext* aPresContext,
|
||||
nsInputDimensionSpec textSpec(nsnull, PR_FALSE, nsnull,
|
||||
nsnull, width,
|
||||
PR_FALSE, nsnull, 1);
|
||||
CalculateSizeStandard(aPresContext, aReflowState.rendContext, this, styleSize,
|
||||
textSpec, desiredSize, minSize, widthExplicit,
|
||||
heightExplicit, ignore, aBorder, aPadding);
|
||||
CalculateSizeStandard(aPresContext, aReflowState.rendContext, this,
|
||||
textSpec, aDesiredSize, minSize, ignore, aBorder, aPadding);
|
||||
} else {
|
||||
nsInputDimensionSpec areaSpec(nsHTMLAtoms::cols, PR_FALSE, nsnull,
|
||||
nsnull, GetDefaultColumnWidth(),
|
||||
PR_FALSE, nsHTMLAtoms::rows, 1);
|
||||
CalculateSizeStandard(aPresContext, aReflowState.rendContext, this, styleSize,
|
||||
areaSpec, desiredSize, minSize, widthExplicit,
|
||||
heightExplicit, ignore, aBorder, aPadding);
|
||||
CalculateSizeStandard(aPresContext, aReflowState.rendContext, this,
|
||||
areaSpec, aDesiredSize, minSize, ignore, aBorder, aPadding);
|
||||
}
|
||||
|
||||
// CalculateSize makes calls in the nsFormControlHelper that figures
|
||||
@ -909,27 +902,13 @@ nsGfxTextControlFrame2::ReflowStandard(nsIPresContext* aPresContext,
|
||||
scrollbarHeight = scrollbarWidth;
|
||||
}
|
||||
|
||||
if (!heightExplicit) {
|
||||
desiredSize.height += scrollbarHeight;
|
||||
minSize.height += scrollbarHeight;
|
||||
}
|
||||
if (!widthExplicit) {
|
||||
desiredSize.width += scrollbarWidth;
|
||||
minSize.width += scrollbarWidth;
|
||||
}
|
||||
}
|
||||
desiredSize.width += aReflowState.mComputedBorderPadding.top + aReflowState.mComputedBorderPadding.bottom;
|
||||
desiredSize.height += aReflowState.mComputedBorderPadding.left + aReflowState.mComputedBorderPadding.right;
|
||||
|
||||
aDesiredSize.width = desiredSize.width;
|
||||
aDesiredSize.height = desiredSize.height;
|
||||
aDesiredSize.ascent = aDesiredSize.height;
|
||||
aDesiredSize.descent = 0;
|
||||
|
||||
if (aDesiredSize.maxElementSize) {
|
||||
aDesiredSize.maxElementSize->width = widthExplicit?desiredSize.width:minSize.width;
|
||||
aDesiredSize.maxElementSize->height = heightExplicit?desiredSize.height:minSize.height;
|
||||
aDesiredSize.height += scrollbarHeight;
|
||||
minSize.height += scrollbarHeight;
|
||||
aDesiredSize.width += scrollbarWidth;
|
||||
minSize.width += scrollbarWidth;
|
||||
}
|
||||
aDesiredSize.width += aReflowState.mComputedBorderPadding.left + aReflowState.mComputedBorderPadding.right;
|
||||
aDesiredSize.height += aReflowState.mComputedBorderPadding.top + aReflowState.mComputedBorderPadding.bottom;
|
||||
|
||||
return NS_OK;
|
||||
|
||||
@ -940,20 +919,14 @@ PRInt32
|
||||
nsGfxTextControlFrame2::CalculateSizeStandard (nsIPresContext* aPresContext,
|
||||
nsIRenderingContext* aRendContext,
|
||||
nsIFormControlFrame* aFrame,
|
||||
const nsSize& aCSSSize,
|
||||
nsInputDimensionSpec& aSpec,
|
||||
nsSize& aDesiredSize,
|
||||
nsSize& aMinSize,
|
||||
PRBool& aWidthExplicit,
|
||||
PRBool& aHeightExplicit,
|
||||
nscoord& aRowHeight,
|
||||
nsMargin& aBorder,
|
||||
nsMargin& aPadding)
|
||||
{
|
||||
nscoord charWidth = 0;
|
||||
aWidthExplicit = PR_FALSE;
|
||||
aHeightExplicit = PR_FALSE;
|
||||
|
||||
aDesiredSize.width = CSS_NOTSET;
|
||||
aDesiredSize.height = CSS_NOTSET;
|
||||
|
||||
@ -970,35 +943,33 @@ nsGfxTextControlFrame2::CalculateSizeStandard (nsIPresContext* aPresContex
|
||||
float p2t;
|
||||
aPresContext->GetScaledPixelsToTwips(&p2t);
|
||||
|
||||
// Calculate the min size of the text control as one char
|
||||
// save the current default col size
|
||||
nscoord tmpCol = aSpec.mColDefaultSize;
|
||||
aSpec.mColDefaultSize = 1;
|
||||
charWidth = nsFormControlHelper::GetTextSize(aPresContext, aFrame, aSpec.mColDefaultSize, aDesiredSize, aRendContext);
|
||||
|
||||
// set the default col size back
|
||||
aMinSize.width = aDesiredSize.width;
|
||||
aMinSize.height = aDesiredSize.height;
|
||||
aSpec.mColDefaultSize = tmpCol;
|
||||
|
||||
// determine the width, char height, row height
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == colStatus) { // col attr will provide width
|
||||
PRInt32 col = ((colAttr.GetUnit() == eHTMLUnit_Pixel) ? colAttr.GetPixelValue() : colAttr.GetIntValue());
|
||||
col = (col <= 0) ? 1 : col; // XXX why a default of 1 char, why hide it
|
||||
charWidth = nsFormControlHelper::GetTextSize(aPresContext, aFrame, col, aDesiredSize, aRendContext);
|
||||
aMinSize.width = aDesiredSize.width;
|
||||
} else {
|
||||
charWidth = nsFormControlHelper::GetTextSize(aPresContext, aFrame, aSpec.mColDefaultSize, aDesiredSize, aRendContext);
|
||||
aMinSize.width = aDesiredSize.width;
|
||||
if (CSS_NOTSET != aCSSSize.width) { // css provides width
|
||||
NS_ASSERTION(aCSSSize.width >= 0, "form control's computed width is < 0");
|
||||
if (NS_INTRINSICSIZE != aCSSSize.width) {
|
||||
aDesiredSize.width = aCSSSize.width;
|
||||
aWidthExplicit = PR_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nscoord fontHeight = 0;
|
||||
//nscoord fontLeading = 0;
|
||||
// get leading
|
||||
nsCOMPtr<nsIFontMetrics> fontMet;
|
||||
nsresult res = nsFormControlHelper::GetFrameFontFM(aPresContext, aFrame, getter_AddRefs(fontMet));
|
||||
if (NS_SUCCEEDED(res) && fontMet) {
|
||||
aRendContext->SetFont(fontMet);
|
||||
fontMet->GetHeight(fontHeight);
|
||||
// leading is NOT suppose to be added in
|
||||
//fontMet->GetLeading(fontLeading);
|
||||
//aDesiredSize.height += fontLeading;
|
||||
}
|
||||
aRowHeight = aDesiredSize.height;
|
||||
aMinSize.height = aDesiredSize.height;
|
||||
@ -1011,13 +982,6 @@ nsGfxTextControlFrame2::CalculateSizeStandard (nsIPresContext* aPresContex
|
||||
aDesiredSize.height = aDesiredSize.height * numRows;
|
||||
} else {
|
||||
aDesiredSize.height = aDesiredSize.height * aSpec.mRowDefaultSize;
|
||||
if (CSS_NOTSET != aCSSSize.height) { // css provides height
|
||||
NS_ASSERTION(aCSSSize.height > 0, "form control's computed height is <= 0");
|
||||
if (NS_INTRINSICSIZE != aCSSSize.height) {
|
||||
aDesiredSize.height = aCSSSize.height;
|
||||
aHeightExplicit = PR_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
numRows = (aRowHeight > 0) ? (aDesiredSize.height / aRowHeight) : 0;
|
||||
@ -1039,20 +1003,14 @@ PRInt32
|
||||
nsGfxTextControlFrame2::CalculateSizeNavQuirks (nsIPresContext* aPresContext,
|
||||
nsIRenderingContext* aRendContext,
|
||||
nsIFormControlFrame* aFrame,
|
||||
const nsSize& aCSSSize,
|
||||
nsInputDimensionSpec& aSpec,
|
||||
nsSize& aDesiredSize,
|
||||
nsSize& aMinSize,
|
||||
PRBool& aWidthExplicit,
|
||||
PRBool& aHeightExplicit,
|
||||
nscoord& aRowHeight,
|
||||
nsMargin& aBorder,
|
||||
nsMargin& aPadding)
|
||||
{
|
||||
nscoord charWidth = 0;
|
||||
aWidthExplicit = PR_FALSE;
|
||||
aHeightExplicit = PR_FALSE;
|
||||
|
||||
aDesiredSize.width = CSS_NOTSET;
|
||||
aDesiredSize.height = CSS_NOTSET;
|
||||
|
||||
@ -1074,6 +1032,18 @@ nsGfxTextControlFrame2::CalculateSizeNavQuirks (nsIPresContext* aPresConte
|
||||
if (NS_SUCCEEDED(res) && fontMet) {
|
||||
aRendContext->SetFont(fontMet);
|
||||
|
||||
// Calculate the min size of the text control as one char
|
||||
// save the current default col size
|
||||
nscoord tmpCol = aSpec.mColDefaultSize;
|
||||
aSpec.mColDefaultSize = 1;
|
||||
charWidth = nsFormControlHelper::CalcNavQuirkSizing(aPresContext,
|
||||
aRendContext, fontMet,
|
||||
aFrame, aSpec, aDesiredSize);
|
||||
// set the default col size back
|
||||
aMinSize.width = aDesiredSize.width;
|
||||
aMinSize.height = aDesiredSize.height;
|
||||
aSpec.mColDefaultSize = tmpCol;
|
||||
|
||||
// Figure out the number of columns
|
||||
// and set that as the default col size
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == colStatus) { // col attr will provide width
|
||||
@ -1084,31 +1054,7 @@ nsGfxTextControlFrame2::CalculateSizeNavQuirks (nsIPresContext* aPresConte
|
||||
charWidth = nsFormControlHelper::CalcNavQuirkSizing(aPresContext,
|
||||
aRendContext, fontMet,
|
||||
aFrame, aSpec, aDesiredSize);
|
||||
aMinSize.width = aDesiredSize.width;
|
||||
|
||||
// XXX I am commenting this out below to let CSS
|
||||
// override the column setting - rods
|
||||
|
||||
// If COLS was not set then check to see if CSS has the width set
|
||||
//if (NS_CONTENT_ATTR_HAS_VALUE != colStatus) { // col attr will provide width
|
||||
if (CSS_NOTSET != aCSSSize.width) { // css provides width
|
||||
NS_ASSERTION(aCSSSize.width >= 0, "form control's computed width is < 0");
|
||||
if (NS_INTRINSICSIZE != aCSSSize.width) {
|
||||
aDesiredSize.width = aCSSSize.width;
|
||||
aWidthExplicit = PR_TRUE;
|
||||
}
|
||||
}
|
||||
//}
|
||||
|
||||
aDesiredSize.height = aDesiredSize.height * aSpec.mRowDefaultSize;
|
||||
if (CSS_NOTSET != aCSSSize.height) { // css provides height
|
||||
NS_ASSERTION(aCSSSize.height > 0, "form control's computed height is <= 0");
|
||||
if (NS_INTRINSICSIZE != aCSSSize.height) {
|
||||
aDesiredSize.height = aCSSSize.height;
|
||||
aHeightExplicit = PR_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
NS_ASSERTION(fontMet, "Couldn't get Font Metrics");
|
||||
aDesiredSize.width = 300; // arbitrary values
|
||||
@ -1125,28 +1071,13 @@ nsGfxTextControlFrame2::CalculateSizeNavQuirks (nsIPresContext* aPresConte
|
||||
|
||||
//------------------------------------------------------------------
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::ReflowNavQuirks(nsIPresContext* aPresContext,
|
||||
nsHTMLReflowMetrics& aDesiredSize,
|
||||
nsGfxTextControlFrame2::ReflowNavQuirks(nsIPresContext* aPresContext,
|
||||
nsSize& aDesiredSize,
|
||||
const nsHTMLReflowState& aReflowState,
|
||||
nsReflowStatus& aStatus,
|
||||
nsMargin& aBorder,
|
||||
nsMargin& aPadding)
|
||||
{
|
||||
nsMargin borderPadding;
|
||||
borderPadding.SizeTo(0, 0, 0, 0);
|
||||
// Get the CSS border
|
||||
const nsStyleSpacing* spacing;
|
||||
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
|
||||
|
||||
// This calculates the reflow size
|
||||
// get the css size and let the frame use or override it
|
||||
nsSize styleSize;
|
||||
nsFormControlFrame::GetStyleSize(aPresContext, aReflowState, styleSize);
|
||||
|
||||
nsSize desiredSize;
|
||||
nsSize minSize;
|
||||
|
||||
PRBool widthExplicit, heightExplicit;
|
||||
PRInt32 ignore;
|
||||
PRInt32 type;
|
||||
GetType(&type);
|
||||
@ -1158,65 +1089,16 @@ nsGfxTextControlFrame2::ReflowNavQuirks(nsIPresContext* aPresContext,
|
||||
nsInputDimensionSpec textSpec(nsnull, PR_FALSE, nsnull,
|
||||
nsnull, width,
|
||||
PR_FALSE, nsnull, 1);
|
||||
CalculateSizeNavQuirks(aPresContext, aReflowState.rendContext, this, styleSize,
|
||||
textSpec, desiredSize, minSize, widthExplicit,
|
||||
heightExplicit, ignore, aBorder, aPadding);
|
||||
CalculateSizeNavQuirks(aPresContext, aReflowState.rendContext, this,
|
||||
textSpec, aDesiredSize, mMinSize, ignore, aBorder, aPadding);
|
||||
} else {
|
||||
nsInputDimensionSpec areaSpec(nsHTMLAtoms::cols, PR_FALSE, nsnull,
|
||||
nsnull, GetDefaultColumnWidth(),
|
||||
PR_FALSE, nsHTMLAtoms::rows, 1);
|
||||
CalculateSizeNavQuirks(aPresContext, aReflowState.rendContext, this, styleSize,
|
||||
areaSpec, desiredSize, minSize, widthExplicit,
|
||||
heightExplicit, ignore, aBorder, aPadding);
|
||||
}
|
||||
if (widthExplicit) {
|
||||
desiredSize.width += aReflowState.mComputedBorderPadding.left + aReflowState.mComputedBorderPadding.right;
|
||||
}
|
||||
if (heightExplicit) {
|
||||
desiredSize.height += aReflowState.mComputedBorderPadding.top + aReflowState.mComputedBorderPadding.bottom;
|
||||
CalculateSizeNavQuirks(aPresContext, aReflowState.rendContext, this,
|
||||
areaSpec, aDesiredSize, mMinSize, ignore, aBorder, aPadding);
|
||||
}
|
||||
|
||||
aDesiredSize.width = desiredSize.width;
|
||||
aDesiredSize.height = desiredSize.height;
|
||||
aDesiredSize.ascent = aDesiredSize.height;
|
||||
aDesiredSize.descent = 0;
|
||||
|
||||
if (aDesiredSize.maxElementSize) {
|
||||
aDesiredSize.maxElementSize->width = widthExplicit?desiredSize.width:minSize.width;
|
||||
aDesiredSize.maxElementSize->height = heightExplicit?desiredSize.height:minSize.height;
|
||||
}
|
||||
|
||||
// In Nav Quirks mode we only add in extra size for padding
|
||||
nsMargin padding;
|
||||
padding.SizeTo(0, 0, 0, 0);
|
||||
spacing->CalcPaddingFor(this, padding);
|
||||
|
||||
// Check to see if style was responsible
|
||||
// for setting the height or the width
|
||||
PRBool addBorder = PR_FALSE;
|
||||
PRInt32 width;
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE == GetSizeFromContent(&width)) {
|
||||
// if a size attr gets incorrectly
|
||||
// put on a textarea it comes back as -1
|
||||
if (width > -1) {
|
||||
addBorder = (width < GetDefaultColumnWidth()) && !widthExplicit;
|
||||
}
|
||||
}
|
||||
|
||||
if (addBorder) {
|
||||
if (CSS_NOTSET != styleSize.width ||
|
||||
CSS_NOTSET != styleSize.height) { // css provides width
|
||||
nsMargin border;
|
||||
border.SizeTo(0, 0, 0, 0);
|
||||
spacing->CalcBorderFor(this, border);
|
||||
if (CSS_NOTSET != styleSize.width) { // css provides width
|
||||
aDesiredSize.width += border.left + border.right;
|
||||
}
|
||||
if (CSS_NOTSET != styleSize.height) { // css provides heigth
|
||||
aDesiredSize.height += border.top + border.bottom;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -1444,14 +1326,16 @@ nsGfxTextControlFrame2::GetPrefSize(nsBoxLayoutState& aState, nsSize& aSize)
|
||||
if (collapsed)
|
||||
return NS_OK;
|
||||
|
||||
nsSize styleSize(CSS_NOTSET,CSS_NOTSET);
|
||||
nsIPresContext* aPresContext = aState.GetPresContext();
|
||||
const nsHTMLReflowState* aReflowState = aState.GetReflowState();
|
||||
nsSize styleSize(CSS_NOTSET,CSS_NOTSET);
|
||||
nsFormControlFrame::GetStyleSize(aPresContext, *aReflowState, styleSize);
|
||||
|
||||
|
||||
if (!aReflowState)
|
||||
return NS_OK;
|
||||
|
||||
if (mState & NS_FRAME_FIRST_REFLOW)
|
||||
if (eReflowReason_Initial == aReflowState->reason)
|
||||
{
|
||||
nsFormControlFrame::RegUnRegAccessKey(aPresContext, NS_STATIC_CAST(nsIFrame*, this), PR_TRUE);
|
||||
nsFormFrame::AddFormControlFrame(aPresContext, *NS_STATIC_CAST(nsIFrame*, this));
|
||||
@ -1488,71 +1372,67 @@ nsGfxTextControlFrame2::GetPrefSize(nsBoxLayoutState& aState, nsSize& aSize)
|
||||
|
||||
nsCompatibility mode;
|
||||
aPresContext->GetCompatibilityMode(&mode);
|
||||
PRBool navQuirksMode = eCompatibility_NavQuirks == mode && nameSpaceID == kNameSpaceID_HTML;
|
||||
|
||||
nsSize desiredSize;
|
||||
nsSize minSize;
|
||||
nsMargin aBorder, aPadding;
|
||||
|
||||
PRBool widthExplicit, heightExplicit;
|
||||
PRInt32 ignore;
|
||||
PRInt32 type;
|
||||
GetType(&type);
|
||||
if ((NS_FORM_INPUT_TEXT == type) || (NS_FORM_INPUT_PASSWORD == type)) {
|
||||
PRInt32 width = 0;
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE != GetSizeFromContent(&width)) {
|
||||
width = GetDefaultColumnWidth();
|
||||
}
|
||||
nsInputDimensionSpec textSpec(nsnull, PR_FALSE, nsnull,
|
||||
nsnull, width,
|
||||
PR_FALSE, nsnull, 1);
|
||||
|
||||
if (PR_FALSE) { //eCompatibility_NavQuirks == mode && nameSpaceID == kNameSpaceID_HTML) {
|
||||
CalculateSizeNavQuirks(aPresContext, aReflowState->rendContext, this, styleSize,
|
||||
textSpec, desiredSize, minSize, widthExplicit,
|
||||
heightExplicit, ignore, aBorder, aPadding);
|
||||
} else {
|
||||
CalculateSizeStandard(aPresContext, aReflowState->rendContext, this, styleSize,
|
||||
textSpec, desiredSize, minSize, widthExplicit,
|
||||
heightExplicit, ignore, aBorder, aPadding);
|
||||
}
|
||||
nsReflowStatus aStatus;
|
||||
nsMargin border;
|
||||
border.SizeTo(0, 0, 0, 0);
|
||||
nsMargin padding;
|
||||
padding.SizeTo(0, 0, 0, 0);
|
||||
|
||||
// Get the CSS border
|
||||
const nsStyleSpacing* spacing;
|
||||
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
|
||||
spacing->CalcBorderFor(this, border);
|
||||
spacing->CalcPaddingFor(this, padding);
|
||||
|
||||
nsresult rv;
|
||||
if (navQuirksMode) {
|
||||
rv = ReflowNavQuirks(aPresContext, aSize, *aReflowState, aStatus, border, padding);
|
||||
} else {
|
||||
nsInputDimensionSpec areaSpec(nsHTMLAtoms::cols, PR_FALSE, nsnull,
|
||||
nsnull, GetDefaultColumnWidth(),
|
||||
PR_FALSE, nsHTMLAtoms::rows, 1);
|
||||
|
||||
if (PR_FALSE) {//eCompatibility_NavQuirks == mode && nameSpaceID == kNameSpaceID_HTML) {
|
||||
|
||||
CalculateSizeNavQuirks(aPresContext, aReflowState->rendContext, this, styleSize,
|
||||
areaSpec, desiredSize, minSize, widthExplicit,
|
||||
heightExplicit, ignore, aBorder, aPadding);
|
||||
|
||||
} else {
|
||||
CalculateSizeStandard(aPresContext, aReflowState->rendContext, this, styleSize,
|
||||
areaSpec, desiredSize, minSize, widthExplicit,
|
||||
heightExplicit, ignore, aBorder, aPadding);
|
||||
}
|
||||
rv = ReflowStandard(aPresContext, aSize, *aReflowState, aStatus, border, padding);
|
||||
}
|
||||
|
||||
aSize = desiredSize;
|
||||
|
||||
AddBorderAndPadding(aSize);
|
||||
AddInset(aSize);
|
||||
nsIBox::AddCSSPrefSize(aState, this, aSize);
|
||||
|
||||
mPrefSize = aSize;
|
||||
|
||||
#ifdef DEBUG_rods
|
||||
{
|
||||
nsMargin borderPadding(0,0,0,0);
|
||||
GetBorderAndPadding(borderPadding);
|
||||
nsSize size(169, 24);
|
||||
nsSize actual(aSize.width/15,
|
||||
aSize.height/15);
|
||||
printf("nsGfxText(field) %d,%d %d,%d %d,%d\n",
|
||||
size.width, size.height, actual.width, actual.height, actual.width-size.width, actual.height-size.height); // text field
|
||||
}
|
||||
#endif
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::GetMinSize(nsBoxLayoutState& aState, nsSize& aSize)
|
||||
{
|
||||
|
||||
#if 0
|
||||
aSize = mMinSize;
|
||||
printf("nsGfxTextControlFrame2::GetMinSize %d,%d\n", aSize.width, aSize.height);
|
||||
return NS_OK;
|
||||
#else
|
||||
nsBox::GetMinSize(aState, aSize);
|
||||
printf("nsGfxTextControlFrame2::GetMinSize %d,%d\n", aSize.width, aSize.height);
|
||||
return nsBox::GetMinSize(aState, aSize);
|
||||
#endif
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGfxTextControlFrame2::GetMaxSize(nsBoxLayoutState& aState, nsSize& aSize)
|
||||
{
|
||||
nsBox::GetMaxSize(aState, aSize);
|
||||
printf("nsGfxTextControlFrame2::GetMaxSize %d,%d\n", aSize.width, aSize.height);
|
||||
return nsBox::GetMaxSize(aState, aSize);
|
||||
}
|
||||
|
||||
@ -1565,175 +1445,6 @@ nsGfxTextControlFrame2::GetAscent(nsBoxLayoutState& aState, nscoord& aAscent)
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
NS_IMETHODIMP nsGfxTextControlFrame2::Reflow(nsIPresContext* aPresContext,
|
||||
nsHTMLReflowMetrics& aDesiredSize,
|
||||
const nsHTMLReflowState& aReflowState,
|
||||
nsReflowStatus& aStatus)
|
||||
{
|
||||
mState |= NS_FRAME_HAS_DIRTY_CHILDREN;
|
||||
|
||||
// assuming 1 child
|
||||
nsIFrame* child = mFrames.FirstChild();
|
||||
//mFrames.FirstChild(aPresContext,nsnull,&child);
|
||||
if (!child)
|
||||
return nsHTMLContainerFrame::Reflow(aPresContext,aDesiredSize,aReflowState,aStatus);
|
||||
nsSize availSize(aReflowState.availableWidth, aReflowState.availableHeight);
|
||||
nsHTMLReflowState kidReflowState(aPresContext, aReflowState, child,
|
||||
availSize);
|
||||
|
||||
if (aReflowState.reason == eReflowReason_Incremental)
|
||||
{
|
||||
if (aReflowState.reflowCommand) {
|
||||
nsIFrame* incrementalChild = nsnull;
|
||||
aReflowState.reflowCommand->GetNext(incrementalChild);
|
||||
|
||||
NS_ASSERTION(incrementalChild == child || !incrementalChild, "Child is not in our list!!");
|
||||
|
||||
if (!incrementalChild) {
|
||||
nsIFrame* target;
|
||||
aReflowState.reflowCommand->GetTarget(target);
|
||||
// NS_ASSERTION(target == this, "Not our target!");
|
||||
|
||||
nsIReflowCommand::ReflowType type;
|
||||
aReflowState.reflowCommand->GetType(type);
|
||||
switch (type) {
|
||||
case nsIReflowCommand::StyleChanged:
|
||||
kidReflowState.reason = eReflowReason_StyleChange;
|
||||
kidReflowState.reflowCommand = nsnull;
|
||||
break;
|
||||
case nsIReflowCommand::ReflowDirty:
|
||||
kidReflowState.reason = eReflowReason_Dirty;
|
||||
kidReflowState.reflowCommand = nsnull;
|
||||
break;
|
||||
default:
|
||||
NS_ERROR("Unknown incremental reflow type");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (eReflowReason_Initial == aReflowState.reason)
|
||||
{
|
||||
nsFormControlFrame::RegUnRegAccessKey(aPresContext, NS_STATIC_CAST(nsIFrame*, this), PR_TRUE);
|
||||
nsFormFrame::AddFormControlFrame(aPresContext, *NS_STATIC_CAST(nsIFrame*, this));
|
||||
nsCOMPtr<nsIHTMLContent> htmlContent;
|
||||
nsString value;
|
||||
if (mContent)
|
||||
{
|
||||
htmlContent = do_QueryInterface(mContent);
|
||||
if (htmlContent)
|
||||
{
|
||||
nsHTMLValue htmlValue;
|
||||
if (NS_CONTENT_ATTR_HAS_VALUE ==
|
||||
htmlContent->GetHTMLAttribute(nsHTMLAtoms::value, htmlValue))
|
||||
{
|
||||
if (eHTMLUnit_String == htmlValue.GetUnit())
|
||||
{
|
||||
htmlValue.GetStringValue(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (value.Length())
|
||||
{
|
||||
SetTextControlFrameState(value);
|
||||
}
|
||||
}
|
||||
|
||||
//get margins
|
||||
// Figure out if we are doing Quirks or Standard
|
||||
nsCompatibility mode;
|
||||
aPresContext->GetCompatibilityMode(&mode);
|
||||
|
||||
nsMargin border;
|
||||
border.SizeTo(0, 0, 0, 0);
|
||||
nsMargin padding;
|
||||
padding.SizeTo(0, 0, 0, 0);
|
||||
// Get the CSS border
|
||||
const nsStyleSpacing* spacing;
|
||||
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
|
||||
spacing->CalcBorderFor(this, border);
|
||||
spacing->CalcPaddingFor(this, padding);
|
||||
|
||||
// calculate the the desired size for the text control
|
||||
// use the suggested size if it has been set
|
||||
nsresult rv = NS_OK;
|
||||
nsHTMLReflowState suggestedReflowState(aReflowState);
|
||||
if ((NS_FORMSIZE_NOTSET != mSuggestedWidth) ||
|
||||
(NS_FORMSIZE_NOTSET != mSuggestedHeight))
|
||||
{
|
||||
// Honor the suggested width and/or height.
|
||||
if (NS_FORMSIZE_NOTSET != mSuggestedWidth)
|
||||
{
|
||||
suggestedReflowState.mComputedWidth = mSuggestedWidth;
|
||||
aDesiredSize.width = mSuggestedWidth;
|
||||
}
|
||||
|
||||
if (NS_FORMSIZE_NOTSET != mSuggestedHeight)
|
||||
{
|
||||
suggestedReflowState.mComputedHeight = mSuggestedHeight;
|
||||
aDesiredSize.height = mSuggestedHeight;
|
||||
}
|
||||
rv = NS_OK;
|
||||
|
||||
aDesiredSize.ascent = aDesiredSize.height;
|
||||
aDesiredSize.descent = 0;
|
||||
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
}
|
||||
else
|
||||
{
|
||||
// this is the right way
|
||||
// Quirks mode will NOT obey CSS border and padding
|
||||
// GetDesiredSize calculates the size without CSS borders
|
||||
// the nsLeafFrame::Reflow will add in the borders
|
||||
if (eCompatibility_NavQuirks == mode) {
|
||||
rv = ReflowNavQuirks(aPresContext, aDesiredSize, aReflowState, aStatus, border, padding);
|
||||
} else {
|
||||
rv = ReflowStandard(aPresContext, aDesiredSize, aReflowState, aStatus, border, padding);
|
||||
}
|
||||
|
||||
if (NS_UNCONSTRAINEDSIZE != aReflowState.mComputedWidth) {
|
||||
if (aReflowState.mComputedWidth > aDesiredSize.width) {
|
||||
aDesiredSize.width = aReflowState.mComputedWidth;
|
||||
}
|
||||
}
|
||||
if (NS_UNCONSTRAINEDSIZE != aReflowState.mComputedHeight) {
|
||||
if (aReflowState.mComputedHeight > aDesiredSize.height) {
|
||||
aDesiredSize.height = aReflowState.mComputedHeight;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nsHTMLReflowMetrics kidReflowDesiredSize(0,0);
|
||||
|
||||
kidReflowState.mComputedWidth = aDesiredSize.width;
|
||||
kidReflowState.mComputedHeight = aDesiredSize.height;
|
||||
|
||||
if (kidReflowState.mComputedWidth != NS_INTRINSICSIZE)
|
||||
kidReflowState.mComputedWidth -= (kidReflowState.mComputedBorderPadding.left + kidReflowState.mComputedBorderPadding.right);
|
||||
|
||||
if (kidReflowState.mComputedHeight != NS_INTRINSICSIZE)
|
||||
kidReflowState.mComputedHeight -= (kidReflowState.mComputedBorderPadding.top + kidReflowState.mComputedBorderPadding.bottom);
|
||||
|
||||
|
||||
rv = ReflowChild(child, aPresContext, kidReflowDesiredSize, kidReflowState, aReflowState.mComputedBorderPadding.left,
|
||||
aReflowState.mComputedBorderPadding.top, 0, aStatus);
|
||||
// Place and size the child.
|
||||
FinishReflowChild(child, aPresContext, kidReflowDesiredSize, aReflowState.mComputedBorderPadding.left,
|
||||
aReflowState.mComputedBorderPadding.top, 0);
|
||||
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
|
||||
printf("width=%d, height=%d, ascent=%d\n", aDesiredSize.width, aDesiredSize.height, aDesiredSize.ascent);
|
||||
|
||||
return rv;
|
||||
}
|
||||
//#endif
|
||||
*/
|
||||
|
||||
PRIntn
|
||||
nsGfxTextControlFrame2::GetSkipSides() const
|
||||
{
|
||||
|
||||
@ -163,7 +163,7 @@ protected:
|
||||
nsresult & aRowStatus);
|
||||
|
||||
NS_IMETHOD ReflowStandard(nsIPresContext* aPresContext,
|
||||
nsHTMLReflowMetrics& aDesiredSize,
|
||||
nsSize& aDesiredSize,
|
||||
const nsHTMLReflowState& aReflowState,
|
||||
nsReflowStatus& aStatus,
|
||||
nsMargin& aBorder,
|
||||
@ -172,12 +172,9 @@ protected:
|
||||
PRInt32 CalculateSizeStandard (nsIPresContext* aPresContext,
|
||||
nsIRenderingContext* aRendContext,
|
||||
nsIFormControlFrame* aFrame,
|
||||
const nsSize& aCSSSize,
|
||||
nsInputDimensionSpec& aSpec,
|
||||
nsSize& aDesiredSize,
|
||||
nsSize& aMinSize,
|
||||
PRBool& aWidthExplicit,
|
||||
PRBool& aHeightExplicit,
|
||||
nscoord& aRowHeight,
|
||||
nsMargin& aBorder,
|
||||
nsMargin& aPadding);
|
||||
@ -185,19 +182,16 @@ protected:
|
||||
PRInt32 CalculateSizeNavQuirks (nsIPresContext* aPresContext,
|
||||
nsIRenderingContext* aRendContext,
|
||||
nsIFormControlFrame* aFrame,
|
||||
const nsSize& aCSSSize,
|
||||
nsInputDimensionSpec& aSpec,
|
||||
nsSize& aDesiredSize,
|
||||
nsSize& aMinSize,
|
||||
PRBool& aWidthExplicit,
|
||||
PRBool& aHeightExplicit,
|
||||
nscoord& aRowHeight,
|
||||
nsMargin& aBorder,
|
||||
nsMargin& aPadding);
|
||||
|
||||
|
||||
NS_IMETHOD ReflowNavQuirks(nsIPresContext* aPresContext,
|
||||
nsHTMLReflowMetrics& aDesiredSize,
|
||||
nsSize& aDesiredSize,
|
||||
const nsHTMLReflowState& aReflowState,
|
||||
nsReflowStatus& aStatus,
|
||||
nsMargin& aBorder,
|
||||
@ -233,6 +227,7 @@ private:
|
||||
nsString* mCachedState;
|
||||
nscoord mSuggestedWidth;
|
||||
nscoord mSuggestedHeight;
|
||||
nsSize mSize;
|
||||
|
||||
PRBool mIsProcessing;
|
||||
nsFormFrame *mFormFrame;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user