home *** CD-ROM | disk | FTP | other *** search
/ Freelog 59 / Freelog059.iso / Dossier / Python / pygame-1.6.win32-py2.3.exe / PLATLIB / pygame / color.py < prev    next >
Text File  |  2003-06-07  |  4KB  |  128 lines

  1. ##    pygame - Python Game Library
  2. ##    Copyright (C) 2000-2003  Pete Shinners
  3. ##
  4. ##    This library is free software; you can redistribute it and/or
  5. ##    modify it under the terms of the GNU Library General Public
  6. ##    License as published by the Free Software Foundation; either
  7. ##    version 2 of the License, or (at your option) any later version.
  8. ##
  9. ##    This library is distributed in the hope that it will be useful,
  10. ##    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. ##    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12. ##    Library General Public License for more details.
  13. ##
  14. ##    You should have received a copy of the GNU Library General Public
  15. ##    License along with this library; if not, write to the Free
  16. ##    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17. ##
  18. ##    Pete Shinners
  19. ##    pete@shinners.org
  20.  
  21. """Manipulate colors"""
  22.  
  23.  
  24. try:
  25.     from colordict import THECOLORS
  26. except ImportError:
  27.     #the colordict module isn't available
  28.     THECOLORS = {}
  29.  
  30.  
  31.  
  32. def Color(colorname):
  33.     """pygame.color.Color(colorname) -> RGBA
  34.        Get RGB values from common color names
  35.  
  36.        The color name can be the name of a common english color,
  37.        or a "web" style color in the form of 0xFF00FF. The english
  38.        color names are defined by the standard 'rgb' colors for X11.
  39.        With the hex color formatting you may optionally include an
  40.        alpha value, the formatting is 0xRRGGBBAA. You may also specify
  41.        a hex formatted color by starting the string with a '#'.
  42.        The color name used is case insensitive and whitespace is ignored.
  43.     """
  44.  
  45.     if colorname[:2] == '0x' or colorname[0] == '#': #webstyle
  46.         if colorname[0] == '#':
  47.             colorname = colorname[1:]
  48.         else:
  49.             colorname = colorname[2:]
  50.         a = 255
  51.         try:
  52.             r = int('0x' + colorname[0:2], 16)
  53.             g = int('0x' + colorname[2:4], 16)
  54.             b = int('0x' + colorname[4:6], 16)
  55.             if len(colorname) > 6:
  56.                 a = int('0x' + colorname[6:8], 16)
  57.         except ValueError:
  58.             raise ValueError, "Illegal hex color"
  59.         return r, g, b, a
  60.  
  61.     else: #color name
  62.         #no spaces and lowercase
  63.         name = colorname.replace(' ', '').lower()
  64.         try:
  65.             return THECOLORS[name]
  66.         except KeyError:
  67.             raise ValueError, "Illegal color name, " + name
  68.  
  69.  
  70.  
  71. def _splitcolor(color, defaultalpha=255):
  72.     try:
  73.         second = int(color)
  74.         r = g = b = color
  75.         a = defaultalpha
  76.     except TypeError:
  77.         if len(color) == 4:
  78.             r, g, b, a = color
  79.         elif len(color) == 3:
  80.             r, g, b = color
  81.             a = defaultalpha
  82.     return r, g, b, a
  83.  
  84.  
  85. def add(color1, color2):
  86.     """pygame.color.add(color1, color2) -> RGBA
  87.        add two colors
  88.  
  89.        Add the RGB values of two colors together. If one of the
  90.        colors is only a single numeric value, it is applied to the
  91.        RGB components of the first color. Color values will be clamped
  92.        to the maximum color value of 255.
  93.     """
  94.     r1, g1, b1, a1 = _splitcolor(color1)
  95.     r2, g2, b2, a2 = _splitcolor(color2)
  96.     m, i = min, int
  97.     return m(i(r1+r2), 255), m(i(g1+g2), 255), m(i(b1+b2), 255), m(i(a1+a2), 255)
  98.  
  99.  
  100. def subtract(color1, color2):
  101.     """pygame.color.subtract(color1, color2) -> RGBA
  102.        subtract two colors
  103.  
  104.        Subtract the RGB values of two colors together. If one of the
  105.        colors is only a single numeric value, it is applied to the
  106.        RGB components of the first color. Color values will be clamped
  107.        to the minimum color value of 0.
  108.     """
  109.     r1, g1, b1, a1 = _splitcolor(color1)
  110.     r2, g2, b2, a2 = _splitcolor(color2, 0)
  111.     m, i = max, int
  112.     return m(i(r1-r2), 0), m(i(g1-g2), 0), m(i(b1-b2), 0), m(i(a1-a2), 0)
  113.  
  114.  
  115. def multiply(color1, color2):
  116.     """pygame.color.multiply(color1, color2) -> RGBA
  117.        multiply two colors
  118.  
  119.        Multiply the RGB values of two colors together. If one of the
  120.        colors is only a single numeric value, it is applied to the
  121.        RGB components of the first color.
  122.     """
  123.     r1, g1, b1, a1 = _splitcolor(color1)
  124.     r2, g2, b2, a2 = _splitcolor(color2)
  125.     m, i = min, int
  126.     return m(i(r1*r2)/255, 255), m(i(g1*g2)/255, 255), m(i(b1*b2)/255, 255), m(i(a1*a2)/255, 255)
  127.  
  128.