fix: recalibrate simpleFullscreen when display metrics change (#28150)
* fix: recalibrate simpleFullscreen when display metrics change * Address review feedback * fix: compilation issues * Address feedback from review
This commit is contained in:
parent
b045d42b0e
commit
fdc2e2bc57
3 changed files with 31 additions and 1 deletions
|
@ -207,6 +207,7 @@ class NativeWindow : public base::SupportsUserData,
|
||||||
virtual void SetTrafficLightPosition(base::Optional<gfx::Point> position) = 0;
|
virtual void SetTrafficLightPosition(base::Optional<gfx::Point> position) = 0;
|
||||||
virtual base::Optional<gfx::Point> GetTrafficLightPosition() const = 0;
|
virtual base::Optional<gfx::Point> GetTrafficLightPosition() const = 0;
|
||||||
virtual void RedrawTrafficLights() = 0;
|
virtual void RedrawTrafficLights() = 0;
|
||||||
|
virtual void UpdateFrame() = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Touchbar API
|
// Touchbar API
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#include "base/mac/scoped_nsobject.h"
|
#include "base/mac/scoped_nsobject.h"
|
||||||
#include "shell/browser/native_window.h"
|
#include "shell/browser/native_window.h"
|
||||||
|
#include "ui/display/display_observer.h"
|
||||||
#include "ui/native_theme/native_theme_observer.h"
|
#include "ui/native_theme/native_theme_observer.h"
|
||||||
#include "ui/views/controls/native/native_view_host.h"
|
#include "ui/views/controls/native/native_view_host.h"
|
||||||
|
|
||||||
|
@ -27,7 +28,9 @@ namespace electron {
|
||||||
|
|
||||||
class RootViewMac;
|
class RootViewMac;
|
||||||
|
|
||||||
class NativeWindowMac : public NativeWindow, public ui::NativeThemeObserver {
|
class NativeWindowMac : public NativeWindow,
|
||||||
|
public ui::NativeThemeObserver,
|
||||||
|
public display::DisplayObserver {
|
||||||
public:
|
public:
|
||||||
NativeWindowMac(const gin_helper::Dictionary& options, NativeWindow* parent);
|
NativeWindowMac(const gin_helper::Dictionary& options, NativeWindow* parent);
|
||||||
~NativeWindowMac() override;
|
~NativeWindowMac() override;
|
||||||
|
@ -124,6 +127,7 @@ class NativeWindowMac : public NativeWindow, public ui::NativeThemeObserver {
|
||||||
void SetTrafficLightPosition(base::Optional<gfx::Point> position) override;
|
void SetTrafficLightPosition(base::Optional<gfx::Point> position) override;
|
||||||
base::Optional<gfx::Point> GetTrafficLightPosition() const override;
|
base::Optional<gfx::Point> GetTrafficLightPosition() const override;
|
||||||
void RedrawTrafficLights() override;
|
void RedrawTrafficLights() override;
|
||||||
|
void UpdateFrame() override;
|
||||||
void SetTouchBar(
|
void SetTouchBar(
|
||||||
std::vector<gin_helper::PersistentDictionary> items) override;
|
std::vector<gin_helper::PersistentDictionary> items) override;
|
||||||
void RefreshTouchBarItem(const std::string& item_id) override;
|
void RefreshTouchBarItem(const std::string& item_id) override;
|
||||||
|
@ -188,6 +192,10 @@ class NativeWindowMac : public NativeWindow, public ui::NativeThemeObserver {
|
||||||
// ui::NativeThemeObserver:
|
// ui::NativeThemeObserver:
|
||||||
void OnNativeThemeUpdated(ui::NativeTheme* observed_theme) override;
|
void OnNativeThemeUpdated(ui::NativeTheme* observed_theme) override;
|
||||||
|
|
||||||
|
// display::DisplayObserver:
|
||||||
|
void OnDisplayMetricsChanged(const display::Display& display,
|
||||||
|
uint32_t changed_metrics) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Add custom layers to the content view.
|
// Add custom layers to the content view.
|
||||||
void AddContentViewLayers();
|
void AddContentViewLayers();
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include "shell/common/process_util.h"
|
#include "shell/common/process_util.h"
|
||||||
#include "skia/ext/skia_utils_mac.h"
|
#include "skia/ext/skia_utils_mac.h"
|
||||||
#include "third_party/webrtc/modules/desktop_capture/mac/window_list_utils.h"
|
#include "third_party/webrtc/modules/desktop_capture/mac/window_list_utils.h"
|
||||||
|
#include "ui/display/screen.h"
|
||||||
#include "ui/gfx/skia_util.h"
|
#include "ui/gfx/skia_util.h"
|
||||||
#include "ui/gl/gpu_switching_manager.h"
|
#include "ui/gl/gpu_switching_manager.h"
|
||||||
#include "ui/views/background.h"
|
#include "ui/views/background.h"
|
||||||
|
@ -258,6 +259,7 @@ NativeWindowMac::NativeWindowMac(const gin_helper::Dictionary& options,
|
||||||
NativeWindow* parent)
|
NativeWindow* parent)
|
||||||
: NativeWindow(options, parent), root_view_(new RootViewMac(this)) {
|
: NativeWindow(options, parent), root_view_(new RootViewMac(this)) {
|
||||||
ui::NativeTheme::GetInstanceForNativeUi()->AddObserver(this);
|
ui::NativeTheme::GetInstanceForNativeUi()->AddObserver(this);
|
||||||
|
display::Screen::GetScreen()->AddObserver(this);
|
||||||
|
|
||||||
int width = 800, height = 600;
|
int width = 800, height = 600;
|
||||||
options.Get(options::kWidth, &width);
|
options.Get(options::kWidth, &width);
|
||||||
|
@ -882,6 +884,17 @@ void NativeWindowMac::SetExcludedFromShownWindowsMenu(bool excluded) {
|
||||||
[window setExcludedFromWindowsMenu:excluded];
|
[window setExcludedFromWindowsMenu:excluded];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NativeWindowMac::OnDisplayMetricsChanged(const display::Display& display,
|
||||||
|
uint32_t changed_metrics) {
|
||||||
|
// We only want to force screen recalibration if we're in simpleFullscreen
|
||||||
|
// mode.
|
||||||
|
if (!is_simple_fullscreen_)
|
||||||
|
return;
|
||||||
|
|
||||||
|
base::PostTask(FROM_HERE, {content::BrowserThread::UI},
|
||||||
|
base::BindOnce(&NativeWindow::UpdateFrame, GetWeakPtr()));
|
||||||
|
}
|
||||||
|
|
||||||
void NativeWindowMac::SetSimpleFullScreen(bool simple_fullscreen) {
|
void NativeWindowMac::SetSimpleFullScreen(bool simple_fullscreen) {
|
||||||
NSWindow* window = GetNativeWindow().GetNativeNSWindow();
|
NSWindow* window = GetNativeWindow().GetNativeNSWindow();
|
||||||
|
|
||||||
|
@ -1396,6 +1409,13 @@ void NativeWindowMac::RedrawTrafficLights() {
|
||||||
[buttons_view_ setNeedsDisplayForButtons];
|
[buttons_view_ setNeedsDisplayForButtons];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In simpleFullScreen mode, update the frame for new bounds.
|
||||||
|
void NativeWindowMac::UpdateFrame() {
|
||||||
|
NSWindow* window = GetNativeWindow().GetNativeNSWindow();
|
||||||
|
NSRect fullscreenFrame = [window.screen frame];
|
||||||
|
[window setFrame:fullscreenFrame display:YES animate:YES];
|
||||||
|
}
|
||||||
|
|
||||||
void NativeWindowMac::SetTouchBar(
|
void NativeWindowMac::SetTouchBar(
|
||||||
std::vector<gin_helper::PersistentDictionary> items) {
|
std::vector<gin_helper::PersistentDictionary> items) {
|
||||||
if (@available(macOS 10.12.2, *)) {
|
if (@available(macOS 10.12.2, *)) {
|
||||||
|
@ -1551,6 +1571,7 @@ void NativeWindowMac::NotifyWindowWillLeaveFullScreen() {
|
||||||
void NativeWindowMac::Cleanup() {
|
void NativeWindowMac::Cleanup() {
|
||||||
DCHECK(!IsClosed());
|
DCHECK(!IsClosed());
|
||||||
ui::NativeTheme::GetInstanceForNativeUi()->RemoveObserver(this);
|
ui::NativeTheme::GetInstanceForNativeUi()->RemoveObserver(this);
|
||||||
|
display::Screen::GetScreen()->RemoveObserver(this);
|
||||||
[NSEvent removeMonitor:wheel_event_monitor_];
|
[NSEvent removeMonitor:wheel_event_monitor_];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue