74 lines
1.6 KiB
Python
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)
|