From 57f0f6ee6dc151dff510a3da914197beb3e2f3fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Mon, 1 Apr 2024 19:50:44 +0000 Subject: [PATCH] Bug 1888781 - Allow using behind-window titlebar transparency behind a pref. r=mstange,mac-reviewers UX initially pointed to https://github.com/zvuc/firefox-macos-native-tabbar/ which uses this kind of effect. That's not the correct material but seems trivial to provide it for experimentation purposes. Differential Revision: https://phabricator.services.mozilla.com/D206186 --- modules/libpref/init/StaticPrefList.yaml | 5 +++++ widget/cocoa/VibrancyManager.mm | 18 +++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 24fcb663dabb..df89d057f440 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -16000,6 +16000,11 @@ type: RelaxedAtomicBool value: true mirror: always + +- name: widget.macos.titlebar-blend-mode.behind-window + type: RelaxedAtomicBool + value: false + mirror: always #endif # Whether native GTK global menubar support is enabled. diff --git a/widget/cocoa/VibrancyManager.mm b/widget/cocoa/VibrancyManager.mm index 01de8945d2e5..6062acb93131 100644 --- a/widget/cocoa/VibrancyManager.mm +++ b/widget/cocoa/VibrancyManager.mm @@ -9,6 +9,7 @@ #import #include "nsChildView.h" +#include "mozilla/StaticPrefs_widget.h" using namespace mozilla; @@ -48,6 +49,19 @@ static NSVisualEffectMaterial VisualEffectMaterialForVibrancyType( } } +static NSVisualEffectBlendingMode VisualEffectBlendingModeForVibrancyType( + VibrancyType aType) { + switch (aType) { + case VibrancyType::TOOLTIP: + case VibrancyType::MENU: + return NSVisualEffectBlendingModeBehindWindow; + case VibrancyType::TITLEBAR: + return StaticPrefs::widget_macos_titlebar_blend_mode_behind_window() + ? NSVisualEffectBlendingModeBehindWindow + : NSVisualEffectBlendingModeWithinWindow; + } +} + @implementation MOZVibrantView - (instancetype)initWithFrame:(NSRect)aRect vibrancyType:(VibrancyType)aType { @@ -57,10 +71,8 @@ static NSVisualEffectMaterial VisualEffectMaterialForVibrancyType( self.appearance = nil; self.state = VisualEffectStateForVibrancyType(mType); self.material = VisualEffectMaterialForVibrancyType(mType); + self.blendingMode = VisualEffectBlendingModeForVibrancyType(mType); self.emphasized = NO; - self.blendingMode = aType == VibrancyType::TITLEBAR - ? NSVisualEffectBlendingModeWithinWindow - : NSVisualEffectBlendingModeBehindWindow; return self; }