macOS: Make getColor() return generic RGB components
Discard the color space and return the selected RGB/CMYK color components, without any color space conversion. This enables predictable color handling as long as you stay on a single display. All color triplets are display RGB: drawing the QColor returned by getColor() will reproduce the selected color on-screen. (Predictable color across multiple displays require color management, which is out of scope here). Fixes: QTBUG-84124 Pick-to: 5.15 Change-Id: I43d8dc15d07635fabdd0662c84f7c0b5ac40b7ab Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
parent
6d6ed64d6c
commit
b7a1bd3064
@ -181,8 +181,34 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate);
|
|||||||
|
|
||||||
- (void)updateQtColor
|
- (void)updateQtColor
|
||||||
{
|
{
|
||||||
NSColor *color = [mColorPanel color];
|
// Discard the color space and pass the color components to QColor. This
|
||||||
mQtColor = qt_mac_toQColor(color);
|
// is a good option as long as QColor is color-unmanaged: we preserve the
|
||||||
|
// exact RGB value from the color picker, which is predictable. Further,
|
||||||
|
// painting with the color will reproduce the same color on-screen, as
|
||||||
|
// long as the the same screen is used for selecting the color.
|
||||||
|
NSColor *componentColor = [[mColorPanel color] colorUsingType:NSColorTypeComponentBased];
|
||||||
|
switch (componentColor.colorSpace.colorSpaceModel)
|
||||||
|
{
|
||||||
|
case NSColorSpaceModelGray: {
|
||||||
|
CGFloat white = 0, alpha = 0;
|
||||||
|
[componentColor getWhite:&white alpha:&alpha];
|
||||||
|
mQtColor.setRgbF(white, white, white, alpha);
|
||||||
|
} break;
|
||||||
|
case NSColorSpaceModelRGB: {
|
||||||
|
CGFloat red = 0, green = 0, blue = 0, alpha = 0;
|
||||||
|
[componentColor getRed:&red green:&green blue:&blue alpha:&alpha];
|
||||||
|
mQtColor.setRgbF(red, green, blue, alpha);
|
||||||
|
} break;
|
||||||
|
case NSColorSpaceModelCMYK: {
|
||||||
|
CGFloat cyan = 0, magenta = 0, yellow = 0, black = 0, alpha = 0;
|
||||||
|
[componentColor getCyan:&cyan magenta:&magenta yellow:&yellow black:&black alpha:&alpha];
|
||||||
|
mQtColor.setCmykF(cyan, magenta, yellow, black, alpha);
|
||||||
|
} break;
|
||||||
|
default:
|
||||||
|
qWarning("QNSColorPanelDelegate: Unsupported color space model");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (mHelper)
|
if (mHelper)
|
||||||
emit mHelper->currentColorChanged(mQtColor);
|
emit mHelper->currentColorChanged(mQtColor);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user