Changeset 78

Show
Ignore:
Timestamp:
03/20/08 13:24:03 (4 years ago)
Author:
lgs
Message:

Automatically adjust the light of the color scheme based on the number of keys. Patch based on the patch by jae_AT_zhar.net. Fixes #8

Location:
trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/color.py

    r45 r78  
    4949            clamp(0.0, 1.0, b + amount)) 
    5050     
    51 def generateColorscheme(masterColor, keys, light=0.098): 
     51def generateColorscheme(masterColor, keys): 
    5252    """Generates a dictionary where the keys match the keys argument and 
    5353    the values are colors derivated from the masterColor. 
    5454 
    55     Each color is a lighter version of masterColor separated by a difference 
    56     given by the light argument. 
     55    Each color is a lighter version of masterColor. This difference is 
     56    computed based on the number of keys. 
    5757 
    5858    The masterColor is given in a hex string format. 
    5959    """ 
    6060    r, g, b = hex2rgb(masterColor) 
     61    light = 1.0 / (len(keys)*2) 
    6162    return dict([(key, lighten(r, g, b, light * i)) 
    6263                 for i, key in enumerate(keys)]) 
  • trunk/tests/color.py

    r44 r78  
    6868        scheme = pycha.color.generateColorscheme(color, keys) 
    6969 
    70  
    7170        self._assertColors(scheme['k1'], (1, 0, 0), 3) 
    72         self._assertColors(scheme['k2'], (1, 0.098, 0.098), 3) 
    73         self._assertColors(scheme['k3'], (1, 0.196, 0.196), 3) 
    74         self._assertColors(scheme['k4'], (1, 0.294, 0.294), 3) 
    75  
    76         scheme = pycha.color.generateColorscheme(color, keys, 0.1) 
    77         self._assertColors(scheme['k1'], (1, 0, 0), 1) 
    78         self._assertColors(scheme['k2'], (1, 0.1, 0.1), 1) 
    79         self._assertColors(scheme['k3'], (1, 0.2, 0.2), 1) 
    80         self._assertColors(scheme['k4'], (1, 0.3, 0.3), 1) 
     71        self._assertColors(scheme['k2'], (1, 0.125, 0.125), 3) 
     72        self._assertColors(scheme['k3'], (1, 0.250, 0.250), 3) 
     73        self._assertColors(scheme['k4'], (1, 0.375, 0.375), 3) 
    8174 
    8275    def test_defaultColorScheme(self): 
     
    9285            self.assert_(pycha.color.colorSchemes.has_key(color)) 
    9386 
     87    def test_autoLighting(self): 
     88        """This test ensures that the colors don't get to white too fast. 
     89         
     90        See bug #8. 
     91        """ 
     92        # we have a lot of keys 
     93        n = 50 
     94        keys = range(n) 
     95        color = '#ff0000' 
     96        scheme = pycha.color.generateColorscheme(color, keys) 
     97         
     98        # ensure that the last color is not completely white 
     99        color = scheme[n-1] 
     100        self.assertAlmostEqual(color[0], 1.0, 4) # the red component was already 1 
     101        self.assertNotAlmostEqual(color[1], 1.0, 4) 
     102        self.assertNotAlmostEqual(color[2], 1.0, 4) 
     103         
    94104def test_suite(): 
    95105    return unittest.TestSuite((