NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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