From 4c50c0a82bf58d4acbf758884ddcb435a78047ce Mon Sep 17 00:00:00 2001 From: "hyatt%netscape.com" Date: Tue, 4 Apr 2000 06:29:20 +0000 Subject: [PATCH] Making support dynamic. git-svn-id: svn://10.0.0.236/trunk@65157 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/base/src/nsStyleContext.cpp | 1 + .../content/html/style/src/nsCSSStyleRule.cpp | 3 +++ mozilla/layout/base/nsCSSFrameConstructor.cpp | 7 +++++-- mozilla/layout/base/src/nsStyleContext.cpp | 1 + .../html/style/src/nsCSSFrameConstructor.cpp | 7 +++++-- .../layout/html/style/src/nsCSSStyleRule.cpp | 3 +++ mozilla/layout/style/nsCSSStyleRule.cpp | 3 +++ mozilla/layout/style/nsStyleContext.cpp | 1 + mozilla/layout/xul/base/src/nsBox.h | 5 +++++ mozilla/layout/xul/base/src/nsBoxFrame.cpp | 15 +++++++++++++++ mozilla/layout/xul/base/src/nsContainerBox.cpp | 17 +++++++++++++++++ mozilla/layout/xul/base/src/nsContainerBox.h | 6 ++++++ mozilla/layout/xul/base/src/nsIBox.h | 5 +++++ 13 files changed, 70 insertions(+), 4 deletions(-) diff --git a/mozilla/content/base/src/nsStyleContext.cpp b/mozilla/content/base/src/nsStyleContext.cpp index 3c6dbc276f2..e2778e97c90 100644 --- a/mozilla/content/base/src/nsStyleContext.cpp +++ b/mozilla/content/base/src/nsStyleContext.cpp @@ -1518,6 +1518,7 @@ void StyleUserInterfaceImpl::ResetFrom(const nsStyleUserInterface* aParent, nsIP mUserSelect = NS_STYLE_USER_SELECT_AUTO; mKeyEquivalent = PRUnichar(0); // XXX what type should this be? mResizer = NS_STYLE_RESIZER_AUTO; + mBehavior = ""; } void StyleUserInterfaceImpl::SetFrom(const nsStyleUserInterface& aSource) diff --git a/mozilla/content/html/style/src/nsCSSStyleRule.cpp b/mozilla/content/html/style/src/nsCSSStyleRule.cpp index e6557253425..74a801d3ac3 100644 --- a/mozilla/content/html/style/src/nsCSSStyleRule.cpp +++ b/mozilla/content/html/style/src/nsCSSStyleRule.cpp @@ -2831,6 +2831,9 @@ MapDeclarationUIInto(nsICSSDeclaration* aDeclaration, else if (eCSSUnit_None == ourUI->mBehavior.GetUnit()) { ui->mBehavior.Truncate(); } + else if (eCSSUnit_Inherit == ourUI->mBehavior.GetUnit()) { + ui->mBehavior = parentUI->mBehavior; + } // key-equivalent: none, enum XXX, inherit nsCSSValueList* keyEquiv = ourUI->mKeyEquivalent; diff --git a/mozilla/layout/base/nsCSSFrameConstructor.cpp b/mozilla/layout/base/nsCSSFrameConstructor.cpp index b48eb96653b..56c5383628e 100644 --- a/mozilla/layout/base/nsCSSFrameConstructor.cpp +++ b/mozilla/layout/base/nsCSSFrameConstructor.cpp @@ -3285,6 +3285,10 @@ nsCSSFrameConstructor::ConstructDocElementFrame(nsIPresShell* aPresShell, contentFrame->SetInitialChildList(aPresContext, nsnull, childItems.childList); + // Create any anonymous frames the doc element frame requires + CreateAnonymousFrames(aPresShell, aPresContext, nsnull, aState, aDocElement, contentFrame, + childItems); + // only support absolute positioning if we are a block. // if we are a box don't do it. if (isBlockFrame) { @@ -5072,13 +5076,12 @@ nsCSSFrameConstructor::CreateAnonymousFrames(nsIPresShell* aPresShell, nsnull, explicitItems.childList); } - /* XXX comes online soon. if (frame) { // XXX Eventually generalize to HTML as well. For now, // leave this on nsIBox. nsCOMPtr box(do_QueryInterface(aNewFrame)); box->SetInsertionPoint(frame); - }*/ + } } return NS_OK; diff --git a/mozilla/layout/base/src/nsStyleContext.cpp b/mozilla/layout/base/src/nsStyleContext.cpp index 3c6dbc276f2..e2778e97c90 100644 --- a/mozilla/layout/base/src/nsStyleContext.cpp +++ b/mozilla/layout/base/src/nsStyleContext.cpp @@ -1518,6 +1518,7 @@ void StyleUserInterfaceImpl::ResetFrom(const nsStyleUserInterface* aParent, nsIP mUserSelect = NS_STYLE_USER_SELECT_AUTO; mKeyEquivalent = PRUnichar(0); // XXX what type should this be? mResizer = NS_STYLE_RESIZER_AUTO; + mBehavior = ""; } void StyleUserInterfaceImpl::SetFrom(const nsStyleUserInterface& aSource) diff --git a/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp b/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp index b48eb96653b..56c5383628e 100644 --- a/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp +++ b/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp @@ -3285,6 +3285,10 @@ nsCSSFrameConstructor::ConstructDocElementFrame(nsIPresShell* aPresShell, contentFrame->SetInitialChildList(aPresContext, nsnull, childItems.childList); + // Create any anonymous frames the doc element frame requires + CreateAnonymousFrames(aPresShell, aPresContext, nsnull, aState, aDocElement, contentFrame, + childItems); + // only support absolute positioning if we are a block. // if we are a box don't do it. if (isBlockFrame) { @@ -5072,13 +5076,12 @@ nsCSSFrameConstructor::CreateAnonymousFrames(nsIPresShell* aPresShell, nsnull, explicitItems.childList); } - /* XXX comes online soon. if (frame) { // XXX Eventually generalize to HTML as well. For now, // leave this on nsIBox. nsCOMPtr box(do_QueryInterface(aNewFrame)); box->SetInsertionPoint(frame); - }*/ + } } return NS_OK; diff --git a/mozilla/layout/html/style/src/nsCSSStyleRule.cpp b/mozilla/layout/html/style/src/nsCSSStyleRule.cpp index e6557253425..74a801d3ac3 100644 --- a/mozilla/layout/html/style/src/nsCSSStyleRule.cpp +++ b/mozilla/layout/html/style/src/nsCSSStyleRule.cpp @@ -2831,6 +2831,9 @@ MapDeclarationUIInto(nsICSSDeclaration* aDeclaration, else if (eCSSUnit_None == ourUI->mBehavior.GetUnit()) { ui->mBehavior.Truncate(); } + else if (eCSSUnit_Inherit == ourUI->mBehavior.GetUnit()) { + ui->mBehavior = parentUI->mBehavior; + } // key-equivalent: none, enum XXX, inherit nsCSSValueList* keyEquiv = ourUI->mKeyEquivalent; diff --git a/mozilla/layout/style/nsCSSStyleRule.cpp b/mozilla/layout/style/nsCSSStyleRule.cpp index e6557253425..74a801d3ac3 100644 --- a/mozilla/layout/style/nsCSSStyleRule.cpp +++ b/mozilla/layout/style/nsCSSStyleRule.cpp @@ -2831,6 +2831,9 @@ MapDeclarationUIInto(nsICSSDeclaration* aDeclaration, else if (eCSSUnit_None == ourUI->mBehavior.GetUnit()) { ui->mBehavior.Truncate(); } + else if (eCSSUnit_Inherit == ourUI->mBehavior.GetUnit()) { + ui->mBehavior = parentUI->mBehavior; + } // key-equivalent: none, enum XXX, inherit nsCSSValueList* keyEquiv = ourUI->mKeyEquivalent; diff --git a/mozilla/layout/style/nsStyleContext.cpp b/mozilla/layout/style/nsStyleContext.cpp index 3c6dbc276f2..e2778e97c90 100644 --- a/mozilla/layout/style/nsStyleContext.cpp +++ b/mozilla/layout/style/nsStyleContext.cpp @@ -1518,6 +1518,7 @@ void StyleUserInterfaceImpl::ResetFrom(const nsStyleUserInterface* aParent, nsIP mUserSelect = NS_STYLE_USER_SELECT_AUTO; mKeyEquivalent = PRUnichar(0); // XXX what type should this be? mResizer = NS_STYLE_RESIZER_AUTO; + mBehavior = ""; } void StyleUserInterfaceImpl::SetFrom(const nsStyleUserInterface& aSource) diff --git a/mozilla/layout/xul/base/src/nsBox.h b/mozilla/layout/xul/base/src/nsBox.h index 995534b96e1..3ac5ec57527 100644 --- a/mozilla/layout/xul/base/src/nsBox.h +++ b/mozilla/layout/xul/base/src/nsBox.h @@ -74,6 +74,11 @@ public: NS_IMETHOD GetDebugBoxAt(const nsPoint& aPoint, nsIBox** aBox); NS_IMETHOD GetDebug(PRBool& aDebug); + // XXX Eventually these will move into nsIFrame. + // These methods are used for XBL . + NS_IMETHOD GetInsertionPoint(nsIFrame** aFrame) { return NS_OK; }; + NS_IMETHOD SetInsertionPoint(nsIFrame* aFrame) { return NS_OK; }; + nsBox(nsIPresShell* aShell); virtual nsresult SyncLayout(nsBoxLayoutState& aBoxLayoutState); diff --git a/mozilla/layout/xul/base/src/nsBoxFrame.cpp b/mozilla/layout/xul/base/src/nsBoxFrame.cpp index 76cc01504c6..0dfe2a79ef6 100644 --- a/mozilla/layout/xul/base/src/nsBoxFrame.cpp +++ b/mozilla/layout/xul/base/src/nsBoxFrame.cpp @@ -874,6 +874,11 @@ nsBoxFrame::RemoveFrame(nsIPresContext* aPresContext, nsIAtom* aListName, nsIFrame* aOldFrame) { + nsIFrame* insertionPoint = nsnull; + GetInsertionPoint(&insertionPoint); + if (insertionPoint) + return insertionPoint->RemoveFrame(aPresContext, aPresShell, aListName, aOldFrame); + SanityCheck(mFrames); // remove child from our info list @@ -898,6 +903,11 @@ nsBoxFrame::InsertFrames(nsIPresContext* aPresContext, nsIFrame* aPrevFrame, nsIFrame* aFrameList) { + nsIFrame* insertionPoint = nsnull; + GetInsertionPoint(&insertionPoint); + if (insertionPoint) + return insertionPoint->InsertFrames(aPresContext, aPresShell, aListName, aPrevFrame, aFrameList); + SanityCheck(mFrames); nsIBox* prevBox = GetBox(aPrevFrame); @@ -933,6 +943,11 @@ nsBoxFrame::AppendFrames(nsIPresContext* aPresContext, nsIAtom* aListName, nsIFrame* aFrameList) { + nsIFrame* insertionPoint = nsnull; + GetInsertionPoint(&insertionPoint); + if (insertionPoint) + return insertionPoint->AppendFrames(aPresContext, aPresShell, aListName, aFrameList); + SanityCheck(mFrames); // append them after diff --git a/mozilla/layout/xul/base/src/nsContainerBox.cpp b/mozilla/layout/xul/base/src/nsContainerBox.cpp index 0ecacaa8026..e7abc15967d 100644 --- a/mozilla/layout/xul/base/src/nsContainerBox.cpp +++ b/mozilla/layout/xul/base/src/nsContainerBox.cpp @@ -72,6 +72,7 @@ nsContainerBox::nsContainerBox(nsIPresShell* aShell):nsBox(aShell) mFirstChild = nsnull; mLastChild = nsnull; mChildCount = 0; + mInsertionPoint = nsnull; } NS_IMETHODIMP @@ -530,6 +531,22 @@ nsContainerBox::LayoutChildAt(nsBoxLayoutState& aState, nsIBox* aBox, const nsRe return NS_OK; } +// XXX Eventually these will move into nsIFrame. +// These methods are used for XBL . +NS_IMETHODIMP +nsContainerBox::GetInsertionPoint(nsIFrame** aFrame) +{ + *aFrame = mInsertionPoint; + return NS_OK; +} + +NS_IMETHODIMP +nsContainerBox::SetInsertionPoint(nsIFrame* aFrame) +{ + mInsertionPoint = aFrame; + return NS_OK; +} + diff --git a/mozilla/layout/xul/base/src/nsContainerBox.h b/mozilla/layout/xul/base/src/nsContainerBox.h index 4dcf463fa40..9d42faafe88 100644 --- a/mozilla/layout/xul/base/src/nsContainerBox.h +++ b/mozilla/layout/xul/base/src/nsContainerBox.h @@ -63,6 +63,11 @@ public: virtual void SanityCheck(nsFrameList& aFrameList); virtual void SetDebugOnChildList(nsBoxLayoutState& aState, nsIBox* aChild, PRBool aDebug); + // XXX Eventually these will move into nsIFrame. + // These methods are used for XBL . + NS_IMETHOD GetInsertionPoint(nsIFrame** aFrame); + NS_IMETHOD SetInsertionPoint(nsIFrame* aFrame); + protected: virtual nsresult LayoutChildAt(nsBoxLayoutState& aState, nsIBox* aBox, const nsRect& aRect); @@ -71,6 +76,7 @@ protected: nsIBox* mLastChild; PRInt32 mChildCount; nsCOMPtr mLayoutManager; + nsIFrame* mInsertionPoint; }; #endif diff --git a/mozilla/layout/xul/base/src/nsIBox.h b/mozilla/layout/xul/base/src/nsIBox.h index 9bf54a08415..87722d2d6f5 100644 --- a/mozilla/layout/xul/base/src/nsIBox.h +++ b/mozilla/layout/xul/base/src/nsIBox.h @@ -99,6 +99,11 @@ public: NS_IMETHOD NeedsRecalc()=0; NS_IMETHOD GetDebugBoxAt(const nsPoint& aPoint, nsIBox** aBox)=0; + // XXX Eventually these will move into nsIFrame. + // These methods are used for XBL . + NS_IMETHOD GetInsertionPoint(nsIFrame** aFrame)=0; + NS_IMETHOD SetInsertionPoint(nsIFrame* aFrame)=0; + static PRBool AddCSSPrefSize(nsBoxLayoutState& aState, nsIBox* aBox, nsSize& aSize); static PRBool AddCSSMinSize(nsBoxLayoutState& aState, nsIBox* aBox, nsSize& aSize); static PRBool AddCSSMaxSize(nsBoxLayoutState& aState, nsIBox* aBox, nsSize& aSize);