Module: Cura::Termbox::ColorMapper

Defined in:
lib/cura/termbox/color_mapper.rb

Overview

A cached map comparing a color’s rgb values with the 256 terminal color codes.

Constant Summary collapse

COLOR_CODES =
[
  Color.new(0, 0, 0),
  Color.new(128, 0, 0),
  Color.new(0, 128, 0),
  Color.new(128, 128, 0),
  Color.new(0, 0, 128),
  Color.new(128, 0, 128),
  Color.new(0, 128, 128),
  Color.new(192, 192, 192),
  Color.new(128, 128, 128),
  Color.new(255, 0, 0),
  Color.new(0, 255, 0),
  Color.new(255, 255, 0),
  Color.new(0, 0, 255),
  Color.new(255, 0, 255),
  Color.new(0, 255, 255),
  Color.new(255, 255, 255),
  Color.new(0, 0, 0),
  Color.new(0, 0, 95),
  Color.new(0, 0, 135),
  Color.new(0, 0, 175),
  Color.new(0, 0, 215),
  Color.new(0, 0, 255),
  Color.new(0, 95, 0),
  Color.new(0, 95, 95),
  Color.new(0, 95, 135),
  Color.new(0, 95, 175),
  Color.new(0, 95, 215),
  Color.new(0, 95, 255),
  Color.new(0, 135, 0),
  Color.new(0, 135, 95),
  Color.new(0, 135, 135),
  Color.new(0, 135, 175),
  Color.new(0, 135, 215),
  Color.new(0, 135, 255),
  Color.new(0, 175, 0),
  Color.new(0, 175, 95),
  Color.new(0, 175, 135),
  Color.new(0, 175, 175),
  Color.new(0, 175, 215),
  Color.new(0, 175, 255),
  Color.new(0, 215, 0),
  Color.new(0, 215, 95),
  Color.new(0, 215, 135),
  Color.new(0, 215, 175),
  Color.new(0, 215, 215),
  Color.new(0, 215, 255),
  Color.new(0, 255, 0),
  Color.new(0, 255, 95),
  Color.new(0, 255, 135),
  Color.new(0, 255, 175),
  Color.new(0, 255, 215),
  Color.new(0, 255, 255),
  Color.new(95, 0, 0),
  Color.new(95, 0, 95),
  Color.new(95, 0, 135),
  Color.new(95, 0, 175),
  Color.new(95, 0, 215),
  Color.new(95, 0, 255),
  Color.new(95, 95, 0),
  Color.new(95, 95, 95),
  Color.new(95, 95, 135),
  Color.new(95, 95, 175),
  Color.new(95, 95, 215),
  Color.new(95, 95, 255),
  Color.new(95, 135, 0),
  Color.new(95, 135, 95),
  Color.new(95, 135, 135),
  Color.new(95, 135, 175),
  Color.new(95, 135, 215),
  Color.new(95, 135, 255),
  Color.new(95, 175, 0),
  Color.new(95, 175, 95),
  Color.new(95, 175, 135),
  Color.new(95, 175, 175),
  Color.new(95, 175, 215),
  Color.new(95, 175, 255),
  Color.new(95, 215, 0),
  Color.new(95, 215, 95),
  Color.new(95, 215, 135),
  Color.new(95, 215, 175),
  Color.new(95, 215, 215),
  Color.new(95, 215, 255),
  Color.new(95, 255, 0),
  Color.new(95, 255, 95),
  Color.new(95, 255, 135),
  Color.new(95, 255, 175),
  Color.new(95, 255, 215),
  Color.new(95, 255, 255),
  Color.new(135, 0, 0),
  Color.new(135, 0, 95),
  Color.new(135, 0, 135),
  Color.new(135, 0, 175),
  Color.new(135, 0, 215),
  Color.new(135, 0, 255),
  Color.new(135, 95, 0),
  Color.new(135, 95, 95),
  Color.new(135, 95, 135),
  Color.new(135, 95, 175),
  Color.new(135, 95, 215),
  Color.new(135, 95, 255),
  Color.new(135, 135, 0),
  Color.new(135, 135, 95),
  Color.new(135, 135, 135),
  Color.new(135, 135, 175),
  Color.new(135, 135, 215),
  Color.new(135, 135, 255),
  Color.new(135, 175, 0),
  Color.new(135, 175, 95),
  Color.new(135, 175, 135),
  Color.new(135, 175, 175),
  Color.new(135, 175, 215),
  Color.new(135, 175, 255),
  Color.new(135, 215, 0),
  Color.new(135, 215, 95),
  Color.new(135, 215, 135),
  Color.new(135, 215, 175),
  Color.new(135, 215, 215),
  Color.new(135, 215, 255),
  Color.new(135, 255, 0),
  Color.new(135, 255, 95),
  Color.new(135, 255, 135),
  Color.new(135, 255, 175),
  Color.new(135, 255, 215),
  Color.new(135, 255, 255),
  Color.new(175, 0, 0),
  Color.new(175, 0, 95),
  Color.new(175, 0, 135),
  Color.new(175, 0, 175),
  Color.new(175, 0, 215),
  Color.new(175, 0, 255),
  Color.new(175, 95, 0),
  Color.new(175, 95, 95),
  Color.new(175, 95, 135),
  Color.new(175, 95, 175),
  Color.new(175, 95, 215),
  Color.new(175, 95, 255),
  Color.new(175, 135, 0),
  Color.new(175, 135, 95),
  Color.new(175, 135, 135),
  Color.new(175, 135, 175),
  Color.new(175, 135, 215),
  Color.new(175, 135, 255),
  Color.new(175, 175, 0),
  Color.new(175, 175, 95),
  Color.new(175, 175, 135),
  Color.new(175, 175, 175),
  Color.new(175, 175, 215),
  Color.new(175, 175, 255),
  Color.new(175, 215, 0),
  Color.new(175, 215, 95),
  Color.new(175, 215, 135),
  Color.new(175, 215, 175),
  Color.new(175, 215, 215),
  Color.new(175, 215, 255),
  Color.new(175, 255, 0),
  Color.new(175, 255, 95),
  Color.new(175, 255, 135),
  Color.new(175, 255, 175),
  Color.new(175, 255, 215),
  Color.new(175, 255, 255),
  Color.new(215, 0, 0),
  Color.new(215, 0, 95),
  Color.new(215, 0, 135),
  Color.new(215, 0, 175),
  Color.new(215, 0, 215),
  Color.new(215, 0, 255),
  Color.new(215, 95, 0),
  Color.new(215, 95, 95),
  Color.new(215, 95, 135),
  Color.new(215, 95, 175),
  Color.new(215, 95, 215),
  Color.new(215, 95, 255),
  Color.new(215, 135, 0),
  Color.new(215, 135, 95),
  Color.new(215, 135, 135),
  Color.new(215, 135, 175),
  Color.new(215, 135, 215),
  Color.new(215, 135, 255),
  Color.new(215, 175, 0),
  Color.new(215, 175, 95),
  Color.new(215, 175, 135),
  Color.new(215, 175, 175),
  Color.new(215, 175, 215),
  Color.new(215, 175, 255),
  Color.new(215, 215, 0),
  Color.new(215, 215, 95),
  Color.new(215, 215, 135),
  Color.new(215, 215, 175),
  Color.new(215, 215, 215),
  Color.new(215, 215, 255),
  Color.new(215, 255, 0),
  Color.new(215, 255, 95),
  Color.new(215, 255, 135),
  Color.new(215, 255, 175),
  Color.new(215, 255, 215),
  Color.new(215, 255, 255),
  Color.new(255, 0, 0),
  Color.new(255, 0, 95),
  Color.new(255, 0, 135),
  Color.new(255, 0, 175),
  Color.new(255, 0, 215),
  Color.new(255, 0, 255),
  Color.new(255, 95, 0),
  Color.new(255, 95, 95),
  Color.new(255, 95, 135),
  Color.new(255, 95, 175),
  Color.new(255, 95, 215),
  Color.new(255, 95, 255),
  Color.new(255, 135, 0),
  Color.new(255, 135, 95),
  Color.new(255, 135, 135),
  Color.new(255, 135, 175),
  Color.new(255, 135, 215),
  Color.new(255, 135, 255),
  Color.new(255, 175, 0),
  Color.new(255, 175, 95),
  Color.new(255, 175, 135),
  Color.new(255, 175, 175),
  Color.new(255, 175, 215),
  Color.new(255, 175, 255),
  Color.new(255, 215, 0),
  Color.new(255, 215, 95),
  Color.new(255, 215, 135),
  Color.new(255, 215, 175),
  Color.new(255, 215, 215),
  Color.new(255, 215, 255),
  Color.new(255, 255, 0),
  Color.new(255, 255, 95),
  Color.new(255, 255, 135),
  Color.new(255, 255, 175),
  Color.new(255, 255, 215),
  Color.new(255, 255, 255),
  Color.new(8, 8, 8),
  Color.new(18, 18, 18),
  Color.new(28, 28, 28),
  Color.new(38, 38, 38),
  Color.new(48, 48, 48),
  Color.new(58, 58, 58),
  Color.new(68, 68, 68),
  Color.new(78, 78, 78),
  Color.new(88, 88, 88),
  Color.new(96, 96, 96),
  Color.new(102, 102, 102),
  Color.new(118, 118, 118),
  Color.new(128, 128, 128),
  Color.new(138, 138, 138),
  Color.new(148, 148, 148),
  Color.new(158, 158, 158),
  Color.new(168, 168, 168),
  Color.new(178, 178, 178),
  Color.new(188, 188, 188),
  Color.new(198, 198, 198),
  Color.new(208, 208, 208),
  Color.new(218, 218, 218),
  Color.new(228, 228, 228),
  Color.new(238, 238, 238)
]
CACHE =
{}

Class Method Summary collapse

Class Method Details

.code(color, _number_of_colors = 256) ⇒ Integer

Find the closest terminal color code from the given RGB values.

Parameters:

  • number_of_colors (#to_i)

    The number of colors in the code list to search. 9 is Termbox without 256 colors enabled I.E. 3-bit.

Returns:

  • (Integer)


339
340
341
342
343
344
345
346
347
348
349
350
351
352
# File 'lib/cura/termbox/color_mapper.rb', line 339

def code(color, _number_of_colors=256)
  code = CACHE[color.hex]

  if code.nil?
    # code = find_closest_code(rgb, number_of_colors)

    distances = COLOR_CODES.map { |code| code - color }
    code = distances.each_with_index.min[1]

    CACHE[color.hex] = code
  end

  code
end