Added mClip and mClipFlags to nsStylePosition

This commit is contained in:
troy 1998-04-28 03:21:18 +00:00
parent 66ead6fcea
commit beceaa1b53
10 changed files with 118 additions and 23 deletions

View File

@ -238,6 +238,8 @@ struct StylePositionImpl: public nsStylePosition {
mHeightFlags = NS_STYLE_POSITION_VALUE_AUTO;
mHeight = 0;
mZIndex = 0;
mClipFlags = NS_STYLE_CLIP_AUTO;
mClip.SizeTo(0,0,0,0);
}
~StylePositionImpl(void)

View File

@ -1017,6 +1017,32 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a
} else if (ourPosition->mZIndex.GetUnit() == eCSSUnit_Absolute) {
position->mZIndex = ourPosition->mZIndex.GetIntValue();
}
// clip property
if (nsnull != ourPosition->mClip) {
position->mClipFlags = NS_STYLE_CLIP_RECT;
if (ourPosition->mClip->mTop.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.top = ourPosition->mClip->mTop.GetIntValue();
} else if (ourPosition->mClip->mTop.IsLengthUnit()) {
position->mClip.top = CalcLength(ourPosition->mClip->mTop, font, aPresContext);
}
if (ourPosition->mClip->mRight.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.right = ourPosition->mClip->mRight.GetIntValue();
} else if (ourPosition->mClip->mRight.IsLengthUnit()) {
position->mClip.right = CalcLength(ourPosition->mClip->mRight, font, aPresContext);
}
if (ourPosition->mClip->mBottom.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.bottom = ourPosition->mClip->mBottom.GetIntValue();
} else if (ourPosition->mClip->mBottom.IsLengthUnit()) {
position->mClip.bottom = CalcLength(ourPosition->mClip->mBottom, font, aPresContext);
}
if (ourPosition->mClip->mLeft.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.left = ourPosition->mClip->mLeft.GetIntValue();
} else if (ourPosition->mClip->mLeft.IsLengthUnit()) {
position->mClip.left = CalcLength(ourPosition->mClip->mLeft, font, aPresContext);
}
}
}
}

View File

