Added more position properties and removed some stuff from nsStyleMolecule

git-svn-id: svn://10.0.0.236/trunk@587 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
troy
1998-04-24 03:50:38 +00:00
parent f4f2da86ac
commit 479019563e
12 changed files with 117 additions and 25 deletions

View File

@@ -26,6 +26,7 @@
#include "nsIPtr.h"
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
static NS_DEFINE_IID(kStylePositionSID, NS_STYLEPOSITION_SID);
NS_DEF_PTR(nsIStyleContext);
NS_DEF_PTR(nsIContent);
@@ -224,11 +225,12 @@ void nsCSSLayout::RelativePositionChildren(nsIPresContext* aCX,
kid->GetContent(kidContent.AssignRef());
kid->GetStyleContext(aCX, kidSC.AssignRef());
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
if (NS_STYLE_POSITION_RELATIVE == kidMol->positionFlags) {
nsStylePosition* kidPosition = (nsStylePosition*)kidSC->GetData(kStylePositionSID);
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
kid->GetOrigin(origin);
nscoord dx = kidMol->left;
nscoord dy = kidMol->top;
// XXX Check the flags: could be auto or percent (not just length)
nscoord dx = kidPosition->mLeftOffset;
nscoord dy = kidPosition->mTopOffset;
kid->MoveTo(origin.x + dx, origin.y + dy);
}
kid->GetNextSibling(kid);

View File

@@ -668,22 +668,34 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a
position->mPosition = ourPosition->mPosition.GetIntValue();
}
// box offsets
// box offsets. note: default value is auto so we don't check for it here
if (ourPosition->mLeft.IsLengthUnit()) {
position->mLeftOffset = CalcLength(ourPosition->mLeft, font, aPresContext);
position->mLeftOffsetFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mHeight.GetUnit() == eCSSUnit_Percent) {
position->mLeftOffset = (nscoord)(100 * ourPosition->mLeft.GetFloatValue());
position->mLeftOffsetFlags = NS_STYLE_POSITION_VALUE_PCT;
}
if (ourPosition->mTop.IsLengthUnit()) {
position->mTopOffset = CalcLength(ourPosition->mTop, font, aPresContext);
position->mTopOffsetFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mHeight.GetUnit() == eCSSUnit_Percent) {
position->mTopOffset = (nscoord)(100 * ourPosition->mTop.GetFloatValue());
position->mTopOffsetFlags = NS_STYLE_POSITION_VALUE_PCT;
}
if (ourPosition->mWidth.IsLengthUnit()) {
position->mWidth = CalcLength(ourPosition->mWidth, font, aPresContext);
position->mWidthFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mWidth.GetUnit() == eCSSUnit_Percent) {
position->mWidth = (nscoord)(100 * ourPosition->mWidth.GetFloatValue());
position->mWidthFlags = NS_STYLE_POSITION_VALUE_PCT;
}
if (ourPosition->mHeight.IsLengthUnit()) {
position->mHeight = CalcLength(ourPosition->mHeight, font, aPresContext);
position->mHeightFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mHeight.GetUnit() == eCSSUnit_Percent) {
position->mHeight = (nscoord)(100 * ourPosition->mHeight.GetFloatValue());
position->mHeightFlags = NS_STYLE_POSITION_VALUE_PCT;
}
}
}

View File

