Class: Color::Palette::MonoContrast

### Home Classes Methods

### In Files

- lib/color/palette/monocontrast.rb

### Parent

Object

### Methods

- ::new
- #brightness_diff
- #calculate_foreground
- #color_diff
- #regenerate

### Files

- Manifest.txt

### Class/Module Index

Quicksearch

- Color
- Color::CMYK
- Color::CSS
- Color::GrayScale
- Color::GrayScale
- Color::HSL
- Color::Palette
- Color::Palette::AdobeColor
- Color::Palette::Gimp
- Color::Palette::MonoContrast
- Color::RGB
- Color::RGB::Metallic
- Color::YIQ
- Object
- Object::GreyScale

No matching classes.

# Color::Palette::MonoContrast

Generates a monochromatic constrasting colour palette for background and foreground. What does this mean?

Monochromatic: A single colour is used to generate the base palette, and this colour is lightened five times and darkened five times to provide eleven distinct colours.

Contrasting: The foreground is also generated as a monochromatic colour palette; however, all generated colours are tested to see that they are appropriately contrasting to ensure maximum readability of the foreground against the background.

### Constants

DEFAULT_MINIMUM_BRIGHTNESS_DIFF
DEFAULT_MINIMUM_COLOR_DIFF

### Attributes

background[R]

Hash of CSS background colour values.

This is always 11 values:

0 | The starting colour.
+1..+5 | Lighter colours.
-1..-5 | Darker colours.

foreground[R]

Hash of CSS foreground colour values.

This is always 11 values:

0 | The starting colour.
+1..+5 | Lighter colours.
-1..-5 | Darker colours.

minimum_brightness_diff[R]

The minimum brightness difference between the background and the foreground, and must be between 0..1. Setting this value will regenerate the palette based on the base colours. The default value for this is 125 / 255.0. If this value is set to `nil`, it will be restored to the default.

minimum_color_diff[R]

The minimum colour difference between the background and the foreground, and must be between 0..3. Setting this value will regenerate the palette based on the base colours. The default value for this is 500 / 255.0.

### Public Class Methods

new(background, foreground = nil) click to toggle source

Generate the initial palette.

    # File lib/color/palette/monocontrast.rb, line 73
    def initialize(background, foreground = nil)
      @minimum_brightness_diff = DEFAULT_MINIMUM_BRIGHTNESS_DIFF
      @minimum_color_diff = DEFAULT_MINIMUM_COLOR_DIFF
      regenerate(background, foreground)
    end

### Public Instance Methods

brightness_diff(c1, c2) click to toggle source

Returns the absolute difference between the brightness levels of two colours. This will be a decimal value between 0 and 1. W3C accessibility guidelines for colour contrast suggest that this value be at least approximately 0.49 (125 / 255.0) for proper contrast.

    # File lib/color/palette/monocontrast.rb, line 150
    def brightness_diff(c1, c2)
      (c1.brightness - c2.brightness).abs
    end

calculate_foreground(background, foreground) click to toggle source

Given a background colour and a foreground colour, modifies the foreground colour so that it will have enough contrast to be seen against the background colour.

Uses mininum_brightness_diff and minimum_color_diff.

    # File lib/color/palette/monocontrast.rb, line 118
    def calculate_foreground(background, foreground)
      nfg = nil
      # Loop through brighter and darker versions of the foreground color. The
      # numbers here represent the amount of foreground color to mix with
      # black and white.
      [100, 75, 50, 25, 0].each do |percent|
        dfg = foreground.darken_by(percent)
        lfg = foreground.lighten_by(percent)

        dbd = brightness_diff(background, dfg)
        lbd = brightness_diff(background, lfg)

        if lbd > dbd
          nfg = lfg
          nbd = lbd
        else
          nfg = dfg
          nbd = dbd
        end

        ncd = color_diff(background, nfg)

        break if nbd >= @minimum_brightness_diff and ncd >= @minimum_color_diff
      end
      nfg
    end

color_diff(c1, c2) click to toggle source

Returns the contrast between to colours, a decimal value between 0 and

1. W3C accessibility guidelines for {colour

contrast} suggest that this value be at least approximately 1.96 (500 / 255.0) for proper contrast.

    # File lib/color/palette/monocontrast.rb, line 158
    def color_diff(c1, c2)
      r = (c1.r - c2.r).abs
      g = (c1.g - c2.g).abs
      b = (c1.b - c2.b).abs
      r + g + b
    end

regenerate(background, foreground = nil) click to toggle source

Generate the colour palettes.

    # File lib/color/palette/monocontrast.rb, line 80
    def regenerate(background, foreground = nil)
      foreground ||= background
      background = background.to_rgb
      foreground = foreground.to_rgb

      @background = {}
      @foreground = {}

      @background[-5] = background.darken_by(10)
      @background[-4] = background.darken_by(25)
      @background[-3] = background.darken_by(50)
      @background[-2] = background.darken_by(75)
      @background[-1] = background.darken_by(85)
      @background[ 0] = background
      @background[+1] = background.lighten_by(85)
      @background[+2] = background.lighten_by(75)
      @background[+3] = background.lighten_by(50)
      @background[+4] = background.lighten_by(25)
      @background[+5] = background.lighten_by(10)

      @foreground[-5] = calculate_foreground(@background[-5], foreground)
      @foreground[-4] = calculate_foreground(@background[-4], foreground)
      @foreground[-3] = calculate_foreground(@background[-3], foreground)
      @foreground[-2] = calculate_foreground(@background[-2], foreground)
      @foreground[-1] = calculate_foreground(@background[-1], foreground)
      @foreground[ 0] = calculate_foreground(@background[ 0], foreground)
      @foreground[+1] = calculate_foreground(@background[+1], foreground)
      @foreground[+2] = calculate_foreground(@background[+2], foreground)
      @foreground[+3] = calculate_foreground(@background[+3], foreground)
      @foreground[+4] = calculate_foreground(@background[+4], foreground)
      @foreground[+5] = calculate_foreground(@background[+5], foreground)
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.