projects
/
lilass.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
minor fixes
[lilass.git]
/
screen.py
diff --git
a/screen.py
b/screen.py
index 26ffddbfaf38d844989707f240256a4a67785cbc..9942e9838296e9a8eecef3d0b8c9475b81d19f8f 100644
(file)
--- a/
screen.py
+++ b/
screen.py
@@
-47,7
+47,6
@@
class RelativeScreenPosition(Enum):
self._value_ = len(cls.__members__)
self.text = text
self._value_ = len(cls.__members__)
self.text = text
-
class Resolution:
'''Represents a resolution of a screen'''
def __init__(self, width, height):
class Resolution:
'''Represents a resolution of a screen'''
def __init__(self, width, height):
@@
-62,6
+61,9
@@
class Resolution:
def __ne__(self, other):
return not self.__eq__(other)
def __ne__(self, other):
return not self.__eq__(other)
+ def __hash__(self):
+ return hash(("Resolution",self.width,self.height))
+
def __str__(self):
# get ratio
ratio = int(round(16.0*self.height/self.width))
def __str__(self):
# get ratio
ratio = int(round(16.0*self.height/self.width))
@@
-76,6
+78,9
@@
class Resolution:
def __repr__(self):
return 'screen.Resolution('+self.forXrandr()+')'
def __repr__(self):
return 'screen.Resolution('+self.forXrandr()+')'
+ def pixelCount(self):
+ return self.width * self.height
+
def forXrandr(self):
return str(self.width)+'x'+str(self.height)
def forXrandr(self):
return str(self.width)+'x'+str(self.height)
@@
-120,20
+125,25
@@
class ScreenSetup:
return args
class Connector:
return args
class Connector:
- name = None # connector name, e.g. "HDMI1"
- edid = None # EDID string for the connector, or None if disconnected
- resolutions = [] # list of Resolution objects, empty if disconnected
-
def __init__(self, name=None):
def __init__(self, name=None):
- self.name = name
+ self.name = name # connector name, e.g. "HDMI1"
+ self.edid = None # EDID string for the connector, or None if disconnected
+ self.resolutions = set() # list of Resolution objects, empty if disconnected
+
def __str__(self):
return str(self.name)
def __str__(self):
return str(self.name)
+
+ def __repr__(self):
+ return """<Connector "%s" EDID="%s" resolutions="%s">""" % (str(self.name), str(self.edid), ", ".join(str(r) for r in self.resolutions))
+
def isConnected(self):
assert (self.edid is None) == (len(self.resolutions)==0)
return self.edid is not None
def isConnected(self):
assert (self.edid is None) == (len(self.resolutions)==0)
return self.edid is not None
+
def addResolution(self, resolution):
assert isinstance(resolution, Resolution)
def addResolution(self, resolution):
assert isinstance(resolution, Resolution)
- self.resolutions.append(resolution)
+ self.resolutions.add(resolution)
+
def appendToEdid(self, s):
if self.edid is None:
self.edid = s
def appendToEdid(self, s):
if self.edid is None:
self.edid = s
@@
-151,6
+161,9
@@
class ScreenSituation:
just choose any remaining connector.'''
# which connectors are there?
self._getXrandrInformation()
just choose any remaining connector.'''
# which connectors are there?
self._getXrandrInformation()
+ for c in self.connectors:
+ print(repr(c))
+ print()
# figure out which is the internal connector
self.internalConnector = self._findAvailableConnector(internalConnectorNames)
if self.internalConnector is None:
# figure out which is the internal connector
self.internalConnector = self._findAvailableConnector(internalConnectorNames)
if self.internalConnector is None:
@@
-159,7
+172,7
@@
class ScreenSituation:
# and the external one
if externalConnectorNames is None:
externalConnectorNames = map(lambda c: c.name, self.connectors)
# and the external one
if externalConnectorNames is None:
externalConnectorNames = map(lambda c: c.name, self.connectors)
- externalConnectorNames =
filter(lambda name: name != self.internalConnector.name, externalConnectorNames
)
+ externalConnectorNames =
set(filter(lambda name: name != self.internalConnector.name, externalConnectorNames)
)
self.externalConnector = self._findAvailableConnector(externalConnectorNames)
if self.internalConnector == self.externalConnector:
raise Exception("Internal and external connector are the same. This must not happen. Please fix ~/.dsl.conf.");
self.externalConnector = self._findAvailableConnector(externalConnectorNames)
if self.internalConnector == self.externalConnector:
raise Exception("Internal and external connector are the same. This must not happen. Please fix ~/.dsl.conf.");
@@
-204,7
+217,7
@@
class ScreenSituation:
continue
# unknown line
# not fatal, e.g. xrandr shows strange stuff when a display is enabled, but not connected
continue
# unknown line
# not fatal, e.g. xrandr shows strange stuff when a display is enabled, but not connected
- print("Warning: Unknown xrandr line %s" % line)
+
#
print("Warning: Unknown xrandr line %s" % line)
# return the first available connector from those listed in <tryConnectorNames>, skipping disabled connectors
def _findAvailableConnector(self, tryConnectorNames):
# return the first available connector from those listed in <tryConnectorNames>, skipping disabled connectors
def _findAvailableConnector(self, tryConnectorNames):
@@
-227,7
+240,7
@@
class ScreenSituation:
internalRes = self.internalResolutions()
externalRes = self.externalResolutions()
assert externalRes is not None
internalRes = self.internalResolutions()
externalRes = self.externalResolutions()
assert externalRes is not None
- return
[res for res in externalRes if res in internalRes]
+ return
sorted(set(externalRes).intersection(internalRes), key=lambda r: -r.pixelCount())
# compute the xrandr call
def forXrandr(self, setup):
# compute the xrandr call
def forXrandr(self, setup):