@@ -159,8 +159,6 @@ struct nsStyleMolecule : public nsStyleStruct {
PRInt32 proportionalWidth;
PRInt32 fixedHeight;
PRInt32 proportionalHeight;
PRUint8 positionFlags;
nscoord top, left;
protected:
// The constructor is protected because you may not make these

View File

@@ -503,8 +503,13 @@ void nsBlockFrame::AddInlineChildToLine(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
PRIntn direction = aState.mol->direction;
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}
@@ -592,7 +597,11 @@ void nsBlockFrame::AddBlockChild(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}

View File

@@ -503,8 +503,13 @@ void nsBlockFrame::AddInlineChildToLine(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
PRIntn direction = aState.mol->direction;
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}
@@ -592,7 +597,11 @@ void nsBlockFrame::AddBlockChild(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}

View File

@@ -503,8 +503,13 @@ void nsBlockFrame::AddInlineChildToLine(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
PRIntn direction = aState.mol->direction;
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}
@@ -592,7 +597,11 @@ void nsBlockFrame::AddBlockChild(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}

View File

@@ -503,8 +503,13 @@ void nsBlockFrame::AddInlineChildToLine(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
PRIntn direction = aState.mol->direction;
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}
@@ -592,7 +597,11 @@ void nsBlockFrame::AddBlockChild(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}

View File

@@ -503,8 +503,13 @@ void nsBlockFrame::AddInlineChildToLine(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
PRIntn direction = aState.mol->direction;
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}
@@ -592,7 +597,11 @@ void nsBlockFrame::AddBlockChild(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}

View File

@@ -503,8 +503,13 @@ void nsBlockFrame::AddInlineChildToLine(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
PRIntn direction = aState.mol->direction;
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}
@@ -592,7 +597,11 @@ void nsBlockFrame::AddBlockChild(nsIPresContext* aCX,
{
NS_PRECONDITION(nsnull != aState.lineStart, "bad line");
if (NS_STYLE_POSITION_RELATIVE == aKidMol->positionFlags) {
nsStylePosition* kidPosition;
// Get the position style data
aKidFrame->GetStyleData(kStylePositionSID, (nsStyleStruct*&)kidPosition);
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
aState.needRelativePos = PR_TRUE;
}

View File

@@ -26,6 +26,7 @@
#include "nsIPtr.h"
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
static NS_DEFINE_IID(kStylePositionSID, NS_STYLEPOSITION_SID);
NS_DEF_PTR(nsIStyleContext);
NS_DEF_PTR(nsIContent);
@@ -224,11 +225,12 @@ void nsCSSLayout::RelativePositionChildren(nsIPresContext* aCX,
kid->GetContent(kidContent.AssignRef());
kid->GetStyleContext(aCX, kidSC.AssignRef());
nsStyleMolecule* kidMol = (nsStyleMolecule*)kidSC->GetData(kStyleMoleculeSID);
if (NS_STYLE_POSITION_RELATIVE == kidMol->positionFlags) {
nsStylePosition* kidPosition = (nsStylePosition*)kidSC->GetData(kStylePositionSID);
if (NS_STYLE_POSITION_RELATIVE == kidPosition->mPosition) {
kid->GetOrigin(origin);
nscoord dx = kidMol->left;
nscoord dy = kidMol->top;
// XXX Check the flags: could be auto or percent (not just length)
nscoord dx = kidPosition->mLeftOffset;
nscoord dy = kidPosition->mTopOffset;
kid->MoveTo(origin.x + dx, origin.y + dy);
}
kid->GetNextSibling(kid);

View File

@@ -668,22 +668,34 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a
position->mPosition = ourPosition->mPosition.GetIntValue();
}
// box offsets
// box offsets. note: default value is auto so we don't check for it here
if (ourPosition->mLeft.IsLengthUnit()) {
position->mLeftOffset = CalcLength(ourPosition->mLeft, font, aPresContext);
position->mLeftOffsetFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mHeight.GetUnit() == eCSSUnit_Percent) {
position->mLeftOffset = (nscoord)(100 * ourPosition->mLeft.GetFloatValue());
position->mLeftOffsetFlags = NS_STYLE_POSITION_VALUE_PCT;
}
if (ourPosition->mTop.IsLengthUnit()) {
position->mTopOffset = CalcLength(ourPosition->mTop, font, aPresContext);
position->mTopOffsetFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mHeight.GetUnit() == eCSSUnit_Percent) {
position->mTopOffset = (nscoord)(100 * ourPosition->mTop.GetFloatValue());
position->mTopOffsetFlags = NS_STYLE_POSITION_VALUE_PCT;
}
if (ourPosition->mWidth.IsLengthUnit()) {
position->mWidth = CalcLength(ourPosition->mWidth, font, aPresContext);
position->mWidthFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mWidth.GetUnit() == eCSSUnit_Percent) {
position->mWidth = (nscoord)(100 * ourPosition->mWidth.GetFloatValue());
position->mWidthFlags = NS_STYLE_POSITION_VALUE_PCT;
}
if (ourPosition->mHeight.IsLengthUnit()) {
position->mHeight = CalcLength(ourPosition->mHeight, font, aPresContext);
position->mHeightFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mHeight.GetUnit() == eCSSUnit_Percent) {
position->mHeight = (nscoord)(100 * ourPosition->mHeight.GetFloatValue());
position->mHeightFlags = NS_STYLE_POSITION_VALUE_PCT;
}
}
}

View File

@@ -668,22 +668,34 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a
position->mPosition = ourPosition->mPosition.GetIntValue();
}
// box offsets
// box offsets. note: default value is auto so we don't check for it here
if (ourPosition->mLeft.IsLengthUnit()) {
position->mLeftOffset = CalcLength(ourPosition->mLeft, font, aPresContext);
position->mLeftOffsetFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mHeight.GetUnit() == eCSSUnit_Percent) {
position->mLeftOffset = (nscoord)(100 * ourPosition->mLeft.GetFloatValue());
position->mLeftOffsetFlags = NS_STYLE_POSITION_VALUE_PCT;
}
if (ourPosition->mTop.IsLengthUnit()) {
position->mTopOffset = CalcLength(ourPosition->mTop, font, aPresContext);
position->mTopOffsetFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mHeight.GetUnit() == eCSSUnit_Percent) {
position->mTopOffset = (nscoord)(100 * ourPosition->mTop.GetFloatValue());
position->mTopOffsetFlags = NS_STYLE_POSITION_VALUE_PCT;
}
if (ourPosition->mWidth.IsLengthUnit()) {
position->mWidth = CalcLength(ourPosition->mWidth, font, aPresContext);
position->mWidthFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mWidth.GetUnit() == eCSSUnit_Percent) {
position->mWidth = (nscoord)(100 * ourPosition->mWidth.GetFloatValue());
position->mWidthFlags = NS_STYLE_POSITION_VALUE_PCT;
}
if (ourPosition->mHeight.IsLengthUnit()) {
position->mHeight = CalcLength(ourPosition->mHeight, font, aPresContext);
position->mHeightFlags = NS_STYLE_POSITION_VALUE_LENGTH;
} else if (ourPosition->mHeight.GetUnit() == eCSSUnit_Percent) {
position->mHeight = (nscoord)(100 * ourPosition->mHeight.GetFloatValue());
position->mHeightFlags = NS_STYLE_POSITION_VALUE_PCT;
}
}
}