CattailArtNSColor

What is CattailArtNSColor?

CattailArtNSColor is an Objective C Class you can use in your Cocoa application project that provides functions to get arrays of NSColor objects based on a root color and your chosen art method (complement, triad, tetradic, etc.).

What is it good for?

Dynamically building eye-pleasing color schemes. Fine-tuning gradients beyond the simple 2-color ones.

How do I use CattailArtNSColor?

  1. Download the 2 files (.h and .m) and add them to your project.
    CattailArtNSColor.h
    CattailArtNSColor.m
  2. Add this line of code to the beginning of the file you want to use it in.
    #import "CattailArtNSColor.h"
  3. Call one of the functions.
      NSColor *rootColor = [NSColor colorWithCalibratedRed:1.0 green:1.0 blue:0.0 alpha:1.0];
    
      NSArray *colors = [CattailArtNSColor NewtonFlameArray:rootColor 
          numberOfColorsInt:3 
          hueStepDegreesCGFloat: 60.0
          saturationStepDegreesCGFloat: 0.0
          brightnessStepDegreesCGFloat:15.0 
          alignmentInt:1];
    
  4. Use your array of color objects. There a lot of things you can do with color objects, this is only a few of them.
      // This is something you can do within a NSView subclass.
      NSGradient *gradient = [[NSGradient alloc] initWithColors:colors];
      [gradient drawInRect:[self bounds] angle:270];
    
      // This is my favorite gradient that looks like a sunset.
    
      NSColor *rootColorBlue = [NSColor colorWithCalibratedRed:0.0 green:0.5 blue:1.0 alpha:1.0];
      NSColor *rootColorRed = [NSColor colorWithCalibratedRed:1.0 green:1.0 blue:0.0 alpha:1.0];
    
      NSArray  *colorsBlue = [CattailArtNSColor RGBFlameArray:rootColorBlue 
          numberOfColorsInt:3
          hueStepDegreesCGFloat: 15.0
          saturationStepDegreesCGFloat: 0.0
          brightnessStepDegreesCGFloat:30.0 
          alignmentInt:-1];
    
      NSArray  *colorsRed = [CattailArtNSColor NewtonFlameArray:rootColorRed 
          numberOfColorsInt:3 
          hueStepDegreesCGFloat: 60.0
          saturationStepDegreesCGFloat: 0.0
          brightnessStepDegreesCGFloat:15.0 
          alignmentInt:1];
       
      NSMutableArray *colors = [[NSMutableArray alloc] init];
      [colors addObjectsFromArray:colorsBlue];
      [colors addObjectsFromArray:colorsRed];
    
      [gradientView setGradient:colors];
    

    See the code in action in my CattailArtNSColorDemo:
    http://cattail.nu/mac/applications/CattailArtNSColorDemo/

Parameter definitions:

rootColor NSColor object that the array will be built from.
tetradicDegreesCGFloat CGFloat that defines how many degrees apart the tetradic colors should be. 0.0 to 360.0.
tetradic
numberOfColorsInt Integer that is the number of colors to return in the array. For analogous, saturation, value, chromatic, and flame colors.
stepDegreesCGFloat CGFloat that defines how much difference there is between colors. 0.0 to 360.0 for hue. 0.0 to 100.0 for saturation and value.
alignmentInt Integer to specify where the rootColor appears in a flame array. alignment = -1 (left) 0 (center) or 1 (right).

Typical Disclaimer

The code is provided as-is and will likely get updated as I find things to change. It's also one of my learning projects so it may not be totally streamlined and I highly recommend you read it before you implement it. If you find things that could be done better, please let me know (preferably with a working code fix): T@cattail.nu


Change History:
2009-01-12: Created.