From: Jan Djärv Date: Sat, 21 Dec 2013 16:11:55 +0000 (+0100) Subject: Customize ns-use-srgb-colorspace on OSX >= 10.7 to use sRGB. X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~273 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=41cf3d118e142b15468951e3c8670a7d83fdfe66;p=emacs.git Customize ns-use-srgb-colorspace on OSX >= 10.7 to use sRGB. * etc/NEWS: Mention ns-use-srgb-colorspace. * lisp/cus-start.el (all): Add ns-use-srgb-colorspace. * src/nsfns.m (Fxw_color_values): Use colorUsingDefaultColorSpace. * src/nsterm.h: Declare EmacsColor category. * src/nsterm.m (NSColor): Implement EmacsColor category. (ns_get_color): Use colorUsingDefaultColorSpace. (ns_get_color, ns_term_init): Use colorForEmacsRed. --- diff --git a/etc/ChangeLog b/etc/ChangeLog index 2a9ffcd05df..012e2e95168 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2013-12-21 Jan Djärv + + * NEWS: Mention ns-use-srgb-colorspace. + 2013-12-21 Chong Yidong * themes/tango-dark-theme.el: Minor color tweak. diff --git a/etc/NEWS b/etc/NEWS index 5d9b84f0504..8ad8ad47443 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1174,6 +1174,10 @@ Both native (>= OSX 10.7) and "old style" fullscreen are supported. Customize `ns-use-native-fullscreen' to change style. For >= 10.7 native is the default. +** OSX >= 10.7 can use sRGB colorspace. +Customize `ns-use-srgb-colorspace' to change style. nil is the default. +Note: This does not apply to images. + * Installation Changes in Emacs 24.3 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c81dbf2889a..53cd2430519 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2013-12-21 Jan Djärv + + * cus-start.el (all): Add ns-use-srgb-colorspace. + 2013-12-21 Chong Yidong * custom.el (custom-theme-recalc-face): Do nothing if the face is diff --git a/lisp/cus-start.el b/lisp/cus-start.el index 32013b71125..099485f9f4e 100644 --- a/lisp/cus-start.el +++ b/lisp/cus-start.el @@ -402,6 +402,7 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of (ns-antialias-text ns boolean "23.1") (ns-auto-hide-menu-bar ns boolean "24.0") (ns-use-native-fullscreen ns boolean "24.4") + (ns-use-srgb-colorspace ns boolean "24.4") ;; process.c (delete-exited-processes processes-basics boolean) ;; syntax.c diff --git a/src/nsfns.m b/src/nsfns.m index 8f14915ea65..e90e01b12fb 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -2289,7 +2289,7 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0, if (ns_lisp_to_color (color, &col)) return Qnil; - [[col colorUsingColorSpaceName: NSCalibratedRGBColorSpace] + [[col colorUsingDefaultColorSpace] getRed: &red green: &green blue: &blue alpha: &alpha]; return list3i (lrint (red * 65280), lrint (green * 65280), lrint (blue * 65280)); diff --git a/src/nsterm.h b/src/nsterm.h index b86122417e5..2ca8385f7e9 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -76,6 +76,18 @@ typedef CGFloat EmacsCGFloat; typedef float EmacsCGFloat; #endif +/* ========================================================================== + + NSColor, EmacsColor category. + + ========================================================================== */ +@interface NSColor (EmacsColor) ++ (NSColor *)colorForEmacsRed:(CGFloat)red green:(CGFloat)green + blue:(CGFloat)blue alpha:(CGFloat)alpha; +- (NSColor *)colorUsingDefaultColorSpace; + +@end + /* ========================================================================== The Emacs application diff --git a/src/nsterm.m b/src/nsterm.m index 10780b054d9..f2aef422db4 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -103,6 +103,43 @@ int term_trace_num = 0; extern NSString *NSMenuDidBeginTrackingNotification; +/* ========================================================================== + + NSColor, EmacsColor category. + + ========================================================================== */ +@implementation NSColor (EmacsColor) ++ (NSColor *)colorForEmacsRed:(CGFloat)red green:(CGFloat)green + blue:(CGFloat)blue alpha:(CGFloat)alpha +{ +#ifdef NS_IMPL_COCOA +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if (ns_use_srgb_colorspace) + return [NSColor colorWithSRGBRed: red + green: green + blue: blue + alpha: alpha]; +#endif +#endif + return [NSColor colorWithCalibratedRed: red + green: green + blue: blue + alpha: alpha]; +} + +- (NSColor *)colorUsingDefaultColorSpace +{ +#ifdef NS_IMPL_COCOA +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + if (ns_use_srgb_colorspace) + return [self colorUsingColorSpace: [NSColorSpace sRGBColorSpace]]; +#endif +#endif + return [self colorUsingColorSpaceName: NSCalibratedRGBColorSpace]; +} + +@end + /* ========================================================================== Local declarations @@ -1509,7 +1546,7 @@ ns_get_color (const char *name, NSColor **col) #endif if ((new = [NSColor selectedTextBackgroundColor]) != nil) { - *col = [new colorUsingColorSpaceName: NSCalibratedRGBColorSpace]; + *col = [new colorUsingDefaultColorSpace]; unblock_input (); return 0; } @@ -1525,7 +1562,7 @@ ns_get_color (const char *name, NSColor **col) */ if ((new = [NSColor selectedTextColor]) != nil) { - *col = [new colorUsingColorSpaceName: NSCalibratedRGBColorSpace]; + *col = [new colorUsingDefaultColorSpace]; unblock_input (); return 0; } @@ -1572,7 +1609,7 @@ ns_get_color (const char *name, NSColor **col) if (r >= 0.0F) { - *col = [NSColor colorWithCalibratedRed: r green: g blue: b alpha: 1.0]; + *col = [NSColor colorForEmacsRed: r green: g blue: b alpha: 1.0]; unblock_input (); return 0; } @@ -1604,7 +1641,7 @@ ns_get_color (const char *name, NSColor **col) } if (new) - *col = [new colorUsingColorSpaceName: NSCalibratedRGBColorSpace]; + *col = [new colorUsingDefaultColorSpace]; unblock_input (); return new ? 0 : 1; } @@ -1645,9 +1682,9 @@ ns_color_to_lisp (NSColor *col) return build_string ((char *)str); } - [[col colorUsingColorSpaceName: NSCalibratedRGBColorSpace] + [[col colorUsingDefaultColorSpace] getRed: &red green: &green blue: &blue alpha: &alpha]; - if (red ==green && red ==blue) + if (red == green && red == blue) { [[col colorUsingColorSpaceName: NSCalibratedWhiteColorSpace] getWhite: &gray alpha: &alpha]; @@ -4273,10 +4310,10 @@ ns_term_init (Lisp_Object display_name) name = SSDATA (XCAR (color)); c = XINT (XCDR (color)); [cl setColor: - [NSColor colorWithCalibratedRed: RED_FROM_ULONG (c) / 255.0 - green: GREEN_FROM_ULONG (c) / 255.0 - blue: BLUE_FROM_ULONG (c) / 255.0 - alpha: 1.0] + [NSColor colorForEmacsRed: RED_FROM_ULONG (c) / 255.0 + green: GREEN_FROM_ULONG (c) / 255.0 + blue: BLUE_FROM_ULONG (c) / 255.0 + alpha: 1.0] forKey: [NSString stringWithUTF8String: name]]; } [cl writeToFile: nil]; @@ -7607,6 +7644,12 @@ Default is t for OSX >= 10.7, nil otherwise. */); #endif ns_last_use_native_fullscreen = ns_use_native_fullscreen; + DEFVAR_BOOL ("ns-use-srgb-colorspace", ns_use_srgb_colorspace, + doc: /*Non-nil means to use sRGB colorspace on OSX >= 10.7. +Note that this does not apply to images. +This variable is ignored on OSX < 10.7 and GNUStep. Default is nil. */); + ns_use_srgb_colorspace = NO; + /* TODO: move to common code */ DEFVAR_LISP ("x-toolkit-scroll-bars", Vx_toolkit_scroll_bars, doc: /* Which toolkit scroll bars Emacs uses, if any.