From 200fd1ff3d891fab77a7dbf165ad6cc221134bdd Mon Sep 17 00:00:00 2001 From: troy Date: Fri, 24 Apr 1998 18:34:31 +0000 Subject: [PATCH] Added mZIndex to nsStylePosition. Absolutely positioned code now passed it along to view system git-svn-id: svn://10.0.0.236/trunk@608 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/base/src/nsStyleContext.cpp | 1 + .../content/html/style/src/nsCSSStyleRule.cpp | 7 ++++ mozilla/layout/base/public/nsIStyleContext.h | 2 + mozilla/layout/base/src/nsStyleContext.cpp | 1 + .../layout/html/base/src/nsAbsoluteFrame.cpp | 37 ++++++++++++++----- .../layout/html/base/src/nsAbsoluteFrame.h | 4 +- .../layout/html/style/src/nsCSSStyleRule.cpp | 7 ++++ mozilla/layout/style/nsCSSStyleRule.cpp | 7 ++++ mozilla/layout/style/nsStyleContext.cpp | 1 + 9 files changed, 56 insertions(+), 11 deletions(-) diff --git a/mozilla/content/base/src/nsStyleContext.cpp b/mozilla/content/base/src/nsStyleContext.cpp index cac091e3a69..7764a36b211 100644 --- a/mozilla/content/base/src/nsStyleContext.cpp +++ b/mozilla/content/base/src/nsStyleContext.cpp @@ -226,6 +226,7 @@ struct StylePositionImpl: public nsStylePosition { mWidth = 0; mHeightFlags = NS_STYLE_POSITION_VALUE_AUTO; mHeight = 0; + mZIndex = 0; } ~StylePositionImpl(void) diff --git a/mozilla/content/html/style/src/nsCSSStyleRule.cpp b/mozilla/content/html/style/src/nsCSSStyleRule.cpp index 47b43ba421d..028ab779b33 100644 --- a/mozilla/content/html/style/src/nsCSSStyleRule.cpp +++ b/mozilla/content/html/style/src/nsCSSStyleRule.cpp @@ -697,6 +697,13 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a position->mHeight = (nscoord)(100 * ourPosition->mHeight.GetFloatValue()); position->mHeightFlags = NS_STYLE_POSITION_VALUE_PCT; } + + // z-index + if (ourPosition->mZIndex.GetUnit() == eCSSUnit_Enumerated) { + position->mPosition = ourPosition->mPosition.GetIntValue(); + } else if (ourPosition->mZIndex.GetUnit() == eCSSUnit_Absolute) { + position->mZIndex = ourPosition->mZIndex.GetIntValue(); + } } } diff --git a/mozilla/layout/base/public/nsIStyleContext.h b/mozilla/layout/base/public/nsIStyleContext.h index b934758541b..492d4cf8b9d 100644 --- a/mozilla/layout/base/public/nsIStyleContext.h +++ b/mozilla/layout/base/public/nsIStyleContext.h @@ -126,6 +126,8 @@ struct nsStylePosition : public nsStyleStruct { nscoord mWidth; PRUint8 mHeightFlags; // see nsStyleConsts.h nscoord mHeight; + + PRInt32 mZIndex; }; //---------------------------------------------------------------------- diff --git a/mozilla/layout/base/src/nsStyleContext.cpp b/mozilla/layout/base/src/nsStyleContext.cpp index cac091e3a69..7764a36b211 100644 --- a/mozilla/layout/base/src/nsStyleContext.cpp +++ b/mozilla/layout/base/src/nsStyleContext.cpp @@ -226,6 +226,7 @@ struct StylePositionImpl: public nsStylePosition { mWidth = 0; mHeightFlags = NS_STYLE_POSITION_VALUE_AUTO; mHeight = 0; + mZIndex = 0; } ~StylePositionImpl(void) diff --git a/mozilla/layout/html/base/src/nsAbsoluteFrame.cpp b/mozilla/layout/html/base/src/nsAbsoluteFrame.cpp index bbfc3ad01df..793a986e69a 100644 --- a/mozilla/layout/html/base/src/nsAbsoluteFrame.cpp +++ b/mozilla/layout/html/base/src/nsAbsoluteFrame.cpp @@ -29,6 +29,7 @@ #include "nsViewsCID.h" static NS_DEFINE_IID(kStylePositionSID, NS_STYLEPOSITION_SID); +static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID); static NS_DEFINE_IID(kIScrollableViewIID, NS_ISCROLLABLEVIEW_IID); NS_DEF_PTR(nsIStyleContext); @@ -63,7 +64,9 @@ AbsoluteFrame::~AbsoluteFrame() { } -nsIView* AbsoluteFrame::CreateView(nsIFrame* aContainingBlock, const nsRect& aRect) +nsIView* AbsoluteFrame::CreateView(nsIFrame* aContainingBlock, + const nsRect& aRect, + PRInt32 aZIndex) { nsIView* containingView; nsIView* view; @@ -91,12 +94,12 @@ nsIView* AbsoluteFrame::CreateView(nsIFrame* aContainingBlock, const nsRect& aRe if (NS_OK == result) { nsIView* scrolledView = scrollView->GetScrolledView(); - view->Init(viewManager, aRect, scrolledView); + view->Init(viewManager, aRect, scrolledView, nsnull, nsnull, aZIndex); viewManager->InsertChild(scrolledView, view, 0); NS_RELEASE(scrolledView); NS_RELEASE(scrollView); } else { - view->Init(viewManager, aRect, containingView); + view->Init(viewManager, aRect, containingView, nsnull, nsnull, aZIndex); viewManager->InsertChild(containingView, view, 0); } @@ -128,18 +131,24 @@ void AbsoluteFrame::ComputeViewsRect(nsIFrame* aContainingBlock, nsRect& aRect) // the containing block aRect.width = containingRect.width; aRect.x = 0; - - } else { + } else if (NS_STYLE_POSITION_VALUE_LENGTH == position->mWidthFlags) { aRect.width = position->mWidth; aRect.x = containingRect.width - aRect.width; + } else { + NS_ASSERTION(NS_STYLE_POSITION_VALUE_PCT == position->mWidthFlags, "unexpected width"); + aRect.width = containingRect.width * position->mWidth / 100; + aRect.x = 0; } } else { aRect.x = position->mLeftOffset; if (NS_STYLE_POSITION_VALUE_AUTO == position->mWidthFlags) { aRect.width = containingRect.width - aRect.x; - } else { + } else if (NS_STYLE_POSITION_VALUE_LENGTH == position->mWidthFlags) { aRect.width = position->mWidth; + } else { + NS_ASSERTION(NS_STYLE_POSITION_VALUE_PCT == position->mWidthFlags, "unexpected width"); + aRect.width = containingRect.width * position->mWidth / 100; } } @@ -150,18 +159,24 @@ void AbsoluteFrame::ComputeViewsRect(nsIFrame* aContainingBlock, nsRect& aRect) // the containing block aRect.height = containingRect.height; aRect.y = 0; - - } else { + } else if (NS_STYLE_POSITION_VALUE_LENGTH == position->mHeightFlags) { aRect.height = position->mHeight; aRect.y = containingRect.height - aRect.height; + } else { + NS_ASSERTION(NS_STYLE_POSITION_VALUE_PCT == position->mHeightFlags, "unexpected height"); + aRect.height = containingRect.height * position->mHeight / 100; + aRect.y = 0; } } else { aRect.y = position->mTopOffset; if (NS_STYLE_POSITION_VALUE_AUTO == position->mHeightFlags) { aRect.height = containingRect.height - aRect.y; - } else { + } else if (NS_STYLE_POSITION_VALUE_LENGTH == position->mHeightFlags) { aRect.height = position->mHeight; + } else { + NS_ASSERTION(NS_STYLE_POSITION_VALUE_PCT == position->mHeightFlags, "unexpected height"); + aRect.height = containingRect.height * position->mHeight / 100; } } } @@ -233,7 +248,9 @@ NS_METHOD AbsoluteFrame::ResizeReflow(nsIPresContext* aPresContext, ComputeViewsRect(containingBlock, rect); // Create a view for the frame - nsIView* view = CreateView(containingBlock, rect); + nsStylePosition* position = (nsStylePosition*)mStyleContext->GetData(kStylePositionSID); + nsIView* view = CreateView(containingBlock, rect, position->mZIndex); + mFrame->SetView(view); NS_RELEASE(view); diff --git a/mozilla/layout/html/base/src/nsAbsoluteFrame.h b/mozilla/layout/html/base/src/nsAbsoluteFrame.h index e768fadf286..afdc31c9526 100644 --- a/mozilla/layout/html/base/src/nsAbsoluteFrame.h +++ b/mozilla/layout/html/base/src/nsAbsoluteFrame.h @@ -53,7 +53,9 @@ protected: virtual ~AbsoluteFrame(); - nsIView* CreateView(nsIFrame* aContainingBlock, const nsRect& aRect); + nsIView* CreateView(nsIFrame* aContainingBlock, + const nsRect& aRect, + PRInt32 aZIndex); nsIFrame* GetContainingBlock(); void ComputeViewsRect(nsIFrame* aContainingBlock, nsRect& aRect); }; diff --git a/mozilla/layout/html/style/src/nsCSSStyleRule.cpp b/mozilla/layout/html/style/src/nsCSSStyleRule.cpp index 47b43ba421d..028ab779b33 100644 --- a/mozilla/layout/html/style/src/nsCSSStyleRule.cpp +++ b/mozilla/layout/html/style/src/nsCSSStyleRule.cpp @@ -697,6 +697,13 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a position->mHeight = (nscoord)(100 * ourPosition->mHeight.GetFloatValue()); position->mHeightFlags = NS_STYLE_POSITION_VALUE_PCT; } + + // z-index + if (ourPosition->mZIndex.GetUnit() == eCSSUnit_Enumerated) { + position->mPosition = ourPosition->mPosition.GetIntValue(); + } else if (ourPosition->mZIndex.GetUnit() == eCSSUnit_Absolute) { + position->mZIndex = ourPosition->mZIndex.GetIntValue(); + } } } diff --git a/mozilla/layout/style/nsCSSStyleRule.cpp b/mozilla/layout/style/nsCSSStyleRule.cpp index 47b43ba421d..028ab779b33 100644 --- a/mozilla/layout/style/nsCSSStyleRule.cpp +++ b/mozilla/layout/style/nsCSSStyleRule.cpp @@ -697,6 +697,13 @@ void CSSStyleRuleImpl::MapStyleInto(nsIStyleContext* aContext, nsIPresContext* a position->mHeight = (nscoord)(100 * ourPosition->mHeight.GetFloatValue()); position->mHeightFlags = NS_STYLE_POSITION_VALUE_PCT; } + + // z-index + if (ourPosition->mZIndex.GetUnit() == eCSSUnit_Enumerated) { + position->mPosition = ourPosition->mPosition.GetIntValue(); + } else if (ourPosition->mZIndex.GetUnit() == eCSSUnit_Absolute) { + position->mZIndex = ourPosition->mZIndex.GetIntValue(); + } } } diff --git a/mozilla/layout/style/nsStyleContext.cpp b/mozilla/layout/style/nsStyleContext.cpp index cac091e3a69..7764a36b211 100644 --- a/mozilla/layout/style/nsStyleContext.cpp +++ b/mozilla/layout/style/nsStyleContext.cpp @@ -226,6 +226,7 @@ struct StylePositionImpl: public nsStylePosition { mWidth = 0; mHeightFlags = NS_STYLE_POSITION_VALUE_AUTO; mHeight = 0; + mZIndex = 0; } ~StylePositionImpl(void)