@ -140,20 +140,22 @@ protected:
};
struct nsStylePosition : public nsStyleStruct {
PRUint8 mPosition; // see nsStyleConsts.h
PRUint8 mOverflow; // see nsStyleConsts.h
PRUint8 mPosition; // see nsStyleConsts.h
PRUint8 mOverflow; // see nsStyleConsts.h
PRUint8 mClipFlags; // see nsStyleConsts.h
PRUint8 mLeftOffsetFlags; // see nsStyleConsts.h
PRUint8 mTopOffsetFlags; // see nsStyleConsts.h
PRUint8 mWidthFlags; // see nsStyleConsts.h
PRUint8 mHeightFlags; // see nsStyleConsts.h
PRUint8 mLeftOffsetFlags; // see nsStyleConsts.h
PRUint8 mTopOffsetFlags; // see nsStyleConsts.h
PRUint8 mWidthFlags; // see nsStyleConsts.h
PRUint8 mHeightFlags; // see nsStyleConsts.h
nscoord mLeftOffset;
nscoord mTopOffset;
nscoord mWidth;
nscoord mHeight;
nscoord mLeftOffset;
nscoord mTopOffset;
nscoord mWidth;
nscoord mHeight;
PRInt32 mZIndex;
PRInt32 mZIndex;
nsMargin mClip; // offsets from respective edge
protected:
nsStylePosition();

View File

@ -70,9 +70,6 @@
#define NS_STYLE_CLEAR_COLUMN 6
#define NS_STYLE_CLEAR_PAGE 7
// See nsStyleXXX
#define NS_STYLE_CLIP_AUTO 0
// See nsStyleColor
#define NS_STYLE_CURSOR_INHERIT 0
#define NS_STYLE_CURSOR_DEFAULT 1

View File

@ -238,6 +238,8 @@ struct StylePositionImpl: public nsStylePosition {
mHeightFlags = NS_STYLE_POSITION_VALUE_AUTO;
mHeight = 0;
mZIndex = 0;
mClipFlags = NS_STYLE_CLIP_AUTO;
mClip.SizeTo(0,0,0,0);
}
~StylePositionImpl(void)

View File

@ -63,9 +63,9 @@ AbsoluteFrame::~AbsoluteFrame()
{
}
nsIView* AbsoluteFrame::CreateView(nsIView* aContainingView,
const nsRect& aRect,
PRInt32 aZIndex)
nsIView* AbsoluteFrame::CreateView(nsIView* aContainingView,
const nsRect& aRect,
nsStylePosition* aPosition)
{
nsIView* view;
@ -85,17 +85,29 @@ nsIView* AbsoluteFrame::CreateView(nsIView* aContainingView,
// See if the containing view is a scroll view
nsIScrollableView* scrollView = nsnull;
nsresult result;
nsRect clip;
nsRect* pClip = NS_STYLE_CLIP_RECT == aPosition->mClipFlags ?
&clip : nsnull;
// Is there a clip rect specified?
if (NS_STYLE_CLIP_RECT == aPosition->mClipFlags) {
// XXX Michael: this needs to change
clip.SetRect(aPosition->mClip.left, aPosition->mClip.top,
aPosition->mClip.right, aPosition->mClip.bottom);
}
result = aContainingView->QueryInterface(kIScrollableViewIID, (void**)&scrollView);
if (NS_OK == result) {
nsIView* scrolledView = scrollView->GetScrolledView();
view->Init(viewManager, aRect, scrolledView, nsnull, nsnull, nsnull, aZIndex);
view->Init(viewManager, aRect, scrolledView, nsnull, nsnull, nsnull,
aPosition->mZIndex, pClip);
viewManager->InsertChild(scrolledView, view, 0);
NS_RELEASE(scrolledView);
NS_RELEASE(scrollView);
} else {
view->Init(viewManager, aRect, aContainingView, nsnull, nsnull, nsnull, aZIndex);
view->Init(viewManager, aRect, aContainingView, nsnull, nsnull, nsnull,
aPosition->mZIndex, pClip);
viewManager->InsertChild(aContainingView, view, 0);
}
@ -250,7 +262,7 @@ NS_METHOD AbsoluteFrame::ResizeReflow(nsIPresContext* aPresContext,
ComputeViewBounds(containingRect, position, rect);
// Create a view for the frame
nsIView* view = CreateView(containingView, rect, position->mZIndex);
nsIView* view = CreateView(containingView, rect, position);
NS_RELEASE(containingView);
mFrame->SetView(view);

View File

@ -53,9 +53,9 @@ protected:
virtual ~AbsoluteFrame();
nsIView* CreateView(nsIView* aContainingView,
const nsRect& aRect,
PRInt32 aZIndex);
nsIView* CreateView(nsIView* aContainingView,
const nsRect& aRect,
nsStylePosition* aPosition);
nsIFrame* GetContainingBlock();
void ComputeViewBounds(const nsRect& aContainingInnerRect,
nsStylePosition* aPosition,

View File

@ -1017,6 +1017,32 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a
} else if (ourPosition->mZIndex.GetUnit() == eCSSUnit_Absolute) {
position->mZIndex = ourPosition->mZIndex.GetIntValue();
}
// clip property
if (nsnull != ourPosition->mClip) {
position->mClipFlags = NS_STYLE_CLIP_RECT;
if (ourPosition->mClip->mTop.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.top = ourPosition->mClip->mTop.GetIntValue();
} else if (ourPosition->mClip->mTop.IsLengthUnit()) {
position->mClip.top = CalcLength(ourPosition->mClip->mTop, font, aPresContext);
}
if (ourPosition->mClip->mRight.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.right = ourPosition->mClip->mRight.GetIntValue();
} else if (ourPosition->mClip->mRight.IsLengthUnit()) {
position->mClip.right = CalcLength(ourPosition->mClip->mRight, font, aPresContext);
}
if (ourPosition->mClip->mBottom.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.bottom = ourPosition->mClip->mBottom.GetIntValue();
} else if (ourPosition->mClip->mBottom.IsLengthUnit()) {
position->mClip.bottom = CalcLength(ourPosition->mClip->mBottom, font, aPresContext);
}
if (ourPosition->mClip->mLeft.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.left = ourPosition->mClip->mLeft.GetIntValue();
} else if (ourPosition->mClip->mLeft.IsLengthUnit()) {
position->mClip.left = CalcLength(ourPosition->mClip->mLeft, font, aPresContext);
}
}
}
}

View File

@ -1017,6 +1017,32 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a
} else if (ourPosition->mZIndex.GetUnit() == eCSSUnit_Absolute) {
position->mZIndex = ourPosition->mZIndex.GetIntValue();
}
// clip property
if (nsnull != ourPosition->mClip) {
position->mClipFlags = NS_STYLE_CLIP_RECT;
if (ourPosition->mClip->mTop.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.top = ourPosition->mClip->mTop.GetIntValue();
} else if (ourPosition->mClip->mTop.IsLengthUnit()) {
position->mClip.top = CalcLength(ourPosition->mClip->mTop, font, aPresContext);
}
if (ourPosition->mClip->mRight.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.right = ourPosition->mClip->mRight.GetIntValue();
} else if (ourPosition->mClip->mRight.IsLengthUnit()) {
position->mClip.right = CalcLength(ourPosition->mClip->mRight, font, aPresContext);
}
if (ourPosition->mClip->mBottom.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.bottom = ourPosition->mClip->mBottom.GetIntValue();
} else if (ourPosition->mClip->mBottom.IsLengthUnit()) {
position->mClip.bottom = CalcLength(ourPosition->mClip->mBottom, font, aPresContext);
}
if (ourPosition->mClip->mLeft.GetUnit() == eCSSUnit_Enumerated) {
position->mClip.left = ourPosition->mClip->mLeft.GetIntValue();
} else if (ourPosition->mClip->mLeft.IsLengthUnit()) {
position->mClip.left = CalcLength(ourPosition->mClip->mLeft, font, aPresContext);
}
}
}
}

View File

@ -238,6 +238,8 @@ struct StylePositionImpl: public nsStylePosition {
mHeightFlags = NS_STYLE_POSITION_VALUE_AUTO;
mHeight = 0;
mZIndex = 0;
mClipFlags = NS_STYLE_CLIP_AUTO;
mClip.SizeTo(0,0,0,0);
}
~StylePositionImpl(void)