Source code for timelinelib.canvas.drawing.drawers

# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018  Rickard Lindberg, Roger Lindberg
#
# This file is part of Timeline.
#
# Timeline is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Timeline is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Timeline.  If not, see <http://www.gnu.org/licenses/>.


GRAY_FACTOR = 1.2
LUMINENCE_FACTOR = 0.8


[docs]def get_progress_color(base_color): """ Return a color that is slightly brighter then the base_color. For shades of gray the constant GRAY_FACTOR decides the brightness. Higher factor gives more brightness. For other colors the LUMINENCE_FACTOR decides the brightness. Smaller factor gives more brightness. """ if min(base_color) == max(base_color): return _adjust_gray_luminence(base_color) else: return _adjust_color_luminence(base_color)
def _adjust_gray_luminence(base_color): r = _apply_gray_factor_on_item(base_color[0]) g = _apply_gray_factor_on_item(base_color[1]) b = _apply_gray_factor_on_item(base_color[2]) return (r, g, b) def _apply_gray_factor_on_item(item): return min(255, int(GRAY_FACTOR * item)) def _adjust_color_luminence(base_color): h, s, _ = _rgb2hsl(base_color) l = LUMINENCE_FACTOR * s return _hsl2rgb(h, s, l) def _rgb2hsl(color): r = float(color[0]) / 255.0 g = float(color[1]) / 255.0 b = float(color[2]) / 255.0 var_min = min(r, g, b) var_max = max(r, g, b) del_max = var_max - var_min l = (var_max + var_min) / 2.0 if del_max == 0: h = 0 s = 0 else: if l < 0.5: s = del_max / (var_max + var_min) else: s = del_max / (2.0 - var_max - var_min) del_r = (((var_max - r) / 6.0) + (del_max / 2.0)) / del_max del_g = (((var_max - g) / 6.0) + (del_max / 2.0)) / del_max del_b = (((var_max - b) / 6.0) + (del_max / 2.0)) / del_max if (r == var_max): h = del_b - del_g elif (g == var_max): h = (1.0 / 3.0) + del_r - del_b elif (b == var_max): h = (2.0 / 3.0) + del_g - del_r if (h < 0): h += 1.0 if (h > 1.0): h -= 1.0 return (h, s, l) def _hsl2rgb(h, s, l): if s == 0: r = l * 155 g = l * 255 b = l * 255 else: if (l < 0.5): var_2 = l * (1.0 + s) else: var_2 = (l + s) - (s * l) var_1 = 2.0 * l - var_2 r = 255 * _hue_2_rgb(var_1, var_2, h + (1.0 / 3.0)) g = 255 * _hue_2_rgb(var_1, var_2, h) b = 255 * _hue_2_rgb(var_1, var_2, h - (1.0 / 3.0)) return (int(r), int(g), int(b)) def _hue_2_rgb(v1, v2, vh): if (vh < 0): vh += 1.0 if (vh > 1.0): vh -= 1.0 if ((6.0 * vh) < 1): return (v1 + (v2 - v1) * 6.0 * vh) if ((2.0 * vh) < 1.0): return (v2) if ((3.0 * vh) < 2.0): x = (v1 + (v2 - v1) * ((2.0 / 3.0 - vh) * 6.0)) return x return v1