color.py (9942B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\util\color.py 2 3 4 class Color(object): 5 __guid__ = 'util.Color' 6 BLACK = (0.0, 0.0, 0.0, 1.0) 7 GREEN = (0.0, 0.5, 0.0, 1.0) 8 SILVER = (0.75, 0.75, 0.75, 1.0) 9 LIME = (0.0, 1.0, 0.0, 1.0) 10 GRAY = (0.5, 0.5, 0.5, 1.0) 11 OLIVE = (0.5, 0.5, 0.0, 1.0) 12 WHITE = (1.0, 1.0, 1.0, 1.0) 13 YELLOW = (1.0, 1.0, 0.0, 1.0) 14 MAROON = (0.5, 0.0, 0.0, 1.0) 15 NAVY = (0.0, 0.0, 0.5, 1.0) 16 RED = (1.0, 0.0, 0.0, 1.0) 17 ORANGE = (1.0, 0.65, 0.0, 1.0) 18 BLUE = (0.0, 0.0, 1.0, 1.0) 19 PURPLE = (0.5, 0.0, 0.5, 1.0) 20 TEAL = (0.0, 0.5, 0.5, 1.0) 21 FUCHSIA = (1.0, 0.0, 1.0, 1.0) 22 AQUA = (0.0, 1.0, 1.0, 1.0) 23 GRAY1 = (0.1, 0.1, 0.1, 1.0) 24 GRAY2 = (0.2, 0.2, 0.2, 1.0) 25 GRAY3 = (0.3, 0.3, 0.3, 1.0) 26 GRAY4 = (0.4, 0.4, 0.4, 1.0) 27 GRAY5 = (0.5, 0.5, 0.5, 1.0) 28 GRAY6 = (0.6, 0.6, 0.6, 1.0) 29 GRAY7 = (0.7, 0.7, 0.7, 1.0) 30 GRAY8 = (0.8, 0.8, 0.8, 1.0) 31 GRAY9 = (0.9, 0.9, 0.9, 1.0) 32 33 def __init__(self, *args): 34 self.r = 0.0 35 self.g = 0.0 36 self.b = 0.0 37 self.a = 1.0 38 if len(args) == 0: 39 return 40 if len(args) == 1: 41 args = args[0] 42 if isinstance(args, (str, unicode)): 43 if args.startswith('#') or args.startswith('0x'): 44 self.SetRGB(*self.HextoRGBA(args)) 45 else: 46 try: 47 standardColor = getattr(self, args.upper(), None) 48 self.SetRGB(*standardColor) 49 except Exception: 50 raise ValueError('Color: Invalid startup parameters') 51 52 elif len(args) in (3, 4): 53 if type(args[0]) == int: 54 self.SetiRGB(*args[:3]) 55 else: 56 self.SetRGB(*args[:3]) 57 if len(args) == 4: 58 self.SetAlpha(args[3]) 59 else: 60 raise ValueError('Color: Invalid startup parameters') 61 62 def GetRGB(self): 63 return (self.r, self.g, self.b) 64 65 def GetRGBRounded(self): 66 return (round(self.r, 4), round(self.g, 4), round(self.b, 4)) 67 68 def GetRGBA(self): 69 r, g, b = self.GetRGB() 70 return (r, 71 g, 72 b, 73 self.a) 74 75 def SetRGB(self, r, g, b, alpha = None): 76 self.r = r 77 self.g = g 78 self.b = b 79 if alpha is not None: 80 self.SetAlpha(alpha) 81 return self 82 83 def GetiRGB(self): 84 return Color.RGBtoiRGB(self.r, self.g, self.b) 85 86 def SetiRGB(self, iR, iG, iB, alpha = None): 87 SanitizeiRGBValues(iR, iG, iB) 88 self.r, self.g, self.b = Color.iRGBtoRGB(iR, iG, iB) 89 if alpha is not None: 90 self.SetAlpha(alpha) 91 return self 92 93 def GetHSB(self): 94 return Color.RGBtoHSB(self.r, self.g, self.b) 95 96 def GetHue(self): 97 return self.GetHSB()[0] 98 99 def GetSaturation(self): 100 return self.GetHSB()[1] 101 102 def GetBrightness(self): 103 return self.GetHSB()[2] 104 105 def IsGrayscale(self): 106 return self.r == self.g == self.b 107 108 def SetHSB(self, hue, saturation, brightness, alpha = None): 109 SanitizeHSBValues(hue, saturation, brightness) 110 self.r, self.g, self.b = Color.HSBtoRGB(hue, saturation, brightness) 111 if alpha is not None: 112 self.SetAlpha(alpha) 113 return self 114 115 def SetHue(self, hue): 116 h, s, b = Color.RGBtoHSB(*self.GetRGB()) 117 self.SetHSB(hue, s, b) 118 return self 119 120 def SetSaturation(self, saturation): 121 h, s, b = Color.RGBtoHSB(*self.GetRGB()) 122 self.SetHSB(h, saturation, b) 123 return self 124 125 def SetBrightness(self, brightness): 126 h, s, b = Color.RGBtoHSB(*self.GetRGB()) 127 self.SetHSB(h, s, brightness) 128 return self 129 130 def GetHex(self): 131 return Color.RGBtoHex(*self.GetRGBA()) 132 133 def SetAlpha(self, alpha): 134 return self.SetOpacity(alpha) 135 136 def SetOpacity(self, opacity): 137 self.a = opacity 138 return self 139 140 def __repr__(self): 141 return '<Color object: RGBA: (%s, %s, %s, %s)>' % (self.r, 142 self.g, 143 self.b, 144 self.a) 145 146 @staticmethod 147 def RGBtoiRGB(r, g, b, a = None): 148 return (int(round(255 * r)), int(round(255 * g)), int(round(255 * b))) 149 150 @staticmethod 151 def iRGBtoRGB(r, g, b, a = None): 152 SanitizeiRGBValues(r, g, b) 153 return (round(r / 255.0, 3), round(g / 255.0, 3), round(b / 255.0, 3)) 154 155 @staticmethod 156 def RGBtoHSB(r, g, b, a = None): 157 SanitizeRGBValues(r, g, b) 158 return Color.iRGBtoHSB(255 * r, 255 * g, 255 * b) 159 160 @staticmethod 161 def iRGBtoHSB(r, g, b): 162 r = float(r) 163 g = float(g) 164 b = float(b) 165 minVal = min(r, g, b) 166 maxVal = max(r, g, b) 167 c = maxVal - minVal 168 bri = maxVal / 255 169 if c == 0: 170 hue = 0.0 171 sat = 0.0 172 else: 173 sat = c / maxVal 174 if r == maxVal: 175 hue = (g - b) / c % 6 / 6 176 elif g == maxVal: 177 hue = ((b - r) / c + 2) / 6 178 elif b == maxVal: 179 hue = ((r - g) / c + 4) / 6 180 if hue < 0: 181 hue += 1 182 if hue > 1: 183 hue -= 1 184 return (hue, sat, bri) 185 186 @staticmethod 187 def HSBtoiRGB(h, s, b): 188 SanitizeHSBValues(h, s, b) 189 r, g, b = Color.HSBtoRGB(h, s, b) 190 return Color.RGBtoiRGB(r, g, b) 191 192 @staticmethod 193 def HSBtoRGB(hue, sat, bri): 194 SanitizeHSBValues(hue, sat, bri) 195 if sat == 0: 196 r = bri 197 g = bri 198 b = bri 199 else: 200 var_h = hue * 6 201 if var_h == 6: 202 var_h = 0 203 var_i = int(var_h) 204 var_1 = bri * (1 - sat) 205 var_2 = bri * (1 - sat * (var_h - var_i)) 206 var_3 = bri * (1 - sat * (1 - (var_h - var_i))) 207 if var_i == 0: 208 var_r = bri 209 var_g = var_3 210 var_b = var_1 211 elif var_i == 1: 212 var_r = var_2 213 var_g = bri 214 var_b = var_1 215 elif var_i == 2: 216 var_r = var_1 217 var_g = bri 218 var_b = var_3 219 elif var_i == 3: 220 var_r = var_1 221 var_g = var_2 222 var_b = bri 223 elif var_i == 4: 224 var_r = var_3 225 var_g = var_1 226 var_b = bri 227 else: 228 var_r = bri 229 var_g = var_1 230 var_b = var_2 231 r = var_r 232 g = var_g 233 b = var_b 234 return (r, g, b) 235 236 @staticmethod 237 def RGBtoHex(r, g, b, a = 1.0): 238 r, g, b = Color.RGBtoiRGB(r, g, b) 239 return Color.iRGBtoHex(r, g, b, a) 240 241 @staticmethod 242 def iRGBtoHex(r, g, b, a = 1.0): 243 SanitizeiRGBValues(r, g, b) 244 SanitizeAlphaValue(a) 245 return '0x%.2X%.2X%.2X%.2X' % (int(255 * a), 246 r, 247 g, 248 b) 249 250 @staticmethod 251 def HSBtoHex(h, s, v, a = 1.0): 252 r, g, b = Color.HSBtoiRGB(h, s, v) 253 return Color.iRGBtoHex(r, g, b, a) 254 255 @staticmethod 256 def HextoiRGBA(hexARGB): 257 hexARGB = hexARGB.replace('#', '0x') 258 SanitizeHexValue(hexARGB) 259 strLen = len(hexARGB) 260 hexNum = int(hexARGB, 16) 261 if strLen == 8: 262 r = hexNum >> 16 263 g = hexNum >> 8 & 255 264 b = hexNum & 255 265 return (r, 266 g, 267 b, 268 1.0) 269 else: 270 a = float(hexNum >> 24) / 255 271 r = int(hexNum >> 16 & 255) 272 g = int(hexNum >> 8 & 255) 273 b = int(hexNum & 255) 274 return (r, 275 g, 276 b, 277 a) 278 279 @staticmethod 280 def HextoRGBA(hexARGB): 281 r, g, b, a = Color.HextoiRGBA(hexARGB) 282 iR, iG, iB = Color.iRGBtoRGB(r, g, b) 283 return (iR, 284 iG, 285 iB, 286 a) 287 288 @staticmethod 289 def HextoHSBA(hexARGB): 290 r, g, b, a = Color.HextoiRGBA(hexARGB) 291 h, s, b = Color.iRGBtoHSB(r, g, b) 292 return (h, 293 s, 294 b, 295 a) 296 297 @staticmethod 298 def GetGrayRGBA(brightness, alpha = 1.0): 299 SanitizeRGBValues(brightness) 300 SanitizeAlphaValue(alpha) 301 return (brightness, 302 brightness, 303 brightness, 304 alpha) 305 306 307 def SanitizeRGBValues(*values): 308 for val in values: 309 if val < 0.0: 310 raise ValueError('Invalid value (%s). RGB values must be floats in the range [0.0-1.0]' % val) 311 312 313 def SanitizeAlphaValue(alpha): 314 if alpha < 0.0: 315 raise ValueError('Invalid value (%s). Alpha value must be a float in the range [0.0-1.0]' % alpha) 316 317 318 def SanitizeiRGBValues(*values): 319 for val in values: 320 if val < 0 or val > 255 or type(val) != int: 321 raise ValueError('Invalid value (%s). iRGB values must be integers in the range [0-255]' % val) 322 323 324 def SanitizeHSBValues(*values): 325 for val in values: 326 if val < 0.0: 327 val = 0.0 328 elif val > 1.0: 329 val = 1.0 330 331 332 def SanitizeHexValue(value): 333 if type(value) not in (str, unicode) or not (value.startswith('0x') or value.startswith('#')): 334 raise ValueError("Invalid value (%s). HexARGB value must be a string on the form '0xFF00FF00' or '#FF00FF00'" % value) 335 336 337 def GetColor(baseColor, alpha, brightness = None, saturation = None): 338 myColor = Color(*baseColor) 339 myColor.SetAlpha(alpha) 340 if brightness: 341 myColor.SetBrightness(brightness) 342 if saturation: 343 myColor.SetSaturation(saturation) 344 return myColor.GetRGBA() 345 346 347 def GetColorIntFromRGBA(r, g, b, a = None, *args): 348 newR = int(round(r * 255)) 349 rValue = newR * 65536 350 newG = int(round(g * 255)) 351 gValue = newG * 256 352 bValue = int(round(b * 255)) 353 retColor = rValue + gValue + bValue 354 retColor -= 16777216 355 return retColor