Files
pyfa/gui/utils/color.py
2017-06-12 18:14:29 -04:00

74 lines
1.6 KiB
Python

# noinspection PyPackageRequirements
import wx
def Brighten(color: wx.Colour, factor: [0, 1]):
""" Brightens a Color using a factor between 0 and 1"""
r, g, b, a = color
factor = min(max(factor, 0), 1)
r += (255 - r) * factor
b += (255 - b) * factor
g += (255 - g) * factor
return wx.Colour(r, g, b, a)
def Darken(color: wx.Colour, factor: [0, 1]):
""" Darkens a Color using a factor between 0 and 1"""
r, g, b, a = color
factor = min(max(factor, 0), 1)
factor = 1 - factor
r *= factor
g *= factor
b *= factor
r = min(max(r, 0), 255)
b = min(max(b, 0), 255)
g = min(max(g, 0), 255)
return wx.Colour(r, g, b, a)
def _getBrightness(color: wx.Colour):
"""
Calculates brightness of color
http://stackoverflow.com/a/596243/788054
"""
r, g, b, a = color
return 0.299*r + 0.587*g + 0.114*b
def GetSuitable(color: wx.Colour, factor: [0, 1]):
"""
Calculates a suitable color based on original color (wx.Colour), its
brightness, and a factor (darken/brighten by factor depending on
calculated brightness)
"""
brightness = _getBrightness(color)
if brightness > 129:
return Darken(color, factor)
else:
return Brighten(color, factor)
def CalculateTransition(s_color: wx.Colour, e_color: wx.Colour, delta: [0, 1]):
"""
Calculates the color between a given start and end color using a delta
value between 0 and 1
"""
sR, sG, sB, sA = s_color
eR, eG, eB, eA = e_color
tR = sR + (eR - sR) * delta
tG = sG + (eG - sG) * delta
tB = sB + (eB - sB) * delta
return wx.Colour(tR, tG, tB, (sA + eA)/2)