Poodletooth-iLand/panda/python/Lib/site-packages/wx/lib/colourutils.py
2015-03-06 06:11:40 -06:00

118 lines
3.4 KiB
Python

#----------------------------------------------------------------------
# Name: colourutils.py
# Purpose: Some useful colour-related utility functions.
#
# Author: Cody Precord
#
# Created: 13-March-2001
# Copyright: (c) 2001 by Total Control Software
# Licence: wxWindows license
# Tags: phoenix-port, documented
#----------------------------------------------------------------------
"""
Some useful colour-related utility functions.
"""
__author__ = "Cody Precord <cprecord@editra.org>"
import wx
# Used on OSX to get access to carbon api constants
if wx.Platform == '__WXMAC__':
try:
import Carbon.Appearance
except ImportError:
CARBON = False
else:
CARBON = True
#-----------------------------------------------------------------------------#
def AdjustAlpha(colour, alpha):
"""
Adjust the alpha of a given colour
:param integer `alpha`: the new value for the colour alpha channel (between 0
and 255).
:rtype: :class:`Colour`
:returns: A new :class:`Colour` with the alpha channel specified as input
"""
return wx.Colour(colour.Red(), colour.Green(), colour.Blue(), alpha)
def AdjustColour(color, percent, alpha=wx.ALPHA_OPAQUE):
"""
Brighten/darken input colour by `percent` and adjust alpha
channel if needed. Returns the modified color.
:param Colour `color`: color object to adjust;
:param integer `percent`: percent to adjust +(brighten) or -(darken);
:param integer `alpha`: amount to adjust alpha channel.
:rtype: :class:`Colour`
:returns: A new darkened/lightened :class:`Colour` with the alpha channel
specified as input
"""
radj, gadj, badj = [ int(val * (abs(percent) / 100.))
for val in color.Get(includeAlpha=False) ]
if percent < 0:
radj, gadj, badj = [ val * -1 for val in [radj, gadj, badj] ]
else:
radj, gadj, badj = [ val or 255 for val in [radj, gadj, badj] ]
red = min(color.Red() + radj, 255)
green = min(color.Green() + gadj, 255)
blue = min(color.Blue() + badj, 255)
return wx.Colour(red, green, blue, alpha)
def BestLabelColour(color, bw=False):
"""
Get the best color to use for the label that will be drawn on
top of the given color.
:param Colour `color`: background color that text will be drawn on;
:param bool `bw`: If ``True``, only return black or white.
:rtype: :class:`Colour`
"""
avg = sum(color.Get()) / 3
if avg > 192:
txt_color = wx.BLACK
elif avg > 128:
if bw: txt_color = wx.BLACK
else: txt_color = AdjustColour(color, -95)
elif avg < 64:
txt_color = wx.WHITE
else:
if bw: txt_color = wx.WHITE
else: txt_color = AdjustColour(color, 95)
return txt_color
def GetHighlightColour():
"""
Gets the default highlight color.
:rtype: :class:`Colour`
"""
if wx.Platform == '__WXMAC__':
if CARBON:
if wx.VERSION < (2, 9, 0, 0, ''):
# kThemeBrushButtonPressedLightHighlight
brush = wx.Brush(wx.BLACK)
brush.MacSetTheme(Carbon.Appearance.kThemeBrushFocusHighlight)
return brush.GetColour()
else:
color = wx.MacThemeColour(Carbon.Appearance.kThemeBrushFocusHighlight)
return color
# Fallback to text highlight color
return wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT)