diff --git a/content/html/style/src/nsHTMLStyleSheet.cpp b/content/html/style/src/nsHTMLStyleSheet.cpp
index cf0a1b21cf5d..1a18a44dcc80 100644
--- a/content/html/style/src/nsHTMLStyleSheet.cpp
+++ b/content/html/style/src/nsHTMLStyleSheet.cpp
@@ -45,6 +45,9 @@
#include "nsHTMLContainerFrame.h"
#include "nsINameSpaceManager.h"
#include "nsLayoutAtoms.h"
+#include "nsIDOMHTMLSelectElement.h"
+#include "nsIComboboxControlFrame.h"
+#include "nsIListControlFrame.h"
#ifdef INCLUDE_XUL
#include "nsXULAtoms.h"
@@ -53,6 +56,8 @@
#include "nsToolbarFrame.h"
#endif
+//#define FRAMEBASED_COMPONENTS 1 // This is temporary please leave in for now - rods
+
static NS_DEFINE_IID(kIHTMLStyleSheetIID, NS_IHTML_STYLE_SHEET_IID);
static NS_DEFINE_IID(kIStyleSheetIID, NS_ISTYLE_SHEET_IID);
static NS_DEFINE_IID(kIStyleRuleIID, NS_ISTYLE_RULE_IID);
@@ -61,6 +66,10 @@ static NS_DEFINE_IID(kIHTMLTableCellElementIID, NS_IHTMLTABLECELLELEMENT_IID);
static NS_DEFINE_IID(kIXMLDocumentIID, NS_IXMLDOCUMENT_IID);
static NS_DEFINE_IID(kIWebShellIID, NS_IWEB_SHELL_IID);
+static NS_DEFINE_IID(kIDOMHTMLSelectElementIID, NS_IDOMHTMLSELECTELEMENT_IID);
+static NS_DEFINE_IID(kIComboboxControlFrameIID, NS_ICOMBOBOXCONTROLFRAME_IID);
+static NS_DEFINE_IID(kIListControlFrameIID, NS_ILISTCONTROLFRAME_IID);
+
class HTMLAnchorRule : public nsIStyleRule {
public:
HTMLAnchorRule(nsIHTMLStyleSheet* aSheet);
@@ -423,6 +432,17 @@ protected:
nsIFrame* aParentFrame,
nsIFrame*& aPlaceholderFrame);
+ nsresult ConstructSelectFrame(nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIAtom* aTag,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool & aProcessChildren,
+ PRBool & aIsAbsolutelyPositioned,
+ PRBool & aFrameHasBeenInitialized);
+
nsresult ConstructFrameByTag(nsIPresContext* aPresContext,
nsIContent* aContent,
nsIFrame* aParentFrame,
@@ -491,6 +511,15 @@ protected:
nsIFrame* GetAbsoluteContainingBlock(nsIPresContext* aPresContext,
nsIFrame* aFrame);
+ nsresult InitializeScrollFrame(nsIFrame * aScrollFrame,
+ nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool isAbsolutelyPositioned,
+ PRBool aCreateBlock);
protected:
PRUint32 mInHeap : 1;
PRUint32 mRefCnt : 31;
@@ -1687,6 +1716,98 @@ HTMLStyleSheetImpl::CreatePlaceholderFrameFor(nsIPresContext* aPresContext,
return rv;
}
+nsresult
+HTMLStyleSheetImpl::ConstructSelectFrame(nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIAtom* aTag,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool & aProcessChildren,
+ PRBool & aIsAbsolutelyPositioned,
+ PRBool & aFrameHasBeenInitialized)
+{
+#ifdef FRAMEBASED_COMPONENTS
+ nsresult rv = NS_OK;
+ nsIDOMHTMLSelectElement* select = nsnull;
+ PRBool multiple = PR_FALSE;
+ nsresult result = aContent->QueryInterface(kIDOMHTMLSelectElementIID, (void**)&select);
+ if (NS_OK == result) {
+ result = select->GetMultiple(&multiple); // XXX This is wrong!
+ if (!multiple) {
+ nsIFrame * comboboxFrame;
+ rv = NS_NewComboboxControlFrame(comboboxFrame);
+ nsIComboboxControlFrame* comboBox;
+ if (NS_OK == comboboxFrame->QueryInterface(kIComboboxControlFrameIID, (void**)&comboBox)) {
+
+ nsIFrame * listFrame;
+ rv = NS_NewListControlFrame(listFrame);
+
+ // This is important to do before it is initialized
+ // it tells it that it is in "DropDown Mode"
+ nsIListControlFrame * listControlFrame;
+ if (NS_OK == listFrame->QueryInterface(kIListControlFrameIID, (void**)&listControlFrame)) {
+ listControlFrame->SetComboboxFrame(comboboxFrame);
+ }
+
+ InitializeScrollFrame(listFrame, aPresContext, aContent, comboboxFrame, aStyleContext,
+ aAbsoluteItems, aNewFrame, PR_TRUE, PR_TRUE);
+
+ nsIFrame* placeholderFrame;
+
+ CreatePlaceholderFrameFor(aPresContext, aContent, aNewFrame, aStyleContext,
+ aParentFrame, placeholderFrame);
+
+ // Add the absolutely positioned frame to its containing block's list
+ // of child frames
+ aAbsoluteItems.AddAbsolutelyPositionedChild(aNewFrame);
+
+ listFrame = aNewFrame;
+
+ // This needs to be done "after" the ListFrame has it's ChildList set
+ // because the SetInitChildList intializes the ListBox selection state
+ // and this method initializes the ComboBox's selection state
+ comboBox->SetDropDown(placeholderFrame, listFrame);
+
+ // Set up the Pseudo Style contents
+ nsIStyleContext* visiblePseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownVisible, aStyleContext);
+ nsIStyleContext* hiddenPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownHidden, aStyleContext);
+ nsIStyleContext* outPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownBtnOut, aStyleContext);
+ nsIStyleContext* pressPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownBtnPressed, aStyleContext);
+
+ comboBox->SetDropDownStyleContexts(visiblePseudoStyle, hiddenPseudoStyle);
+ comboBox->SetButtonStyleContexts(outPseudoStyle, pressPseudoStyle);
+
+ aProcessChildren = PR_FALSE;
+ nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, listFrame,
+ aStyleContext, PR_TRUE);
+ aNewFrame = comboboxFrame;
+ }
+
+ } else {
+ nsIFrame * listFrame;
+ rv = NS_NewListControlFrame(listFrame);
+ aNewFrame = listFrame;
+ InitializeScrollFrame(listFrame, aPresContext, aContent, aParentFrame, aStyleContext,
+ aAbsoluteItems, aNewFrame, aIsAbsolutelyPositioned, PR_TRUE);
+ aFrameHasBeenInitialized = PR_TRUE;
+ }
+ NS_RELEASE(select);
+ } else {
+ rv = NS_NewSelectControlFrame(aNewFrame);
+ }
+
+#else
+ nsresult rv = NS_NewSelectControlFrame(aNewFrame);
+#endif
+ return rv;
+}
+
nsresult
HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
nsIContent* aContent,
@@ -1699,6 +1820,7 @@ HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
PRBool processChildren = PR_FALSE; // whether we should process child content
nsresult rv = NS_OK;
PRBool isAbsolutelyPositioned = PR_FALSE;
+ PRBool frameHasBeenInitialized = PR_FALSE;
// Initialize OUT parameter
aNewFrame = nsnull;
@@ -1740,7 +1862,9 @@ HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
rv = NS_NewTextControlFrame(aNewFrame);
}
else if (nsHTMLAtoms::select == aTag) {
- rv = NS_NewSelectControlFrame(aNewFrame);
+ rv = ConstructSelectFrame(aPresContext, aContent, aParentFrame,
+ aTag, aStyleContext, aAbsoluteItems, aNewFrame,
+ processChildren, isAbsolutelyPositioned, frameHasBeenInitialized);
}
else if (nsHTMLAtoms::applet == aTag) {
rv = NS_NewObjectFrame(aNewFrame);
@@ -1794,24 +1918,26 @@ HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
// If we succeeded in creating a frame then initialize it, process its
// children (if requested), and set the initial child list
if (NS_SUCCEEDED(rv) && (nsnull != aNewFrame)) {
- nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
- aParentFrame;
- aNewFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
+ if (!frameHasBeenInitialized) {
+ nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
+ aParentFrame;
+ aNewFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
- // See if we need to create a view, e.g. the frame is absolutely positioned
- nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, aNewFrame,
- aStyleContext, PR_FALSE);
+ // See if we need to create a view, e.g. the frame is absolutely positioned
+ nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, aNewFrame,
+ aStyleContext, PR_FALSE);
- // Process the child content if requested
- nsIFrame* childList = nsnull;
- if (processChildren) {
- rv = ProcessChildren(aPresContext, aContent, aNewFrame, aAbsoluteItems,
- childList);
+ // Process the child content if requested
+ nsIFrame* childList = nsnull;
+ if (processChildren) {
+ rv = ProcessChildren(aPresContext, aContent, aNewFrame, aAbsoluteItems,
+ childList);
+ }
+
+ // Set the frame's initial child list
+ aNewFrame->SetInitialChildList(*aPresContext, nsnull, childList);
}
- // Set the frame's initial child list
- aNewFrame->SetInitialChildList(*aPresContext, nsnull, childList);
-
// If the frame is absolutely positioned then create a placeholder frame
if (isAbsolutelyPositioned) {
nsIFrame* placeholderFrame;
@@ -1949,6 +2075,70 @@ HTMLStyleSheetImpl::ConstructXULFrame(nsIPresContext* aPresContext,
return rv;
}
+#endif
+
+nsresult
+HTMLStyleSheetImpl::InitializeScrollFrame(nsIFrame * scrollFrame,
+ nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool isAbsolutelyPositioned,
+ PRBool aCreateBlock)
+{
+ // Initialize it
+ nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
+ aParentFrame;
+ scrollFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
+
+ // The scroll frame gets the original style context, and the scrolled
+ // frame gets a SCROLLED-CONTENT pseudo element style context that
+ // inherits the background properties
+ nsIStyleContext* scrolledPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::scrolledContentPseudo, aStyleContext);
+
+ // Create an area container for the frame
+ nsIFrame* scrolledFrame;
+ NS_NewAreaFrame(scrolledFrame, NS_BLOCK_SHRINK_WRAP);
+
+ // Initialize the frame and force it to have a view
+ scrolledFrame->Init(*aPresContext, aContent, scrollFrame, scrolledPseudoStyle);
+ nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, scrolledFrame,
+ scrolledPseudoStyle, PR_TRUE);
+ NS_RELEASE(scrolledPseudoStyle);
+
+ // Process children
+ if (isAbsolutelyPositioned) {
+ // The area frame becomes a container for child frames that are
+ // absolutely positioned
+ nsAbsoluteItems absoluteItems(scrolledFrame);
+ nsIFrame* childList;
+ ProcessChildren(aPresContext, aContent, scrolledFrame, absoluteItems,
+ childList);
+
+ // Set the initial child lists
+ scrolledFrame->SetInitialChildList(*aPresContext, nsnull, childList);
+ if (nsnull != absoluteItems.childList) {
+ scrolledFrame->SetInitialChildList(*aPresContext, nsLayoutAtoms::absoluteList,
+ absoluteItems.childList);
+ }
+
+ } else {
+ nsIFrame* childList;
+ ProcessChildren(aPresContext, aContent, scrolledFrame, aAbsoluteItems,
+ childList);
+
+ // Set the initial child lists
+ scrolledFrame->SetInitialChildList(*aPresContext, nsnull, childList);
+ }
+ scrollFrame->SetInitialChildList(*aPresContext, nsnull, scrolledFrame);
+ aNewFrame = scrollFrame;
+
+
+ return NS_OK;
+}
nsresult
HTMLStyleSheetImpl::ConstructTreeFrame(nsIPresContext* aPresContext,
@@ -2180,8 +2370,6 @@ HTMLStyleSheetImpl::ConstructTreeCellFrame(nsIPresContext* aPresContext,
return rv;
}
-#endif
-
nsresult
HTMLStyleSheetImpl::ConstructFrameByDisplayType(nsIPresContext* aPresContext,
const nsStyleDisplay* aDisplay,
@@ -2224,6 +2412,10 @@ HTMLStyleSheetImpl::ConstructFrameByDisplayType(nsIPresContext* aPresConte
NS_NewScrollFrame(scrollFrame);
// Initialize it
+ InitializeScrollFrame(scrollFrame, aPresContext, aContent, aParentFrame, aStyleContext,
+ aAbsoluteItems, aNewFrame, isAbsolutelyPositioned, PR_FALSE);
+
+#if 0 // XXX The following "ifdef" could has been moved to the method "InitializeScrollFrame"
nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
aParentFrame;
scrollFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
@@ -2270,6 +2462,7 @@ HTMLStyleSheetImpl::ConstructFrameByDisplayType(nsIPresContext* aPresConte
}
scrollFrame->SetInitialChildList(*aPresContext, nsnull, scrolledFrame);
aNewFrame = scrollFrame;
+#endif
// See if the frame is absolutely positioned
} else if ((NS_STYLE_POSITION_ABSOLUTE == position->mPosition) &&
@@ -3089,7 +3282,12 @@ ApplyRenderingChangeToTree(nsIPresContext* aPresContext,
view->GetViewManager(viewManager);
}
const nsStyleColor* color;
+ const nsStyleDisplay* disp;
aFrame->GetStyleData(eStyleStruct_Color, (const nsStyleStruct*&) color);
+ aFrame->GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&) disp);
+
+ view->SetVisibility(NS_STYLE_VISIBILITY_HIDDEN == disp->mVisible ?nsViewVisibility_kHide:nsViewVisibility_kShow);
+
viewManager->SetViewOpacity(view, color->mOpacity);
viewManager->UpdateView(view, r, NS_VMREFRESH_NO_SYNC);
diff --git a/layout/html/style/src/nsHTMLStyleSheet.cpp b/layout/html/style/src/nsHTMLStyleSheet.cpp
index cf0a1b21cf5d..1a18a44dcc80 100644
--- a/layout/html/style/src/nsHTMLStyleSheet.cpp
+++ b/layout/html/style/src/nsHTMLStyleSheet.cpp
@@ -45,6 +45,9 @@
#include "nsHTMLContainerFrame.h"
#include "nsINameSpaceManager.h"
#include "nsLayoutAtoms.h"
+#include "nsIDOMHTMLSelectElement.h"
+#include "nsIComboboxControlFrame.h"
+#include "nsIListControlFrame.h"
#ifdef INCLUDE_XUL
#include "nsXULAtoms.h"
@@ -53,6 +56,8 @@
#include "nsToolbarFrame.h"
#endif
+//#define FRAMEBASED_COMPONENTS 1 // This is temporary please leave in for now - rods
+
static NS_DEFINE_IID(kIHTMLStyleSheetIID, NS_IHTML_STYLE_SHEET_IID);
static NS_DEFINE_IID(kIStyleSheetIID, NS_ISTYLE_SHEET_IID);
static NS_DEFINE_IID(kIStyleRuleIID, NS_ISTYLE_RULE_IID);
@@ -61,6 +66,10 @@ static NS_DEFINE_IID(kIHTMLTableCellElementIID, NS_IHTMLTABLECELLELEMENT_IID);
static NS_DEFINE_IID(kIXMLDocumentIID, NS_IXMLDOCUMENT_IID);
static NS_DEFINE_IID(kIWebShellIID, NS_IWEB_SHELL_IID);
+static NS_DEFINE_IID(kIDOMHTMLSelectElementIID, NS_IDOMHTMLSELECTELEMENT_IID);
+static NS_DEFINE_IID(kIComboboxControlFrameIID, NS_ICOMBOBOXCONTROLFRAME_IID);
+static NS_DEFINE_IID(kIListControlFrameIID, NS_ILISTCONTROLFRAME_IID);
+
class HTMLAnchorRule : public nsIStyleRule {
public:
HTMLAnchorRule(nsIHTMLStyleSheet* aSheet);
@@ -423,6 +432,17 @@ protected:
nsIFrame* aParentFrame,
nsIFrame*& aPlaceholderFrame);
+ nsresult ConstructSelectFrame(nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIAtom* aTag,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool & aProcessChildren,
+ PRBool & aIsAbsolutelyPositioned,
+ PRBool & aFrameHasBeenInitialized);
+
nsresult ConstructFrameByTag(nsIPresContext* aPresContext,
nsIContent* aContent,
nsIFrame* aParentFrame,
@@ -491,6 +511,15 @@ protected:
nsIFrame* GetAbsoluteContainingBlock(nsIPresContext* aPresContext,
nsIFrame* aFrame);
+ nsresult InitializeScrollFrame(nsIFrame * aScrollFrame,
+ nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool isAbsolutelyPositioned,
+ PRBool aCreateBlock);
protected:
PRUint32 mInHeap : 1;
PRUint32 mRefCnt : 31;
@@ -1687,6 +1716,98 @@ HTMLStyleSheetImpl::CreatePlaceholderFrameFor(nsIPresContext* aPresContext,
return rv;
}
+nsresult
+HTMLStyleSheetImpl::ConstructSelectFrame(nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIAtom* aTag,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool & aProcessChildren,
+ PRBool & aIsAbsolutelyPositioned,
+ PRBool & aFrameHasBeenInitialized)
+{
+#ifdef FRAMEBASED_COMPONENTS
+ nsresult rv = NS_OK;
+ nsIDOMHTMLSelectElement* select = nsnull;
+ PRBool multiple = PR_FALSE;
+ nsresult result = aContent->QueryInterface(kIDOMHTMLSelectElementIID, (void**)&select);
+ if (NS_OK == result) {
+ result = select->GetMultiple(&multiple); // XXX This is wrong!
+ if (!multiple) {
+ nsIFrame * comboboxFrame;
+ rv = NS_NewComboboxControlFrame(comboboxFrame);
+ nsIComboboxControlFrame* comboBox;
+ if (NS_OK == comboboxFrame->QueryInterface(kIComboboxControlFrameIID, (void**)&comboBox)) {
+
+ nsIFrame * listFrame;
+ rv = NS_NewListControlFrame(listFrame);
+
+ // This is important to do before it is initialized
+ // it tells it that it is in "DropDown Mode"
+ nsIListControlFrame * listControlFrame;
+ if (NS_OK == listFrame->QueryInterface(kIListControlFrameIID, (void**)&listControlFrame)) {
+ listControlFrame->SetComboboxFrame(comboboxFrame);
+ }
+
+ InitializeScrollFrame(listFrame, aPresContext, aContent, comboboxFrame, aStyleContext,
+ aAbsoluteItems, aNewFrame, PR_TRUE, PR_TRUE);
+
+ nsIFrame* placeholderFrame;
+
+ CreatePlaceholderFrameFor(aPresContext, aContent, aNewFrame, aStyleContext,
+ aParentFrame, placeholderFrame);
+
+ // Add the absolutely positioned frame to its containing block's list
+ // of child frames
+ aAbsoluteItems.AddAbsolutelyPositionedChild(aNewFrame);
+
+ listFrame = aNewFrame;
+
+ // This needs to be done "after" the ListFrame has it's ChildList set
+ // because the SetInitChildList intializes the ListBox selection state
+ // and this method initializes the ComboBox's selection state
+ comboBox->SetDropDown(placeholderFrame, listFrame);
+
+ // Set up the Pseudo Style contents
+ nsIStyleContext* visiblePseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownVisible, aStyleContext);
+ nsIStyleContext* hiddenPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownHidden, aStyleContext);
+ nsIStyleContext* outPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownBtnOut, aStyleContext);
+ nsIStyleContext* pressPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownBtnPressed, aStyleContext);
+
+ comboBox->SetDropDownStyleContexts(visiblePseudoStyle, hiddenPseudoStyle);
+ comboBox->SetButtonStyleContexts(outPseudoStyle, pressPseudoStyle);
+
+ aProcessChildren = PR_FALSE;
+ nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, listFrame,
+ aStyleContext, PR_TRUE);
+ aNewFrame = comboboxFrame;
+ }
+
+ } else {
+ nsIFrame * listFrame;
+ rv = NS_NewListControlFrame(listFrame);
+ aNewFrame = listFrame;
+ InitializeScrollFrame(listFrame, aPresContext, aContent, aParentFrame, aStyleContext,
+ aAbsoluteItems, aNewFrame, aIsAbsolutelyPositioned, PR_TRUE);
+ aFrameHasBeenInitialized = PR_TRUE;
+ }
+ NS_RELEASE(select);
+ } else {
+ rv = NS_NewSelectControlFrame(aNewFrame);
+ }
+
+#else
+ nsresult rv = NS_NewSelectControlFrame(aNewFrame);
+#endif
+ return rv;
+}
+
nsresult
HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
nsIContent* aContent,
@@ -1699,6 +1820,7 @@ HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
PRBool processChildren = PR_FALSE; // whether we should process child content
nsresult rv = NS_OK;
PRBool isAbsolutelyPositioned = PR_FALSE;
+ PRBool frameHasBeenInitialized = PR_FALSE;
// Initialize OUT parameter
aNewFrame = nsnull;
@@ -1740,7 +1862,9 @@ HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
rv = NS_NewTextControlFrame(aNewFrame);
}
else if (nsHTMLAtoms::select == aTag) {
- rv = NS_NewSelectControlFrame(aNewFrame);
+ rv = ConstructSelectFrame(aPresContext, aContent, aParentFrame,
+ aTag, aStyleContext, aAbsoluteItems, aNewFrame,
+ processChildren, isAbsolutelyPositioned, frameHasBeenInitialized);
}
else if (nsHTMLAtoms::applet == aTag) {
rv = NS_NewObjectFrame(aNewFrame);
@@ -1794,24 +1918,26 @@ HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
// If we succeeded in creating a frame then initialize it, process its
// children (if requested), and set the initial child list
if (NS_SUCCEEDED(rv) && (nsnull != aNewFrame)) {
- nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
- aParentFrame;
- aNewFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
+ if (!frameHasBeenInitialized) {
+ nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
+ aParentFrame;
+ aNewFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
- // See if we need to create a view, e.g. the frame is absolutely positioned
- nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, aNewFrame,
- aStyleContext, PR_FALSE);
+ // See if we need to create a view, e.g. the frame is absolutely positioned
+ nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, aNewFrame,
+ aStyleContext, PR_FALSE);
- // Process the child content if requested
- nsIFrame* childList = nsnull;
- if (processChildren) {
- rv = ProcessChildren(aPresContext, aContent, aNewFrame, aAbsoluteItems,
- childList);
+ // Process the child content if requested
+ nsIFrame* childList = nsnull;
+ if (processChildren) {
+ rv = ProcessChildren(aPresContext, aContent, aNewFrame, aAbsoluteItems,
+ childList);
+ }
+
+ // Set the frame's initial child list
+ aNewFrame->SetInitialChildList(*aPresContext, nsnull, childList);
}
- // Set the frame's initial child list
- aNewFrame->SetInitialChildList(*aPresContext, nsnull, childList);
-
// If the frame is absolutely positioned then create a placeholder frame
if (isAbsolutelyPositioned) {
nsIFrame* placeholderFrame;
@@ -1949,6 +2075,70 @@ HTMLStyleSheetImpl::ConstructXULFrame(nsIPresContext* aPresContext,
return rv;
}
+#endif
+
+nsresult
+HTMLStyleSheetImpl::InitializeScrollFrame(nsIFrame * scrollFrame,
+ nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool isAbsolutelyPositioned,
+ PRBool aCreateBlock)
+{
+ // Initialize it
+ nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
+ aParentFrame;
+ scrollFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
+
+ // The scroll frame gets the original style context, and the scrolled
+ // frame gets a SCROLLED-CONTENT pseudo element style context that
+ // inherits the background properties
+ nsIStyleContext* scrolledPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::scrolledContentPseudo, aStyleContext);
+
+ // Create an area container for the frame
+ nsIFrame* scrolledFrame;
+ NS_NewAreaFrame(scrolledFrame, NS_BLOCK_SHRINK_WRAP);
+
+ // Initialize the frame and force it to have a view
+ scrolledFrame->Init(*aPresContext, aContent, scrollFrame, scrolledPseudoStyle);
+ nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, scrolledFrame,
+ scrolledPseudoStyle, PR_TRUE);
+ NS_RELEASE(scrolledPseudoStyle);
+
+ // Process children
+ if (isAbsolutelyPositioned) {
+ // The area frame becomes a container for child frames that are
+ // absolutely positioned
+ nsAbsoluteItems absoluteItems(scrolledFrame);
+ nsIFrame* childList;
+ ProcessChildren(aPresContext, aContent, scrolledFrame, absoluteItems,
+ childList);
+
+ // Set the initial child lists
+ scrolledFrame->SetInitialChildList(*aPresContext, nsnull, childList);
+ if (nsnull != absoluteItems.childList) {
+ scrolledFrame->SetInitialChildList(*aPresContext, nsLayoutAtoms::absoluteList,
+ absoluteItems.childList);
+ }
+
+ } else {
+ nsIFrame* childList;
+ ProcessChildren(aPresContext, aContent, scrolledFrame, aAbsoluteItems,
+ childList);
+
+ // Set the initial child lists
+ scrolledFrame->SetInitialChildList(*aPresContext, nsnull, childList);
+ }
+ scrollFrame->SetInitialChildList(*aPresContext, nsnull, scrolledFrame);
+ aNewFrame = scrollFrame;
+
+
+ return NS_OK;
+}
nsresult
HTMLStyleSheetImpl::ConstructTreeFrame(nsIPresContext* aPresContext,
@@ -2180,8 +2370,6 @@ HTMLStyleSheetImpl::ConstructTreeCellFrame(nsIPresContext* aPresContext,
return rv;
}
-#endif
-
nsresult
HTMLStyleSheetImpl::ConstructFrameByDisplayType(nsIPresContext* aPresContext,
const nsStyleDisplay* aDisplay,
@@ -2224,6 +2412,10 @@ HTMLStyleSheetImpl::ConstructFrameByDisplayType(nsIPresContext* aPresConte
NS_NewScrollFrame(scrollFrame);
// Initialize it
+ InitializeScrollFrame(scrollFrame, aPresContext, aContent, aParentFrame, aStyleContext,
+ aAbsoluteItems, aNewFrame, isAbsolutelyPositioned, PR_FALSE);
+
+#if 0 // XXX The following "ifdef" could has been moved to the method "InitializeScrollFrame"
nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
aParentFrame;
scrollFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
@@ -2270,6 +2462,7 @@ HTMLStyleSheetImpl::ConstructFrameByDisplayType(nsIPresContext* aPresConte
}
scrollFrame->SetInitialChildList(*aPresContext, nsnull, scrolledFrame);
aNewFrame = scrollFrame;
+#endif
// See if the frame is absolutely positioned
} else if ((NS_STYLE_POSITION_ABSOLUTE == position->mPosition) &&
@@ -3089,7 +3282,12 @@ ApplyRenderingChangeToTree(nsIPresContext* aPresContext,
view->GetViewManager(viewManager);
}
const nsStyleColor* color;
+ const nsStyleDisplay* disp;
aFrame->GetStyleData(eStyleStruct_Color, (const nsStyleStruct*&) color);
+ aFrame->GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&) disp);
+
+ view->SetVisibility(NS_STYLE_VISIBILITY_HIDDEN == disp->mVisible ?nsViewVisibility_kHide:nsViewVisibility_kShow);
+
viewManager->SetViewOpacity(view, color->mOpacity);
viewManager->UpdateView(view, r, NS_VMREFRESH_NO_SYNC);
diff --git a/layout/style/nsHTMLStyleSheet.cpp b/layout/style/nsHTMLStyleSheet.cpp
index cf0a1b21cf5d..1a18a44dcc80 100644
--- a/layout/style/nsHTMLStyleSheet.cpp
+++ b/layout/style/nsHTMLStyleSheet.cpp
@@ -45,6 +45,9 @@
#include "nsHTMLContainerFrame.h"
#include "nsINameSpaceManager.h"
#include "nsLayoutAtoms.h"
+#include "nsIDOMHTMLSelectElement.h"
+#include "nsIComboboxControlFrame.h"
+#include "nsIListControlFrame.h"
#ifdef INCLUDE_XUL
#include "nsXULAtoms.h"
@@ -53,6 +56,8 @@
#include "nsToolbarFrame.h"
#endif
+//#define FRAMEBASED_COMPONENTS 1 // This is temporary please leave in for now - rods
+
static NS_DEFINE_IID(kIHTMLStyleSheetIID, NS_IHTML_STYLE_SHEET_IID);
static NS_DEFINE_IID(kIStyleSheetIID, NS_ISTYLE_SHEET_IID);
static NS_DEFINE_IID(kIStyleRuleIID, NS_ISTYLE_RULE_IID);
@@ -61,6 +66,10 @@ static NS_DEFINE_IID(kIHTMLTableCellElementIID, NS_IHTMLTABLECELLELEMENT_IID);
static NS_DEFINE_IID(kIXMLDocumentIID, NS_IXMLDOCUMENT_IID);
static NS_DEFINE_IID(kIWebShellIID, NS_IWEB_SHELL_IID);
+static NS_DEFINE_IID(kIDOMHTMLSelectElementIID, NS_IDOMHTMLSELECTELEMENT_IID);
+static NS_DEFINE_IID(kIComboboxControlFrameIID, NS_ICOMBOBOXCONTROLFRAME_IID);
+static NS_DEFINE_IID(kIListControlFrameIID, NS_ILISTCONTROLFRAME_IID);
+
class HTMLAnchorRule : public nsIStyleRule {
public:
HTMLAnchorRule(nsIHTMLStyleSheet* aSheet);
@@ -423,6 +432,17 @@ protected:
nsIFrame* aParentFrame,
nsIFrame*& aPlaceholderFrame);
+ nsresult ConstructSelectFrame(nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIAtom* aTag,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool & aProcessChildren,
+ PRBool & aIsAbsolutelyPositioned,
+ PRBool & aFrameHasBeenInitialized);
+
nsresult ConstructFrameByTag(nsIPresContext* aPresContext,
nsIContent* aContent,
nsIFrame* aParentFrame,
@@ -491,6 +511,15 @@ protected:
nsIFrame* GetAbsoluteContainingBlock(nsIPresContext* aPresContext,
nsIFrame* aFrame);
+ nsresult InitializeScrollFrame(nsIFrame * aScrollFrame,
+ nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool isAbsolutelyPositioned,
+ PRBool aCreateBlock);
protected:
PRUint32 mInHeap : 1;
PRUint32 mRefCnt : 31;
@@ -1687,6 +1716,98 @@ HTMLStyleSheetImpl::CreatePlaceholderFrameFor(nsIPresContext* aPresContext,
return rv;
}
+nsresult
+HTMLStyleSheetImpl::ConstructSelectFrame(nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIAtom* aTag,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool & aProcessChildren,
+ PRBool & aIsAbsolutelyPositioned,
+ PRBool & aFrameHasBeenInitialized)
+{
+#ifdef FRAMEBASED_COMPONENTS
+ nsresult rv = NS_OK;
+ nsIDOMHTMLSelectElement* select = nsnull;
+ PRBool multiple = PR_FALSE;
+ nsresult result = aContent->QueryInterface(kIDOMHTMLSelectElementIID, (void**)&select);
+ if (NS_OK == result) {
+ result = select->GetMultiple(&multiple); // XXX This is wrong!
+ if (!multiple) {
+ nsIFrame * comboboxFrame;
+ rv = NS_NewComboboxControlFrame(comboboxFrame);
+ nsIComboboxControlFrame* comboBox;
+ if (NS_OK == comboboxFrame->QueryInterface(kIComboboxControlFrameIID, (void**)&comboBox)) {
+
+ nsIFrame * listFrame;
+ rv = NS_NewListControlFrame(listFrame);
+
+ // This is important to do before it is initialized
+ // it tells it that it is in "DropDown Mode"
+ nsIListControlFrame * listControlFrame;
+ if (NS_OK == listFrame->QueryInterface(kIListControlFrameIID, (void**)&listControlFrame)) {
+ listControlFrame->SetComboboxFrame(comboboxFrame);
+ }
+
+ InitializeScrollFrame(listFrame, aPresContext, aContent, comboboxFrame, aStyleContext,
+ aAbsoluteItems, aNewFrame, PR_TRUE, PR_TRUE);
+
+ nsIFrame* placeholderFrame;
+
+ CreatePlaceholderFrameFor(aPresContext, aContent, aNewFrame, aStyleContext,
+ aParentFrame, placeholderFrame);
+
+ // Add the absolutely positioned frame to its containing block's list
+ // of child frames
+ aAbsoluteItems.AddAbsolutelyPositionedChild(aNewFrame);
+
+ listFrame = aNewFrame;
+
+ // This needs to be done "after" the ListFrame has it's ChildList set
+ // because the SetInitChildList intializes the ListBox selection state
+ // and this method initializes the ComboBox's selection state
+ comboBox->SetDropDown(placeholderFrame, listFrame);
+
+ // Set up the Pseudo Style contents
+ nsIStyleContext* visiblePseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownVisible, aStyleContext);
+ nsIStyleContext* hiddenPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownHidden, aStyleContext);
+ nsIStyleContext* outPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownBtnOut, aStyleContext);
+ nsIStyleContext* pressPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::dropDownBtnPressed, aStyleContext);
+
+ comboBox->SetDropDownStyleContexts(visiblePseudoStyle, hiddenPseudoStyle);
+ comboBox->SetButtonStyleContexts(outPseudoStyle, pressPseudoStyle);
+
+ aProcessChildren = PR_FALSE;
+ nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, listFrame,
+ aStyleContext, PR_TRUE);
+ aNewFrame = comboboxFrame;
+ }
+
+ } else {
+ nsIFrame * listFrame;
+ rv = NS_NewListControlFrame(listFrame);
+ aNewFrame = listFrame;
+ InitializeScrollFrame(listFrame, aPresContext, aContent, aParentFrame, aStyleContext,
+ aAbsoluteItems, aNewFrame, aIsAbsolutelyPositioned, PR_TRUE);
+ aFrameHasBeenInitialized = PR_TRUE;
+ }
+ NS_RELEASE(select);
+ } else {
+ rv = NS_NewSelectControlFrame(aNewFrame);
+ }
+
+#else
+ nsresult rv = NS_NewSelectControlFrame(aNewFrame);
+#endif
+ return rv;
+}
+
nsresult
HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
nsIContent* aContent,
@@ -1699,6 +1820,7 @@ HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
PRBool processChildren = PR_FALSE; // whether we should process child content
nsresult rv = NS_OK;
PRBool isAbsolutelyPositioned = PR_FALSE;
+ PRBool frameHasBeenInitialized = PR_FALSE;
// Initialize OUT parameter
aNewFrame = nsnull;
@@ -1740,7 +1862,9 @@ HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
rv = NS_NewTextControlFrame(aNewFrame);
}
else if (nsHTMLAtoms::select == aTag) {
- rv = NS_NewSelectControlFrame(aNewFrame);
+ rv = ConstructSelectFrame(aPresContext, aContent, aParentFrame,
+ aTag, aStyleContext, aAbsoluteItems, aNewFrame,
+ processChildren, isAbsolutelyPositioned, frameHasBeenInitialized);
}
else if (nsHTMLAtoms::applet == aTag) {
rv = NS_NewObjectFrame(aNewFrame);
@@ -1794,24 +1918,26 @@ HTMLStyleSheetImpl::ConstructFrameByTag(nsIPresContext* aPresContext,
// If we succeeded in creating a frame then initialize it, process its
// children (if requested), and set the initial child list
if (NS_SUCCEEDED(rv) && (nsnull != aNewFrame)) {
- nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
- aParentFrame;
- aNewFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
+ if (!frameHasBeenInitialized) {
+ nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
+ aParentFrame;
+ aNewFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
- // See if we need to create a view, e.g. the frame is absolutely positioned
- nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, aNewFrame,
- aStyleContext, PR_FALSE);
+ // See if we need to create a view, e.g. the frame is absolutely positioned
+ nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, aNewFrame,
+ aStyleContext, PR_FALSE);
- // Process the child content if requested
- nsIFrame* childList = nsnull;
- if (processChildren) {
- rv = ProcessChildren(aPresContext, aContent, aNewFrame, aAbsoluteItems,
- childList);
+ // Process the child content if requested
+ nsIFrame* childList = nsnull;
+ if (processChildren) {
+ rv = ProcessChildren(aPresContext, aContent, aNewFrame, aAbsoluteItems,
+ childList);
+ }
+
+ // Set the frame's initial child list
+ aNewFrame->SetInitialChildList(*aPresContext, nsnull, childList);
}
- // Set the frame's initial child list
- aNewFrame->SetInitialChildList(*aPresContext, nsnull, childList);
-
// If the frame is absolutely positioned then create a placeholder frame
if (isAbsolutelyPositioned) {
nsIFrame* placeholderFrame;
@@ -1949,6 +2075,70 @@ HTMLStyleSheetImpl::ConstructXULFrame(nsIPresContext* aPresContext,
return rv;
}
+#endif
+
+nsresult
+HTMLStyleSheetImpl::InitializeScrollFrame(nsIFrame * scrollFrame,
+ nsIPresContext* aPresContext,
+ nsIContent* aContent,
+ nsIFrame* aParentFrame,
+ nsIStyleContext* aStyleContext,
+ nsAbsoluteItems& aAbsoluteItems,
+ nsIFrame*& aNewFrame,
+ PRBool isAbsolutelyPositioned,
+ PRBool aCreateBlock)
+{
+ // Initialize it
+ nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
+ aParentFrame;
+ scrollFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
+
+ // The scroll frame gets the original style context, and the scrolled
+ // frame gets a SCROLLED-CONTENT pseudo element style context that
+ // inherits the background properties
+ nsIStyleContext* scrolledPseudoStyle = aPresContext->ResolvePseudoStyleContextFor
+ (aContent, nsHTMLAtoms::scrolledContentPseudo, aStyleContext);
+
+ // Create an area container for the frame
+ nsIFrame* scrolledFrame;
+ NS_NewAreaFrame(scrolledFrame, NS_BLOCK_SHRINK_WRAP);
+
+ // Initialize the frame and force it to have a view
+ scrolledFrame->Init(*aPresContext, aContent, scrollFrame, scrolledPseudoStyle);
+ nsHTMLContainerFrame::CreateViewForFrame(*aPresContext, scrolledFrame,
+ scrolledPseudoStyle, PR_TRUE);
+ NS_RELEASE(scrolledPseudoStyle);
+
+ // Process children
+ if (isAbsolutelyPositioned) {
+ // The area frame becomes a container for child frames that are
+ // absolutely positioned
+ nsAbsoluteItems absoluteItems(scrolledFrame);
+ nsIFrame* childList;
+ ProcessChildren(aPresContext, aContent, scrolledFrame, absoluteItems,
+ childList);
+
+ // Set the initial child lists
+ scrolledFrame->SetInitialChildList(*aPresContext, nsnull, childList);
+ if (nsnull != absoluteItems.childList) {
+ scrolledFrame->SetInitialChildList(*aPresContext, nsLayoutAtoms::absoluteList,
+ absoluteItems.childList);
+ }
+
+ } else {
+ nsIFrame* childList;
+ ProcessChildren(aPresContext, aContent, scrolledFrame, aAbsoluteItems,
+ childList);
+
+ // Set the initial child lists
+ scrolledFrame->SetInitialChildList(*aPresContext, nsnull, childList);
+ }
+ scrollFrame->SetInitialChildList(*aPresContext, nsnull, scrolledFrame);
+ aNewFrame = scrollFrame;
+
+
+ return NS_OK;
+}
nsresult
HTMLStyleSheetImpl::ConstructTreeFrame(nsIPresContext* aPresContext,
@@ -2180,8 +2370,6 @@ HTMLStyleSheetImpl::ConstructTreeCellFrame(nsIPresContext* aPresContext,
return rv;
}
-#endif
-
nsresult
HTMLStyleSheetImpl::ConstructFrameByDisplayType(nsIPresContext* aPresContext,
const nsStyleDisplay* aDisplay,
@@ -2224,6 +2412,10 @@ HTMLStyleSheetImpl::ConstructFrameByDisplayType(nsIPresContext* aPresConte
NS_NewScrollFrame(scrollFrame);
// Initialize it
+ InitializeScrollFrame(scrollFrame, aPresContext, aContent, aParentFrame, aStyleContext,
+ aAbsoluteItems, aNewFrame, isAbsolutelyPositioned, PR_FALSE);
+
+#if 0 // XXX The following "ifdef" could has been moved to the method "InitializeScrollFrame"
nsIFrame* geometricParent = isAbsolutelyPositioned ? aAbsoluteItems.containingBlock :
aParentFrame;
scrollFrame->Init(*aPresContext, aContent, geometricParent, aStyleContext);
@@ -2270,6 +2462,7 @@ HTMLStyleSheetImpl::ConstructFrameByDisplayType(nsIPresContext* aPresConte
}
scrollFrame->SetInitialChildList(*aPresContext, nsnull, scrolledFrame);
aNewFrame = scrollFrame;
+#endif
// See if the frame is absolutely positioned
} else if ((NS_STYLE_POSITION_ABSOLUTE == position->mPosition) &&
@@ -3089,7 +3282,12 @@ ApplyRenderingChangeToTree(nsIPresContext* aPresContext,
view->GetViewManager(viewManager);
}
const nsStyleColor* color;
+ const nsStyleDisplay* disp;
aFrame->GetStyleData(eStyleStruct_Color, (const nsStyleStruct*&) color);
+ aFrame->GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&) disp);
+
+ view->SetVisibility(NS_STYLE_VISIBILITY_HIDDEN == disp->mVisible ?nsViewVisibility_kHide:nsViewVisibility_kShow);
+
viewManager->SetViewOpacity(view, color->mOpacity);
viewManager->UpdateView(view, r, NS_VMREFRESH_NO_SYNC);