Source code for dragonfly.windows.darwin_monitor

#
# This file is part of Dragonfly.
# (c) Copyright 2007, 2008 by Christo Butcher
# Licensed under the LGPL.
#
#   Dragonfly is free software: you can redistribute it and/or modify it
#   under the terms of the GNU Lesser General Public License as published
#   by the Free Software Foundation, either version 3 of the License, or
#   (at your option) any later version.
#
#   Dragonfly is distributed in the hope that it will be useful, but
#   WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#   Lesser General Public License for more details.
#
#   You should have received a copy of the GNU Lesser General Public
#   License along with Dragonfly.  If not, see
#   <http://www.gnu.org/licenses/>.
#

# pylint: disable=E0401
# This file imports MacOS-only symbols.

from AppKit                         import NSScreen

from dragonfly.windows.base_monitor import BaseMonitor
from dragonfly.windows.rectangle    import Rectangle


#===========================================================================
# Monitor class for storing info about a single display monitor.

[docs]class DarwinMonitor(BaseMonitor): """ The monitor class used on Mac OS (Darwin). Monitors for Mac OS are **not** automatically updated because ``AppKit`` doesn't update monitor information after it is retrieved. A simple workaround for this is to restart the Python interpreter after a monitor change. """ #----------------------------------------------------------------------- # Class methods to create new Monitor objects.
[docs] @classmethod def get_all_monitors(cls): # Get monitor information from AppKit. monitors = [] for screen in NSScreen.screens(): # Get the monitor handle. handle = screen.deviceDescription()['NSScreenNumber'] # Create a rectangle object representing the monitor's # dimensions and relative position. frame = screen.frame() dx = frame.size.width - frame.origin.x dy = frame.size.height - frame.origin.y rectangle = Rectangle(frame.origin.x, frame.origin.y, dx, dy) # Get a new or updated monitor object and add it to the list. monitors.append(cls.get_monitor(handle, rectangle)) return monitors
#----------------------------------------------------------------------- # Methods that control attribute access. @property def name(self): """ The name of this monitor. """ handle = self.handle for screen in NSScreen.screens(): if screen.deviceDescription()['NSScreenNumber'] == handle: return screen.localizedName() return u"macOS monitor"