home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / prog / source / dkbsrc.lzh / COLOUR.C < prev    next >
C/C++ Source or Header  |  1990-07-07  |  4KB  |  112 lines

  1. /*****************************************************************************
  2. *
  3. *                                   colour.c
  4. *
  5. *   from DKBTrace (c) 1990  David Buck
  6. *
  7. *  This module implements routines to manipulate colours.
  8. *
  9. * This software is freely distributable. The source and/or object code may be
  10. * copied or uploaded to communications services so long as this notice remains
  11. * at the top of each file.  If any changes are made to the program, you must
  12. * clearly indicate in the documentation and in the programs startup message
  13. * who it was who made the changes. The documentation should also describe what
  14. * those changes were. This software may not be included in whole or in
  15. * part into any commercial package without the express written consent of the
  16. * author.  It may, however, be included in other public domain or freely
  17. * distributed software so long as the proper credit for the software is given.
  18. *
  19. * This software is provided as is without any guarantees or warranty. Although
  20. * the author has attempted to find and correct any bugs in the software, he
  21. * is not responsible for any damage caused by the use of the software.  The
  22. * author is under no obligation to provide service, corrections, or upgrades
  23. * to this package.
  24. *
  25. * Despite all the legal stuff above, if you do find bugs, I would like to hear
  26. * about them.  Also, if you have any comments or questions, you may contact me
  27. * at the following address:
  28. *
  29. *     David Buck
  30. *     22C Sonnet Cres.
  31. *     Nepean Ontario
  32. *     Canada, K2H 8W7
  33. *
  34. *  I can also be reached on the following bulleton boards:
  35. *
  36. *     ATX              (613) 526-4141
  37. *     OMX              (613) 731-3419
  38. *     Mystic           (613) 731-0088 or (613) 731-6698
  39. *
  40. *  Fidonet:   1:163/109.9
  41. *  Internet:  David_Buck@Carleton.CA
  42. *
  43. *  IBM Port by Aaron A. Collins. Aaron may be reached on the following BBS'es:
  44. *
  45. *     Lattice BBS                      (708) 916-1200
  46. *     The Information Exchange BBS     (708) 945-5575
  47. *     Stillwaters BBS                  (708) 403-2826
  48. *
  49. *****************************************************************************/
  50.  
  51.  
  52. #include "frame.h"
  53. #include "vector.h"
  54. #include "dkbproto.h"
  55.  
  56. #define FABS(x) ((x) < 0.0 ? (0.0 - (x)) : (x))
  57.  
  58. DBL Colour_Distance (colour1, colour2)
  59.    COLOUR *colour1, *colour2;
  60.    {
  61.    return (FABS (colour1->Red - colour2->Red)
  62.          + FABS (colour1->Green - colour2->Green)
  63.          + FABS (colour1->Blue - colour2->Blue));
  64.    }
  65.  
  66. void Add_Colour (result, colour1, colour2)
  67.    COLOUR *result, *colour1, *colour2;
  68.    {
  69.    result->Red = colour1->Red + colour2->Red;
  70.    result->Green = colour1->Green + colour2->Green;
  71.    result->Blue = colour1->Blue + colour2->Blue;
  72.    result->Alpha = colour1->Alpha + colour2->Alpha;
  73.    }
  74.  
  75. void Scale_Colour (result, colour, factor)
  76.    COLOUR *result, *colour;
  77.    DBL factor;
  78.    {
  79.    result->Red = colour->Red * factor;
  80.    result->Green = colour->Green * factor;
  81.    result->Blue = colour->Blue * factor;
  82.    result->Alpha = colour->Alpha * factor;
  83.    }
  84.  
  85. void Clip_Colour (result, colour)
  86.    COLOUR *result, *colour;
  87.    {
  88.    if (colour -> Red > 1.0)
  89.       result -> Red = 1.0;
  90.    else if (colour -> Red < 0.0)
  91.       result -> Red = 0.0;
  92.    else result -> Red = colour -> Red;
  93.  
  94.    if (colour -> Green > 1.0)
  95.       result -> Green = 1.0;
  96.    else if (colour -> Green < 0.0)
  97.       result -> Green = 0.0;
  98.    else result -> Green = colour -> Green;
  99.  
  100.    if (colour -> Blue > 1.0)
  101.       result -> Blue = 1.0;
  102.    else if (colour -> Blue < 0.0)
  103.       result -> Blue = 0.0;
  104.    else result -> Blue = colour -> Blue;
  105.  
  106.    if (colour -> Alpha > 1.0)
  107.       result -> Alpha = 1.0;
  108.    else if (colour -> Alpha < 0.0)
  109.       result -> Alpha = 0.0;
  110.    else result -> Alpha = colour -> Alpha;
  111.    }
  112.