Bug 1370034 - Add nsIWidget::SetWindowOpacity and implement it on Mac. r?spohl
MozReview-Commit-ID: ILqHQuQ4whl
--- a/widget/cocoa/nsCocoaWindow.h
+++ b/widget/cocoa/nsCocoaWindow.h
@@ -310,16 +310,17 @@ public:
nsEventStatus& aStatus) override;
virtual void CaptureRollupEvents(nsIRollupListener * aListener,
bool aDoCapture) override;
virtual MOZ_MUST_USE nsresult GetAttention(int32_t aCycleCount) override;
virtual bool HasPendingInputEvent() override;
virtual nsTransparencyMode GetTransparencyMode() override;
virtual void SetTransparencyMode(nsTransparencyMode aMode) override;
virtual void SetWindowShadowStyle(int32_t aStyle) override;
+ virtual void SetWindowOpacity(float aOpacity) override;
virtual void SetShowsToolbarButton(bool aShow) override;
virtual void SetShowsFullScreenButton(bool aShow) override;
virtual void SetWindowAnimationType(WindowAnimationType aType) override;
virtual void SetDrawsTitle(bool aDrawTitle) override;
virtual void SetUseBrightTitlebarForeground(bool aBrightForeground) override;
virtual nsresult SetNonClientMargins(LayoutDeviceIntMargin& aMargins) override;
virtual void SetWindowTitlebarColor(nscolor aColor, bool aActive) override;
virtual void SetDrawsInTitlebar(bool aState) override;
--- a/widget/cocoa/nsCocoaWindow.mm
+++ b/widget/cocoa/nsCocoaWindow.mm
@@ -2159,16 +2159,30 @@ nsCocoaWindow::SetWindowShadowStyle(int3
[mWindow setUseMenuStyle:(aStyle == NS_STYLE_WINDOW_SHADOW_MENU)];
AdjustWindowShadow();
SetWindowBackgroundBlur();
NS_OBJC_END_TRY_ABORT_BLOCK;
}
+void
+nsCocoaWindow::SetWindowOpacity(float aOpacity)
+{
+ NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
+
+ if (!mWindow) {
+ return;
+ }
+
+ [mWindow setAlphaValue:(CGFloat)aOpacity];
+
+ NS_OBJC_END_TRY_ABORT_BLOCK;
+}
+
void nsCocoaWindow::SetShowsToolbarButton(bool aShow)
{
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
if (mWindow)
[mWindow setShowsToolbarButton:aShow];
NS_OBJC_END_TRY_ABORT_BLOCK;
--- a/widget/nsIWidget.h
+++ b/widget/nsIWidget.h
@@ -1100,16 +1100,24 @@ class nsIWidget : public nsISupports
/**
* Set the shadow style of the window.
*
* Ignored on child widgets and on non-Mac platforms.
*/
virtual void SetWindowShadowStyle(int32_t aStyle) = 0;
+ /**
+ * Set the opacity of the window.
+ * Values need to be between 0.0f (invisible) and 1.0f (fully opaque).
+ *
+ * Ignored on child widgets and on non-Mac platforms.
+ */
+ virtual void SetWindowOpacity(float aOpacity) {}
+
/*
* On Mac OS X, this method shows or hides the pill button in the titlebar
* that's used to collapse the toolbar.
*
* Ignored on child widgets and on non-Mac platforms.
*/
virtual void SetShowsToolbarButton(bool aShow) = 0;