Class: Termdots::ColorGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/termdots.rb

Overview

Color generator class

Constant Summary collapse

COLOR_MODE_16 =

color mode

1
COLOR_MODE_256 =
2
CT_RGB =

color => [r, g, b]

{
    :black     => [0, 0, 0],
    :red       => [205, 0, 0],
    :green     => [0, 205, 0],
    :yellow    => [205, 205, 0],
    :blue      => [0, 0, 238],
    :magenta   => [205, 0, 205],
    :cyan      => [0, 205, 205],
    :gray      => [229, 229, 229],
    :darkgray  => [127, 127, 127],
    :l_red     => [255, 0, 0],
    :l_green   => [0, 255, 0],
    :l_yellow  => [255, 255, 0],
    :l_blue    => [92, 92, 255],
    :l_magenta => [255, 0, 255],
    :l_cyan    => [0, 255, 255],
    :white     => [255, 255, 255]
}
CT_ANSI =

color => ANSI escape code

{
    :black     => "\033[40m",
    :red       => "\033[41m",
    :green     => "\033[42m",
    :yellow    => "\033[43m",
    :blue      => "\033[44m",
    :magenta   => "\033[45m",
    :cyan      => "\033[46m",
    :gray      => "\033[47m",
    :darkgray  => "\033[100m",
    :l_red     => "\033[101m",
    :l_green   => "\033[102m",
    :l_yellow  => "\033[103m",
    :l_blue    => "\033[104m",
    :l_magenta => "\033[105m",
    :l_cyan    => "\033[106m",
    :white     => "\033[107m"
}

Instance Method Summary collapse

Constructor Details

#initialize(mode) ⇒ ColorGenerator

Returns a new instance of ColorGenerator.



96
97
98
99
100
101
# File 'lib/termdots.rb', line 96

def initialize(mode)
    @mode = mode
    @tr = -1
    @tg = -1
    @tb = -1
end

Instance Method Details

#clear_colorObject



153
154
155
# File 'lib/termdots.rb', line 153

def clear_color
    return "\033[0m"
end

#convert(r, g, b) ⇒ Object

r,g,b = (0…255)



114
115
116
117
118
119
120
121
122
# File 'lib/termdots.rb', line 114

def convert(r, g, b)
    if @mode == COLOR_MODE_16
        return convert16(r, g, b)
    elsif @mode == COLOR_MODE_256
        return convert256(r, g, b)
    else
        return ""
    end
end

#convert16(r, g, b) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/termdots.rb', line 124

def convert16(r, g, b)
    if transparent_color?(r, g, b)
        return ""
    end

    diff_min = 255 * 3
    ret = CT_ANSI[:black]
    CT_RGB.each do |color, rgb|
        diff = (r - rgb[0]).abs + (g - rgb[1]).abs + (b - rgb[2]).abs
        if diff < diff_min
            ret = CT_ANSI[color]
            diff_min = diff
        end
    end

    return ret
end

#convert256(r, g, b) ⇒ Object



142
143
144
145
146
147
148
149
150
151
# File 'lib/termdots.rb', line 142

def convert256(r, g, b)
    if transparent_color?(r, g, b)
        return ""
    end

    code = (r * 5 / 255 * 36) + (g * 5 / 255 * 6) + (b * 5 / 255) + 16
    ret = "\033[48;5;" + code.to_s + "m"

    return ret
end

#set_transparent_color(r, g, b) ⇒ Object



103
104
105
106
107
# File 'lib/termdots.rb', line 103

def set_transparent_color(r, g, b)
    @tr = r
    @tg = g
    @tb = b
end

#testObject



157
158
159
160
# File 'lib/termdots.rb', line 157

def test
    puts "\033[40m \033[41m \033[42m \033[43m \033[44m \033[45m \033[46m \033[47m \033[0m"
    puts "\033[100m \033[101m \033[102m \033[103m \033[104m \033[105m \033[106m \033[107m \033[0m"
end

#transparent_color?(r, g, b) ⇒ Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/termdots.rb', line 109

def transparent_color?(r, g, b)
    return r == @tr && g == @tg && b == @tb
end