Use a contrasting text color in pedigree view

White text shows up better in boxes with a dark background color.

Fixes #11799
This commit is contained in:
vantu5z 2020-06-15 13:59:33 +03:00 committed by Nick Hall
parent a6773e3612
commit f290fd9bcf
3 changed files with 38 additions and 2 deletions

View File

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
""" Unittest for utils.py """
import unittest
from ..utils import get_contrast_color
class Test_get_contrast_color(unittest.TestCase):
def setUp(self):
self.black = (0, 0, 0)
self.white = (1, 1, 1)
def test_contrast_black_returns_white(self):
contrast_color = get_contrast_color(self.black)
self.assertEqual(contrast_color, self.white,
"Contrasting color for black did not return white")
def test_contrast_white_returns_black(self):
contrast_color = get_contrast_color(self.white)
self.assertEqual(contrast_color, self.black,
"Contrasting color for white did not return black")
if __name__ == "__main__":
unittest.main()

View File

@ -545,6 +545,15 @@ def rgb_to_hex(rgb):
rgbint = (int(rgb[0] * 255), int(rgb[1] * 255), int(rgb[2] * 255))
return '#%02x%02x%02x' % rgbint
def get_contrast_color(color):
"""
Choose contrast text color (white or black) for provided background.
"""
yiq = (color[0]*299)+(color[1]*587)+(color[2]*114)
if (yiq < 500):
return (1, 1, 1) # 'white'
return (0, 0, 0) # 'black'
def get_link_color(context):
"""
Find the link color for the current theme.

View File

@ -65,7 +65,8 @@ from gramps.gen.config import config
from gramps.gui.views.bookmarks import PersonBookmarks
from gramps.gen.const import CUSTOM_FILTERS, URL_MANUAL_PAGE, URL_WIKISTRING
from gramps.gui.dialog import RunDatabaseRepair, ErrorDialog
from gramps.gui.utils import color_graph_box, hex_to_rgb_float, is_right_click
from gramps.gui.utils import (color_graph_box, hex_to_rgb_float,
is_right_click, get_contrast_color)
from gramps.gen.constfunc import lin
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.sgettext
@ -337,7 +338,8 @@ class PersonBoxWidgetCairo(_PersonWidgetBase):
# text
context.move_to(5, 4)
context.set_source_rgb(0, 0, 0)
fg_color = get_contrast_color(self.bgcolor)
context.set_source_rgb(*fg_color[:3])
PangoCairo.show_layout(context, self.textlayout)
context.restore()
context.get_target().flush()