From b533844945a648ab1613a305c072809bbd6d76a8 Mon Sep 17 00:00:00 2001
From: Cinder Biscuits <cinder.roxley@phoenixviewer.com>
Date: Fri, 18 Apr 2014 20:06:39 +0000
Subject: [PATCH] STORM-2023: Restore system color picker on OSX

---
 indra/llwindow/llwindowmacosx.cpp | 33 +++++++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)

diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index 11c0b510869..832e08d1811 100755
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -39,6 +39,7 @@
 #include "indra_constants.h"
 
 #include <OpenGL/OpenGL.h>
+#include <Carbon/Carbon.h>
 #include <CoreServices/CoreServices.h>
 
 extern BOOL gDebugWindowProc;
@@ -1743,16 +1744,40 @@ LLSD LLWindowMacOSX::getNativeKeyData()
 	return result;
 }
 
-
 BOOL LLWindowMacOSX::dialogColorPicker( F32 *r, F32 *g, F32 *b)
 {
-	// Is this even used anywhere?  Do we really need an OS color picker?
 	BOOL	retval = FALSE;
-	//S32		error = 0;
+	OSErr	error = noErr;
+	NColorPickerInfo	info;
+	
+	memset(&info, 0, sizeof(info));
+	info.theColor.color.rgb.red = (UInt16)(*r * 65535.f);
+	info.theColor.color.rgb.green = (UInt16)(*g * 65535.f);
+	info.theColor.color.rgb.blue = (UInt16)(*b * 65535.f);
+	info.placeWhere = kCenterOnMainScreen;
+	
+	if(gWindowImplementation != NULL)
+		gWindowImplementation->beforeDialog();
+	
+	error = NPickColor(&info);
+	
+	if(gWindowImplementation != NULL)
+		gWindowImplementation->afterDialog();
+	
+	if (error == noErr)
+	{
+		retval = info.newColorChosen;
+		if (info.newColorChosen)
+		{
+			*r = ((float) info.theColor.color.rgb.red) / 65535.0;
+			*g = ((float) info.theColor.color.rgb.green) / 65535.0;
+			*b = ((float) info.theColor.color.rgb.blue) / 65535.0;
+		}
+	}
+
 	return (retval);
 }
 
-
 void *LLWindowMacOSX::getPlatformWindow()
 {
 	// NOTE: this will be NULL in fullscreen mode.  Plan accordingly.
-- 
GitLab