From 3ca8c9dfdd2659a01f2c52a0b6fb17d77fb442e0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 30 Mar 2016 07:26:51 +0000 Subject: [PATCH] #1155: expose icc info from osx git-svn-id: https://xpra.org/svn/Xpra/trunk@12284 3bb7dfac-3a0b-4e04-842a-767bc560f471 --- src/xpra/platform/darwin/gui.py | 39 +++++++++++++++++++++++++++++++++ src/xpra/platform/gui.py | 5 +++-- src/xpra/util.py | 2 ++ 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/xpra/platform/darwin/gui.py b/src/xpra/platform/darwin/gui.py index 81ed1cbb46..2f144c4124 100644 --- a/src/xpra/platform/darwin/gui.py +++ b/src/xpra/platform/darwin/gui.py @@ -127,6 +127,45 @@ def get_window_frame_size(x, y, w, h): } +def get_icc_info(): + from AppKit import NSScreen #@UnresolvedImport + ms = NSScreen.mainScreen() + info = do_get_screen_icc_info(ms) + screens = NSScreen.screens() + for i, screen in enumerate(screens): + si = do_get_screen_icc_info(screen) + if si: + info[i] = si + return info + +def do_get_screen_icc_info(nsscreen): + info = {} + try: + from AppKit import NSUnknownColorSpaceModel, NSGrayColorSpaceModel, NSRGBColorSpaceModel, NSCMYKColorSpaceModel, NSLABColorSpaceModel, NSDeviceNColorSpaceModel, NSIndexedColorSpaceModel, NSPatternColorSpaceModel #@UnresolvedImport + COLORSPACE_STR = { + NSUnknownColorSpaceModel : "unknown", + NSGrayColorSpaceModel : "gray", + NSRGBColorSpaceModel : "RGB", + NSCMYKColorSpaceModel : "CMYK", + NSLABColorSpaceModel : "LAB", + NSDeviceNColorSpaceModel : "DeviceN", + NSIndexedColorSpaceModel : "Indexed", + NSPatternColorSpaceModel : "Pattern", + } + mscs = nsscreen.colorSpace() + log("%s.colorSpace=%s", nsscreen, mscs) + info.update({ + "colorspace" : COLORSPACE_STR.get(mscs.colorSpaceModel(), "unknown"), + "data" : str(mscs.ICCProfileData() or ""), + "name" : str(mscs.localizedName()), + "components" : mscs.numberOfColorComponents(), + }) + except Exception as e: + log.warn("Warning: cannot query ICC profiles:") + log.warn(" %s", e) + return info + + #global menu handling: window_menus = {} diff --git a/src/xpra/platform/gui.py b/src/xpra/platform/gui.py index ce9a611f1a..85f729efaa 100755 --- a/src/xpra/platform/gui.py +++ b/src/xpra/platform/gui.py @@ -93,7 +93,7 @@ def get_icc_info(): INTENT_ABSOLUTE_COLORIMETRIC : "absolute-colorimetric", } def getDefaultIntentStr(_p): - return INTENT_STR.get(getDefaultIntent(_p)) + return INTENT_STR.get(getDefaultIntent(_p), "unknown") p = get_display_profile() if p: for (k, fn) in { @@ -115,6 +115,7 @@ def getDefaultIntentStr(_p): log.warn(" %s", e) return info + #global workarea for all screens def get_workarea(): return None @@ -267,7 +268,7 @@ def main(): except: pass #maybe running on OSX? hope for the best.. i = get_info() - print_nested_dict(i, vformat=str) + print_nested_dict(i) if __name__ == "__main__": diff --git a/src/xpra/util.py b/src/xpra/util.py index 60a39919c2..06ff86fa8a 100644 --- a/src/xpra/util.py +++ b/src/xpra/util.py @@ -591,6 +591,8 @@ def vf(k, v): try: if k.find("version")>=0 or k.find("revision")>=0: return nonl(pver(v)).lstrip("v") + elif k=="data": + return binascii.hexlify(v) except: pass return nonl(pver(v, ", ", ", "))