author | Karl Tomlinson <karlt+@karlt.net> |
Fri, 11 Jun 2010 10:53:01 +1200 | |
changeset 43486 | 5c70615b4ff4a51b7ffa8e17bb8271a5357d0007 |
parent 43485 | ce0bec337cdde9e1e01276b63846393d9befc91f |
child 43487 | ba0db81cc412be0182d83da4bf76f13ebe976223 |
push id | 13732 |
push user | ktomlinson@mozilla.com |
push date | Thu, 10 Jun 2010 22:53:40 +0000 |
treeherder | mozilla-central@ba0db81cc412 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
milestone | 1.9.3a6pre |
backs out | ce0bec337cdde9e1e01276b63846393d9befc91f |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/gfx/public/nsITheme.h +++ b/gfx/public/nsITheme.h @@ -54,17 +54,18 @@ class nsIRenderingContext; class nsIDeviceContext; class nsIFrame; class nsIContent; class nsIAtom; // IID for the nsITheme interface // {887e8902-db6b-41b4-8481-a80f49c5a93a} #define NS_ITHEME_IID \ -{ 0x23db7c13, 0x873d, 0x4fb5, { 0xaf, 0x29, 0xc1, 0xe9, 0xed, 0x91, 0x23, 0xf9 } } +{ 0x887e8902, 0xdb6b, 0x41b4, { 0x84, 0x81, 0xa8, 0x0f, 0x49, 0xc5, 0xa9, 0x3a } } + // {D930E29B-6909-44e5-AB4B-AF10D6923705} #define NS_THEMERENDERER_CID \ { 0xd930e29b, 0x6909, 0x44e5, { 0xab, 0x4b, 0xaf, 0x10, 0xd6, 0x92, 0x37, 0x5 } } enum nsTransparencyMode { eTransparencyOpaque = 0, // Fully opaque eTransparencyTransparent, // Parts of the window may be transparent eTransparencyGlass // Transparent parts of the window have Vista AeroGlass effect applied @@ -133,28 +134,17 @@ public: * widget. */ NS_IMETHOD GetMinimumWidgetSize(nsIRenderingContext* aContext, nsIFrame* aFrame, PRUint8 aWidgetType, nsIntSize* aResult, PRBool* aIsOverridable)=0; - - enum Transparency { - eOpaque = 0, - eTransparent, - eUnknownTransparency - }; - - /** - * Returns what we know about the transparency of the widget. - */ - virtual Transparency GetWidgetTransparency(nsIFrame* aFrame, PRUint8 aWidgetType) - { return eUnknownTransparency; } + virtual nsTransparencyMode GetWidgetTransparency(PRUint8 aWidgetType)=0; NS_IMETHOD WidgetStateChanged(nsIFrame* aFrame, PRUint8 aWidgetType, nsIAtom* aAttribute, PRBool* aShouldRepaint)=0; NS_IMETHOD ThemeChanged()=0; /** * Can the nsITheme implementation handle this widget?
--- a/layout/base/nsDisplayList.cpp +++ b/layout/base/nsDisplayList.cpp @@ -670,17 +670,17 @@ static PRBool RoundedRectContainsRect(co return PR_FALSE; } PRBool nsDisplayBackground::IsOpaque(nsDisplayListBuilder* aBuilder) { // theme background overrides any other background if (mIsThemed) - return mThemeTransparency == nsITheme::eOpaque; + return PR_FALSE; nsStyleContext *bgSC; if (!nsCSSRendering::FindBackground(mFrame->PresContext(), mFrame, &bgSC)) return PR_FALSE; const nsStyleBackground* bg = bgSC->GetStyleBackground(); const nsStyleBackground::Layer& bottomLayer = bg->BottomLayer();
--- a/layout/base/nsDisplayList.h +++ b/layout/base/nsDisplayList.h @@ -1252,17 +1252,17 @@ private: }; /** * The standard display item to paint the CSS background of a frame. */ class nsDisplayBackground : public nsDisplayItem { public: nsDisplayBackground(nsIFrame* aFrame) : nsDisplayItem(aFrame) { - mIsThemed = mFrame->IsThemed(&mThemeTransparency); + mIsThemed = mFrame->IsThemed(); MOZ_COUNT_CTOR(nsDisplayBackground); } #ifdef NS_BUILD_REFCNT_LOGGING virtual ~nsDisplayBackground() { MOZ_COUNT_DTOR(nsDisplayBackground); } #endif @@ -1273,19 +1273,18 @@ public: } virtual PRBool IsOpaque(nsDisplayListBuilder* aBuilder); virtual PRBool IsVaryingRelativeToMovingFrame(nsDisplayListBuilder* aBuilder); virtual PRBool IsUniform(nsDisplayListBuilder* aBuilder, nscolor* aColor); virtual nsRect GetBounds(nsDisplayListBuilder* aBuilder); virtual void Paint(nsDisplayListBuilder* aBuilder, nsIRenderingContext* aCtx); NS_DISPLAY_DECL_NAME("Background") private: - /* Used to cache mFrame->IsThemed() since it isn't a cheap call */ - PRPackedBool mIsThemed; - nsITheme::Transparency mThemeTransparency; + /* Used to cache mFrame->IsThemed() since it isn't a cheap call */ + PRPackedBool mIsThemed; }; /** * The standard display item to paint the outer CSS box-shadows of a frame. */ class nsDisplayBoxShadowOuter : public nsDisplayItem { public: nsDisplayBoxShadowOuter(nsIFrame* aFrame) : nsDisplayItem(aFrame) {
--- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -3211,21 +3211,19 @@ nsLayoutUtils::HasNonZeroCornerOnSide(co nsLayoutUtils::GetFrameTransparency(nsIFrame* aBackgroundFrame, nsIFrame* aCSSRootFrame) { if (aCSSRootFrame->GetStyleContext()->GetStyleDisplay()->mOpacity < 1.0f) return eTransparencyTransparent; if (HasNonZeroCorner(aCSSRootFrame->GetStyleContext()->GetStyleBorder()->mBorderRadius)) return eTransparencyTransparent; - nsITheme::Transparency transparency; + nsTransparencyMode transparency; if (aCSSRootFrame->IsThemed(&transparency)) - return transparency == nsITheme::eTransparent - ? eTransparencyTransparent - : eTransparencyOpaque; + return transparency; if (aCSSRootFrame->GetStyleDisplay()->mAppearance == NS_THEME_WIN_GLASS) return eTransparencyGlass; // We need an uninitialized window to be treated as opaque because // doing otherwise breaks window display effects on some platforms, // specifically Vista. (bug 450322) if (aBackgroundFrame->GetType() == nsGkAtoms::viewportFrame &&
--- a/layout/generic/nsIFrame.h +++ b/layout/generic/nsIFrame.h @@ -992,30 +992,29 @@ public: /** * Get the preferred caret color at the offset. * * @param aOffset is offset of the content. */ virtual nscolor GetCaretColorAt(PRInt32 aOffset); - - PRBool IsThemed(nsITheme::Transparency* aTransparencyState = nsnull) { - return IsThemed(GetStyleDisplay(), aTransparencyState); + PRBool IsThemed(nsTransparencyMode* aTransparencyMode = nsnull) { + return IsThemed(GetStyleDisplay(), aTransparencyMode); } PRBool IsThemed(const nsStyleDisplay* aDisp, - nsITheme::Transparency* aTransparencyState = nsnull) { + nsTransparencyMode* aTransparencyMode = nsnull) { if (!aDisp->mAppearance) return PR_FALSE; nsPresContext* pc = PresContext(); nsITheme *theme = pc->GetTheme(); if(!theme || !theme->ThemeSupportsWidget(pc, this, aDisp->mAppearance)) return PR_FALSE; - if (aTransparencyState) { - *aTransparencyState = theme->GetWidgetTransparency(this, aDisp->mAppearance); + if (aTransparencyMode) { + *aTransparencyMode = theme->GetWidgetTransparency(aDisp->mAppearance); } return PR_TRUE; } /** * Builds a display list for the content represented by this frame, * treating this frame as the root of a stacking context. * @param aDirtyRect content outside this rectangle can be ignored; the
--- a/widget/src/cocoa/nsNativeThemeCocoa.h +++ b/widget/src/cocoa/nsNativeThemeCocoa.h @@ -85,17 +85,17 @@ public: nsIntSize* aResult, PRBool* aIsOverridable); NS_IMETHOD WidgetStateChanged(nsIFrame* aFrame, PRUint8 aWidgetType, nsIAtom* aAttribute, PRBool* aShouldRepaint); NS_IMETHOD ThemeChanged(); PRBool ThemeSupportsWidget(nsPresContext* aPresContext, nsIFrame* aFrame, PRUint8 aWidgetType); PRBool WidgetIsContainer(PRUint8 aWidgetType); PRBool ThemeDrawsFocusForWidget(nsPresContext* aPresContext, nsIFrame* aFrame, PRUint8 aWidgetType); PRBool ThemeNeedsComboboxDropmarker(); - virtual Transparency GetWidgetTransparency(nsIFrame* aFrame, PRUint8 aWidgetType); + virtual nsTransparencyMode GetWidgetTransparency(PRUint8 aWidgetType); protected: nsresult GetSystemColor(PRUint8 aWidgetType, nsILookAndFeel::nsColorID& aColorID); nsresult GetSystemFont(PRUint8 aWidgetType, nsSystemFontID& aFont); nsIntMargin RTLAwareMargin(const nsIntMargin& aMargin, nsIFrame* aFrame); // HITheme drawing routines
--- a/widget/src/cocoa/nsNativeThemeCocoa.mm +++ b/widget/src/cocoa/nsNativeThemeCocoa.mm @@ -2475,17 +2475,17 @@ nsNativeThemeCocoa::ThemeDrawsFocusForWi } PRBool nsNativeThemeCocoa::ThemeNeedsComboboxDropmarker() { return PR_FALSE; } -nsITheme::Transparency -nsNativeThemeCocoa::GetWidgetTransparency(nsIFrame* aFrame, PRUint8 aWidgetType) +nsTransparencyMode +nsNativeThemeCocoa::GetWidgetTransparency(PRUint8 aWidgetType) { if (aWidgetType == NS_THEME_MENUPOPUP || aWidgetType == NS_THEME_TOOLTIP) - return eTransparent; + return eTransparencyTransparent; - return eUnknownTransparency; + return eTransparencyOpaque; }
--- a/widget/src/gtk2/nsNativeThemeGTK.cpp +++ b/widget/src/gtk2/nsNativeThemeGTK.cpp @@ -1337,8 +1337,14 @@ nsNativeThemeGTK::ThemeDrawsFocusForWidg return PR_FALSE; } PRBool nsNativeThemeGTK::ThemeNeedsComboboxDropmarker() { return PR_FALSE; } + +nsTransparencyMode +nsNativeThemeGTK::GetWidgetTransparency(PRUint8 aWidgetType) +{ + return eTransparencyOpaque; +}
--- a/widget/src/gtk2/nsNativeThemeGTK.h +++ b/widget/src/gtk2/nsNativeThemeGTK.h @@ -87,16 +87,18 @@ public: NS_IMETHOD_(PRBool) WidgetIsContainer(PRUint8 aWidgetType); NS_IMETHOD_(PRBool) ThemeDrawsFocusForWidget(nsPresContext* aPresContext, nsIFrame* aFrame, PRUint8 aWidgetType); PRBool ThemeNeedsComboboxDropmarker(); + virtual nsTransparencyMode GetWidgetTransparency(PRUint8 aWidgetType); + nsNativeThemeGTK(); virtual ~nsNativeThemeGTK(); private: PRBool GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame, GtkThemeWidgetType& aGtkWidgetType, GtkWidgetState* aState, gint* aWidgetFlags);
--- a/widget/src/qt/nsNativeThemeQt.cpp +++ b/widget/src/qt/nsNativeThemeQt.cpp @@ -622,16 +622,22 @@ nsNativeThemeQt::ThemeDrawsFocusForWidge } PRBool nsNativeThemeQt::ThemeNeedsComboboxDropmarker() { return PR_TRUE; } +nsTransparencyMode +nsNativeThemeQt::GetWidgetTransparency(PRUint8 aWidgetType) +{ + return eTransparencyOpaque; +} + void nsNativeThemeQt::InitButtonStyle(PRUint8 aWidgetType, nsIFrame* aFrame, QRect rect, QStyleOptionButton &opt) { PRInt32 eventState = GetContentState(aFrame, aWidgetType);
--- a/widget/src/qt/nsNativeThemeQt.h +++ b/widget/src/qt/nsNativeThemeQt.h @@ -94,16 +94,18 @@ public: PRUint8 aWidgetType, nsIntMargin* aResult); NS_IMETHOD_(PRBool) ThemeDrawsFocusForWidget(nsPresContext* aPresContext, nsIFrame* aFrame, PRUint8 aWidgetType); PRBool ThemeNeedsComboboxDropmarker(); + virtual nsTransparencyMode GetWidgetTransparency(PRUint8 aWidgetType); + nsNativeThemeQt(); virtual ~nsNativeThemeQt(); private: inline nsresult DrawWidgetBackground(QPainter *qPainter, nsIRenderingContext* aContext, nsIFrame* aFrame,
--- a/widget/src/windows/nsNativeThemeWin.cpp +++ b/widget/src/windows/nsNativeThemeWin.cpp @@ -392,23 +392,16 @@ nsNativeThemeWin::IsMenuActive(nsIFrame nsIContent* content = aFrame->GetContent(); if (content->IsXUL() && content->NodeInfo()->Equals(nsWidgetAtoms::richlistitem)) return CheckBooleanAttr(aFrame, nsWidgetAtoms::selected); return CheckBooleanAttr(aFrame, nsWidgetAtoms::mozmenuactive); } -/** - * aPart is filled in with the UXTheme part code. On return, values > 0 - * are the actual UXTheme part code; -1 means the widget will be drawn by - * us; 0 means that we should use part code 0, which isn't a real part code - * but elicits some kind of default behaviour from UXTheme when drawing - * (but isThemeBackgroundPartiallyTransparent may not work). - */ nsresult nsNativeThemeWin::GetThemePartAndState(nsIFrame* aFrame, PRUint8 aWidgetType, PRInt32& aPart, PRInt32& aState) { if (!nsUXThemeData::sIsVistaOrLater) { // See GetTheme if (aWidgetType == NS_THEME_DROPDOWN) aWidgetType = NS_THEME_TEXTFIELD; @@ -1778,38 +1771,20 @@ nsNativeThemeWin::ThemeDrawsFocusForWidg } PRBool nsNativeThemeWin::ThemeNeedsComboboxDropmarker() { return PR_TRUE; } -nsITheme::Transparency -nsNativeThemeWin::GetWidgetTransparency(nsIFrame* aFrame, PRUint8 aWidgetType) +nsTransparencyMode +nsNativeThemeWin::GetWidgetTransparency(PRUint8 aWidgetType) { - HANDLE theme = GetTheme(aWidgetType); - // For the classic theme we don't really have a way of knowing - if (!theme) - return eUnknownTransparency; - - PRInt32 part, state; - nsresult rv = GetThemePartAndState(aFrame, aWidgetType, part, state); - // Fail conservatively - NS_ENSURE_SUCCESS(rv, eUnknownTransparency); - - if (part <= 0) { - // Not a real part code, so isThemeBackgroundPartiallyTransparent may - // not work, so don't call it. - return eUnknownTransparency; - } - - if (nsUXThemeData::isThemeBackgroundPartiallyTransparent(theme, part, state)) - return eTransparent; - return eOpaque; + return eTransparencyOpaque; } /* Windows 9x/NT/2000/Classic XP Theme Support */ PRBool nsNativeThemeWin::ClassicThemeSupportsWidget(nsPresContext* aPresContext, nsIFrame* aFrame, PRUint8 aWidgetType)
--- a/widget/src/windows/nsNativeThemeWin.h +++ b/widget/src/windows/nsNativeThemeWin.h @@ -73,17 +73,17 @@ public: PRUint8 aWidgetType, nsRect* aOverflowRect); NS_IMETHOD GetMinimumWidgetSize(nsIRenderingContext* aContext, nsIFrame* aFrame, PRUint8 aWidgetType, nsIntSize* aResult, PRBool* aIsOverridable); - virtual Transparency GetWidgetTransparency(nsIFrame* aFrame, PRUint8 aWidgetType); + virtual nsTransparencyMode GetWidgetTransparency(PRUint8 aWidgetType); NS_IMETHOD WidgetStateChanged(nsIFrame* aFrame, PRUint8 aWidgetType, nsIAtom* aAttribute, PRBool* aShouldRepaint); NS_IMETHOD ThemeChanged(); PRBool ThemeSupportsWidget(nsPresContext* aPresContext, nsIFrame* aFrame,
--- a/widget/src/windows/nsUXThemeData.cpp +++ b/widget/src/windows/nsUXThemeData.cpp @@ -78,17 +78,16 @@ nsUXThemeData::GetThemeContentRectPtr ns nsUXThemeData::GetThemeBackgroundRegionPtr nsUXThemeData::getThemeBackgroundRegion = NULL; nsUXThemeData::GetThemePartSizePtr nsUXThemeData::getThemePartSize = NULL; nsUXThemeData::GetThemeSysFontPtr nsUXThemeData::getThemeSysFont = NULL; nsUXThemeData::GetThemeColorPtr nsUXThemeData::getThemeColor = NULL; nsUXThemeData::GetThemeMarginsPtr nsUXThemeData::getThemeMargins = NULL; nsUXThemeData::IsAppThemedPtr nsUXThemeData::isAppThemed = NULL; nsUXThemeData::GetCurrentThemeNamePtr nsUXThemeData::getCurrentThemeName = NULL; nsUXThemeData::GetThemeSysColorPtr nsUXThemeData::getThemeSysColor = NULL; -nsUXThemeData::IsThemeBackgroundPartiallyTransparentPtr nsUXThemeData::isThemeBackgroundPartiallyTransparent = NULL; #if MOZ_WINSDK_TARGETVER >= MOZ_NTDDI_LONGHORN nsUXThemeData::DwmExtendFrameIntoClientAreaProc nsUXThemeData::dwmExtendFrameIntoClientAreaPtr = NULL; nsUXThemeData::DwmIsCompositionEnabledProc nsUXThemeData::dwmIsCompositionEnabledPtr = NULL; nsUXThemeData::DwmSetIconicThumbnailProc nsUXThemeData::dwmSetIconicThumbnailPtr = NULL; nsUXThemeData::DwmSetIconicLivePreviewBitmapProc nsUXThemeData::dwmSetIconicLivePreviewBitmapPtr = NULL; nsUXThemeData::DwmSetWindowAttributeProc nsUXThemeData::dwmSetWindowAttributePtr = NULL; nsUXThemeData::DwmInvalidateIconicBitmapsProc nsUXThemeData::dwmInvalidateIconicBitmapsPtr = NULL; @@ -120,17 +119,16 @@ nsUXThemeData::Initialize() getThemeBackgroundRegion = (GetThemeBackgroundRegionPtr)GetProcAddress(sThemeDLL, "GetThemeBackgroundRegion"); getThemePartSize = (GetThemePartSizePtr)GetProcAddress(sThemeDLL, "GetThemePartSize"); getThemeSysFont = (GetThemeSysFontPtr)GetProcAddress(sThemeDLL, "GetThemeSysFont"); getThemeColor = (GetThemeColorPtr)GetProcAddress(sThemeDLL, "GetThemeColor"); getThemeMargins = (GetThemeMarginsPtr)GetProcAddress(sThemeDLL, "GetThemeMargins"); isAppThemed = (IsAppThemedPtr)GetProcAddress(sThemeDLL, "IsAppThemed"); getCurrentThemeName = (GetCurrentThemeNamePtr)GetProcAddress(sThemeDLL, "GetCurrentThemeName"); getThemeSysColor = (GetThemeSysColorPtr)GetProcAddress(sThemeDLL, "GetThemeSysColor"); - isThemeBackgroundPartiallyTransparent = (IsThemeBackgroundPartiallyTransparentPtr)GetProcAddress(sThemeDLL, "IsThemeBackgroundPartiallyTransparent"); } #if MOZ_WINSDK_TARGETVER >= MOZ_NTDDI_LONGHORN sDwmDLL = ::LoadLibraryW(kDwmLibraryName); if(sDwmDLL) { dwmExtendFrameIntoClientAreaPtr = (DwmExtendFrameIntoClientAreaProc)::GetProcAddress(sDwmDLL, "DwmExtendFrameIntoClientArea"); dwmIsCompositionEnabledPtr = (DwmIsCompositionEnabledProc)::GetProcAddress(sDwmDLL, "DwmIsCompositionEnabled"); dwmSetIconicThumbnailPtr = (DwmSetIconicThumbnailProc)::GetProcAddress(sDwmDLL, "DwmSetIconicThumbnail"); dwmSetIconicLivePreviewBitmapPtr = (DwmSetIconicLivePreviewBitmapProc)::GetProcAddress(sDwmDLL, "DwmSetIconicLivePreviewBitmap");
--- a/widget/src/windows/nsUXThemeData.h +++ b/widget/src/windows/nsUXThemeData.h @@ -148,32 +148,30 @@ public: typedef HRESULT (WINAPI*GetThemeMarginsPtr)(HANDLE hTheme, HDC hdc, int iPartId, int iStateid, int iPropId, LPRECT prc, MARGINS *pMargins); typedef BOOL (WINAPI*IsAppThemedPtr)(VOID); typedef HRESULT (WINAPI*GetCurrentThemeNamePtr)(LPWSTR pszThemeFileName, int dwMaxNameChars, LPWSTR pszColorBuff, int cchMaxColorChars, LPWSTR pszSizeBuff, int cchMaxSizeChars); typedef COLORREF (WINAPI*GetThemeSysColorPtr)(HANDLE hTheme, int iColorID); - typedef BOOL (WINAPI*IsThemeBackgroundPartiallyTransparentPtr)(HANDLE hTheme, int iPartId, int iStateId); static OpenThemeDataPtr openTheme; static CloseThemeDataPtr closeTheme; static DrawThemeBackgroundPtr drawThemeBG; static DrawThemeEdgePtr drawThemeEdge; static GetThemeContentRectPtr getThemeContentRect; static GetThemeBackgroundRegionPtr getThemeBackgroundRegion; static GetThemePartSizePtr getThemePartSize; static GetThemeSysFontPtr getThemeSysFont; static GetThemeColorPtr getThemeColor; static GetThemeMarginsPtr getThemeMargins; static IsAppThemedPtr isAppThemed; static GetCurrentThemeNamePtr getCurrentThemeName; static GetThemeSysColorPtr getThemeSysColor; - static IsThemeBackgroundPartiallyTransparentPtr isThemeBackgroundPartiallyTransparent; #if MOZ_WINSDK_TARGETVER >= MOZ_NTDDI_LONGHORN // dwmapi.dll function typedefs and declarations typedef HRESULT (WINAPI*DwmExtendFrameIntoClientAreaProc)(HWND hWnd, const MARGINS *pMarInset); typedef HRESULT (WINAPI*DwmIsCompositionEnabledProc)(BOOL *pfEnabled); typedef HRESULT (WINAPI*DwmSetIconicThumbnailProc)(HWND hWnd, HBITMAP hBitmap, DWORD dwSITFlags); typedef HRESULT (WINAPI*DwmSetIconicLivePreviewBitmapProc)(HWND hWnd, HBITMAP hBitmap, POINT *pptClient, DWORD dwSITFlags); typedef HRESULT (WINAPI*DwmSetWindowAttributeProc)(HWND hWnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);