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:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user