class Term::ANSIColor::RGBTriple
Attributes
values[R]
Public Class Methods
[](thing)
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 39 def self.[](thing) case when thing.respond_to?(:to_rgb_triple) then thing when thing.respond_to?(:to_ary) then RGBTriple.from_array(thing.to_ary) when thing.respond_to?(:to_str) then RGBTriple.from_html(thing.to_str.sub(/\Aon_/, '')) # XXX somewhat hacky when thing.respond_to?(:to_hash) then RGBTriple.from_hash(thing.to_hash) else raise ArgumentError, "cannot convert #{thing.inspect} into #{self}" end end
from_array(array)
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 35 def self.from_array(array) new(*array) end
from_hash(options)
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 27 def self.from_hash(options) new( convert_value(options[:red]), convert_value(options[:green]), convert_value(options[:blue]) ) end
from_html(html)
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 18 def self.from_html(html) case html when /\A#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\z/i new(*$~.captures.map { |c| convert_value(c.to_i(16)) }) when /\A#([0-9a-f])([0-9a-f])([0-9a-f])\z/i new(*$~.captures.map { |c| convert_value(c.to_i(16) << 4) }) end end
new(red, green, blue)
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 49 def initialize(red, green, blue) @values = [ red, green, blue ] end
Private Class Methods
convert_value(color)
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 8 def self.convert_value(color) color.nil? and raise ArgumentError, "missing color value" color = Integer(color) (0..0xff) === color or raise ArgumentError, "color value #{color.inspect} not between 0 and 255" color end
Public Instance Methods
==(other)
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 86 def ==(other) @values == other.values end
blue()
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 61 def blue @values[2] end
distance_to(other, options = {})
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 90 def distance_to(other, options = {}) options[:metric] ||= RGBColorMetrics::CIELab options[:metric].distance(self, other) end
gradient_to(other, options = {})
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 101 def gradient_to(other, options = {}) options[:steps] ||= 16 steps = options[:steps].to_i steps < 2 and raise ArgumentError, 'at least 2 steps are required' changes = other.values.zip(@values).map { |x, y| x - y } current = self gradient = [ current.dup ] s = steps - 1 while s > 1 current = current.dup gradient << current 3.times do |i| current.values[i] += changes[i] / (steps - 1) end s -= 1 end gradient << other end
gray?()
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 65 def gray? red != 0 && red != 0xff && red == green && green == blue && blue == red end
green()
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 57 def green @values[1] end
html()
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 69 def html s = '#' @values.each { |c| s << '%02x' % c } s end
initialize_copy(other)
click to toggle source
Calls superclass method
# File lib/term/ansicolor/rgb_triple.rb, line 95 def initialize_copy(other) r = super other.instance_variable_set :@values, @values.dup r end
red()
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 53 def red @values[0] end
to_a()
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 82 def to_a @values.dup end
to_rgb_triple()
click to toggle source
# File lib/term/ansicolor/rgb_triple.rb, line 75 def to_rgb_triple self end