74 lines
1.6 KiB
Python
74 lines
1.6 KiB
Python
# noinspection PyPackageRequirements
|
|
import wx
|
|
|
|
|
|
def Brighten(color, factor):
|
|
""" 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(round(r), round(g), round(b), round(a))
|
|
|
|
|
|
def Darken(color, factor):
|
|
""" 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(round(r), round(g), round(b), round(a))
|
|
|
|
|
|
def _getBrightness(color):
|
|
"""
|
|
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, 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, e_color, delta):
|
|
"""
|
|
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(round(tR), round(tG), round(tB), round((sA + eA) / 2))
|