From 2435ea747c25574244ed000bab6c82c38a4f7cb4 Mon Sep 17 00:00:00 2001 From: Mykola Grymalyuk Date: Mon, 29 May 2023 11:14:37 -0600 Subject: [PATCH] Test custom centreing again --- resources/wx_gui/gui_about.py | 2 +- resources/wx_gui/gui_build.py | 2 +- resources/wx_gui/gui_install_oc.py | 2 +- .../wx_gui/gui_macos_installer_download.py | 2 +- resources/wx_gui/gui_macos_installer_flash.py | 2 +- resources/wx_gui/gui_main_menu.py | 3 +- resources/wx_gui/gui_support.py | 47 +++++++++++++++++++ resources/wx_gui/gui_sys_patch_start.py | 2 +- resources/wx_gui/gui_update.py | 2 +- 9 files changed, 56 insertions(+), 8 deletions(-) diff --git a/resources/wx_gui/gui_about.py b/resources/wx_gui/gui_about.py index 73b0c84a1..611675de6 100644 --- a/resources/wx_gui/gui_about.py +++ b/resources/wx_gui/gui_about.py @@ -18,7 +18,7 @@ class AboutFrame(wx.Frame): logging.info("Generating About frame") super(AboutFrame, self).__init__(None, title="About", size=(350, 350), style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)) self.constants: constants.Constants = global_constants - self.Centre() + gui_support.Centre(self, self.constants) self.hyperlink_colour = (25, 179, 231) self._generate_elements(self) diff --git a/resources/wx_gui/gui_build.py b/resources/wx_gui/gui_build.py index 5dafddf26..14041299b 100644 --- a/resources/wx_gui/gui_build.py +++ b/resources/wx_gui/gui_build.py @@ -38,7 +38,7 @@ class BuildFrame(wx.Frame): if self.constants.update_stage != gui_support.AutoUpdateStages.INACTIVE: self.constants.update_stage = gui_support.AutoUpdateStages.BUILDING - self.Centre() + gui_support.Centre(self, self.constants) self.frame_modal.ShowWindowModal() self._invoke_build() diff --git a/resources/wx_gui/gui_install_oc.py b/resources/wx_gui/gui_install_oc.py index 70c2cbcb0..ae14bfd52 100644 --- a/resources/wx_gui/gui_install_oc.py +++ b/resources/wx_gui/gui_install_oc.py @@ -33,7 +33,7 @@ class InstallOCFrame(wx.Frame): if self.constants.update_stage != gui_support.AutoUpdateStages.INACTIVE: self.constants.update_stage = gui_support.AutoUpdateStages.INSTALLING - self.Centre() + gui_support.Centre(self, self.constants) self.Show() self._display_disks() diff --git a/resources/wx_gui/gui_macos_installer_download.py b/resources/wx_gui/gui_macos_installer_download.py index adc569164..e92370fdc 100644 --- a/resources/wx_gui/gui_macos_installer_download.py +++ b/resources/wx_gui/gui_macos_installer_download.py @@ -84,7 +84,7 @@ class macOSInstallerDownloadFrame(wx.Frame): """ super(macOSInstallerDownloadFrame, self).__init__(None, title=self.title, size=(300, 200), style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)) gui_support.GenerateMenubar(self, self.constants).generate() - self.Centre() + gui_support.Centre(self, self.constants) # Title: Pulling installer catalog title_label = wx.StaticText(self, label="Pulling installer catalog", pos=(-1,5)) diff --git a/resources/wx_gui/gui_macos_installer_flash.py b/resources/wx_gui/gui_macos_installer_flash.py index 288052083..45c75cc26 100644 --- a/resources/wx_gui/gui_macos_installer_flash.py +++ b/resources/wx_gui/gui_macos_installer_flash.py @@ -39,7 +39,7 @@ class macOSInstallerFlashFrame(wx.Frame): self._generate_elements() - self.Centre() + gui_support.Centre(self, self.constants) self.Show() self._populate_installers() diff --git a/resources/wx_gui/gui_main_menu.py b/resources/wx_gui/gui_main_menu.py index 8a574abd8..073f80ed1 100644 --- a/resources/wx_gui/gui_main_menu.py +++ b/resources/wx_gui/gui_main_menu.py @@ -39,9 +39,10 @@ class MainFrame(wx.Frame): self._generate_elements() - self.Centre() + gui_support.Centre(self, self.constants) self.Show() + self._preflight_checks() diff --git a/resources/wx_gui/gui_support.py b/resources/wx_gui/gui_support.py index 343042c3e..d0c425950 100644 --- a/resources/wx_gui/gui_support.py +++ b/resources/wx_gui/gui_support.py @@ -23,6 +23,53 @@ class AutoUpdateStages: FINISHED = 5 +class Centre: + """ + Alternative to wx.Frame.Centre() for macOS Ventura+ on non-Metal GPUs + ---------- + As reported by socamx#3874, all of their non-Metal Mac minis would incorrectly centre + at the top of the screen, rather than the screen centre. Half of the window frame would + be off-screen, making it rather difficult to grab frame handle and move the window. + This bug is only triggered when the application is launched via AppleScript, + ie. Relaunch as root for root patching. + As calculating screen centre is trivial, this is safe for all non-Metal Macs. + Test unit specs: + - Macmini4,1 (2010, Nvidia Tesla) + - Asus VP228HE 21.5" Display (1920x1080) + """ + + def __init__(self, frame: wx.Frame, global_constants: constants.Constants) -> None: + self.frame: wx.Frame = frame + self.constants: constants.Constants = global_constants + + self._centre() + + + def _centre(self) -> None: + """ + Calculate centre position of screen and set window position + """ + if self.constants.detected_os < os_data.os_data.ventura: + self.frame.Centre() + return + + if CheckProperties(self.constants).host_is_non_metal() is False: + self.frame.Centre() + return + + # Get screen resolution + screen_resolution = wx.DisplaySize() + logging.info(f"Screen resolution: {screen_resolution}") + window_size = self.frame.GetSize() + logging.info(f"Window size: {window_size}") + + # Calculate window position + x_pos = int((screen_resolution[0] - window_size[0]) / 2) + y_pos = int((screen_resolution[1] - window_size[1]) / 2) + + self.frame.SetPosition((x_pos, y_pos)) + + class GenerateMenubar: def __init__(self, frame: wx.Frame, global_constants: constants.Constants) -> None: diff --git a/resources/wx_gui/gui_sys_patch_start.py b/resources/wx_gui/gui_sys_patch_start.py index b9e40da29..9c10c7823 100644 --- a/resources/wx_gui/gui_sys_patch_start.py +++ b/resources/wx_gui/gui_sys_patch_start.py @@ -48,7 +48,7 @@ class SysPatchStartFrame(wx.Frame): if not (isinstance(delay, int) | isinstance(delay, float)): delay = 1 time.sleep(delay) - self.Centre() + gui_support.Centre(self, self.constants) if self.patches == {}: self.patches = sys_patch_detect.DetectRootPatch(self.constants.computer.real_model, self.constants).detect_patch_set() diff --git a/resources/wx_gui/gui_update.py b/resources/wx_gui/gui_update.py index b3e862ef0..c463c74ae 100644 --- a/resources/wx_gui/gui_update.py +++ b/resources/wx_gui/gui_update.py @@ -41,7 +41,7 @@ class UpdateFrame(wx.Frame): self.parent.Centre() self.screen_location = parent.GetScreenPosition() else: - self.Centre() + gui_support.Centre(self, self.constants) self.screen_location = self.GetScreenPosition()