diff --git a/cspell.json b/cspell.json index 675d3d0..54361ad 100644 --- a/cspell.json +++ b/cspell.json @@ -96,6 +96,7 @@ "rmam", "rmate", "rubymine", + "screeninfo", "setterm", "setuptools", "Shft", diff --git a/requirements.txt b/requirements.txt index 116248c..2e4c935 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,6 +5,7 @@ pyfiglet==0.8.post1 # PyGObject==3.42.1 # gi.repository module, used for setting the wallpaper on gnome, unity, and cinnamon; optional, falls back to gsettings CLI pyperclip==1.8.2 pyxdg==0.28 # xdg module, used for wallpaper setting; optional, falls back to ~/.config +screeninfo==0.8.1 # used for wallpaper setting rich==13.3.5 stransi==0.3.0 textual[dev]==0.27.0 diff --git a/src/textual_paint/paint.py b/src/textual_paint/paint.py index 2c59e5c..5426eaf 100755 --- a/src/textual_paint/paint.py +++ b/src/textual_paint/paint.py @@ -3589,10 +3589,18 @@ Columns: {len(palette) // 2} self.message_box(_("Paint"), _("Failed to set the wallpaper."), "ok", error=e) def get_screen_size(self) -> tuple[int, int]: """Get the screen size.""" - # TODO: test DPI scaling; implement this without taking a screenshot - import PIL.ImageGrab - im = PIL.ImageGrab.grab() - return im.size + # TODO: test DPI scaling + from screeninfo import get_monitors + largest_area = 0 + largest_monitor = None + for m in get_monitors(): + area = m.width * m.height + if area > largest_area: + largest_area = area + largest_monitor = m + assert largest_monitor is not None, "No monitors found." + return largest_monitor.width, largest_monitor.height + def action_recent_file(self) -> None: self.message_box(_("Paint"), "Not implemented.", "ok")