redgreenblue 0.7.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/redgreenblue.rb +20 -14
- data/lib/redgreenblue/24bit.rb +26 -0
- data/lib/redgreenblue/base.rb +45 -13
- data/lib/redgreenblue/bgr24bit.rb +5 -5
- data/lib/redgreenblue/cie_1931.rb +51 -0
- data/lib/redgreenblue/cie_1976.rb +105 -0
- data/lib/redgreenblue/gamma.rb +44 -0
- data/lib/redgreenblue/gpl.rb +91 -0
- data/lib/redgreenblue/hex.rb +46 -15
- data/lib/redgreenblue/hsb.rb +61 -0
- data/lib/redgreenblue/hsl.rb +96 -0
- data/lib/redgreenblue/hsv.rb +96 -0
- data/lib/redgreenblue/hsx_shared.rb +94 -0
- data/lib/redgreenblue/inspect.rb +73 -0
- data/lib/redgreenblue/int.rb +22 -0
- data/lib/redgreenblue/lazy.rb +15 -0
- data/lib/redgreenblue/math.rb +9 -0
- data/lib/redgreenblue/misc.rb +32 -40
- data/lib/redgreenblue/mix.rb +65 -0
- data/lib/redgreenblue/name.rb +13 -0
- data/lib/redgreenblue/opt/philipshue.rb +22 -3
- data/lib/redgreenblue/os/mac.rb +13 -3
- data/lib/redgreenblue/ostwald.rb +45 -0
- data/lib/redgreenblue/palettes/css.gpl +164 -0
- data/lib/redgreenblue/random.rb +5 -0
- data/lib/redgreenblue/rgb565.rb +0 -5
- data/lib/redgreenblue/terminal.rb +19 -0
- data/lib/redgreenblue/version.rb +9 -1
- data/lib/redgreenblue/view.rb +34 -0
- data/lib/redgreenblue/web.rb +65 -0
- metadata +26 -7
- data/lib/redgreenblue/hsl_hsv.rb +0 -59
- data/lib/redgreenblue/nice.rb +0 -9
data/lib/redgreenblue/random.rb
CHANGED
@@ -6,6 +6,11 @@ class RGB
|
|
6
6
|
self
|
7
7
|
end
|
8
8
|
|
9
|
+
# Creates a new RGB object with this object's red, green, and blue values shuffled.
|
10
|
+
def shuffle
|
11
|
+
RGB.new values.shuffle
|
12
|
+
end
|
13
|
+
|
9
14
|
# Assigns random values to red, green, and blue.
|
10
15
|
def randomize!
|
11
16
|
self.values = Kernel::rand, Kernel::rand, Kernel::rand
|
data/lib/redgreenblue/rgb565.rb
CHANGED
@@ -15,11 +15,6 @@ class RGB
|
|
15
15
|
self.b = ( ( v & 0x001f ) ) << 3
|
16
16
|
end
|
17
17
|
|
18
|
-
# Returns the color in 16-bit RGB565 format as a string of 0's and 1's
|
19
|
-
def rgb565_binary
|
20
|
-
rgb565.bytes.reverse.map { |b| "%08b" % b }.join
|
21
|
-
end
|
22
|
-
|
23
18
|
# Creates a new RGB color from 16-bit RGB565 data.
|
24
19
|
def self.rgb565(rgb565_string)
|
25
20
|
c = self.new
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
# With help from:
|
4
|
+
# - https://gist.github.com/XVilka/8346728
|
5
|
+
# - https://unix.stackexchange.com/questions/404414
|
6
|
+
|
7
|
+
# Returns the ANSI escape sequence required to set the foreground color on a terminal to this color.
|
8
|
+
# Only works on terminals that support 24-bit colors, so-called "true color".
|
9
|
+
def terminal_foreground
|
10
|
+
"\e[38;2;%d;%d;%dm" % rgb
|
11
|
+
end
|
12
|
+
|
13
|
+
# Returns the ANSI escape sequence required to set the background color on a terminal to this color.
|
14
|
+
# Only works on terminals that support 24-bit colors, so-called "true color".
|
15
|
+
def terminal_background
|
16
|
+
"\e[48;2;%d;%d;%dm" % rgb
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/lib/redgreenblue/version.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
# Prints details for the RGB object, using multiple lines.
|
4
|
+
def view
|
5
|
+
puts _inspect_view
|
6
|
+
end
|
7
|
+
|
8
|
+
alias v view
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def _inspect_view
|
13
|
+
o = []
|
14
|
+
o << 3.times.map { terminal_background + " \e[0m "}
|
15
|
+
o << [ "#{_inspect_hex} ", '%-7.7s ' % color_space, ' ' ]
|
16
|
+
|
17
|
+
o << components.map { |c| c.terminal_background + " \e[0m " }
|
18
|
+
o << %w(R: G: B:)
|
19
|
+
o << values.map { |v| '%1.5f ' % v }
|
20
|
+
o << rgb.map { |v| '%3d ' % v }
|
21
|
+
|
22
|
+
o << %w(H: S: L:)
|
23
|
+
o << hsl.map { |v| v ? ('%7.3f ' % v) : ' - ' }
|
24
|
+
o << %w(H: S: B:)
|
25
|
+
o << hsb.map { |v| v ? ('%7.3f ' % v) : ' - ' }
|
26
|
+
|
27
|
+
o << 3.times.map { (ostwald_color ? ostwald_color.terminal_background + " \e[0m " : ' ') }
|
28
|
+
o << %w(C: W: K:)
|
29
|
+
o << ostwald_cwk.map { |v| '%1.3f ' % v }
|
30
|
+
|
31
|
+
o.transpose.map(&:join).join("\n")
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
class RGB
|
2
|
+
|
3
|
+
#----------------------------------------------------------------------#
|
4
|
+
# Class Methods #
|
5
|
+
#----------------------------------------------------------------------#
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
# Returns CSS named colors, as per CSS Color Module Level 4.
|
10
|
+
#
|
11
|
+
# Optional selector argument can be:
|
12
|
+
# - String or Regexp (to select by name)
|
13
|
+
# - RGB color (to select by color)
|
14
|
+
# - Integer (to select by index).
|
15
|
+
# Selection by name (string or regular expression) is case-insensitive by default.
|
16
|
+
#
|
17
|
+
# @example No Selector
|
18
|
+
# # All colors
|
19
|
+
# RGB.css
|
20
|
+
#
|
21
|
+
# # Pastels
|
22
|
+
# RGB.css.select { |c| c.ostwald_cwk[1] > 0.6 }
|
23
|
+
# @example Select by Name
|
24
|
+
# # Exact name
|
25
|
+
# RGB.css 'pink'
|
26
|
+
#
|
27
|
+
# # Regular expression
|
28
|
+
# RGB.css /pink|rose/
|
29
|
+
#
|
30
|
+
# @example Select by RGB color
|
31
|
+
# RGB.css RGB.hex('0ff')
|
32
|
+
def css(selector=nil)
|
33
|
+
@@css ||= load_gpl file: ( File.join File.dirname(__FILE__), 'palettes', 'css.gpl' ), freeze: true
|
34
|
+
case selector
|
35
|
+
when NilClass
|
36
|
+
@@css
|
37
|
+
when String
|
38
|
+
n = selector.downcase
|
39
|
+
@@css.select { |c| c.name == n }.first
|
40
|
+
when Regexp
|
41
|
+
r = Regexp.new selector.source, Regexp::IGNORECASE
|
42
|
+
@@css.select { |c| c.name =~ r }
|
43
|
+
when Integer
|
44
|
+
@@css[selector]
|
45
|
+
when self
|
46
|
+
@@css.select { |c| c == selector }
|
47
|
+
else
|
48
|
+
raise ArgumentError, 'Unsupported selector'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
#----------------------------------------------------------------------#
|
55
|
+
# Instance Methods #
|
56
|
+
#----------------------------------------------------------------------#
|
57
|
+
|
58
|
+
# Returns the object's RGB value in hexadecimal notation as used in CSS.
|
59
|
+
#
|
60
|
+
# Shortens to 3 digits when possible.
|
61
|
+
def css_hex
|
62
|
+
"##{hex true}"
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redgreenblue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- lllist.eu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -21,22 +21,41 @@ files:
|
|
21
21
|
- lib/redgreenblue/48bit.rb
|
22
22
|
- lib/redgreenblue/base.rb
|
23
23
|
- lib/redgreenblue/bgr24bit.rb
|
24
|
+
- lib/redgreenblue/cie_1931.rb
|
25
|
+
- lib/redgreenblue/cie_1976.rb
|
26
|
+
- lib/redgreenblue/gamma.rb
|
24
27
|
- lib/redgreenblue/gif.rb
|
28
|
+
- lib/redgreenblue/gpl.rb
|
25
29
|
- lib/redgreenblue/hex.rb
|
26
|
-
- lib/redgreenblue/
|
30
|
+
- lib/redgreenblue/hsb.rb
|
31
|
+
- lib/redgreenblue/hsl.rb
|
32
|
+
- lib/redgreenblue/hsv.rb
|
33
|
+
- lib/redgreenblue/hsx_shared.rb
|
34
|
+
- lib/redgreenblue/inspect.rb
|
35
|
+
- lib/redgreenblue/int.rb
|
27
36
|
- lib/redgreenblue/lazy.rb
|
37
|
+
- lib/redgreenblue/math.rb
|
28
38
|
- lib/redgreenblue/misc.rb
|
29
|
-
- lib/redgreenblue/
|
39
|
+
- lib/redgreenblue/mix.rb
|
40
|
+
- lib/redgreenblue/name.rb
|
30
41
|
- lib/redgreenblue/opt/philipshue.rb
|
31
42
|
- lib/redgreenblue/os.rb
|
32
43
|
- lib/redgreenblue/os/mac.rb
|
44
|
+
- lib/redgreenblue/ostwald.rb
|
45
|
+
- lib/redgreenblue/palettes/css.gpl
|
33
46
|
- lib/redgreenblue/random.rb
|
34
47
|
- lib/redgreenblue/rgb565.rb
|
48
|
+
- lib/redgreenblue/terminal.rb
|
35
49
|
- lib/redgreenblue/version.rb
|
50
|
+
- lib/redgreenblue/view.rb
|
51
|
+
- lib/redgreenblue/web.rb
|
36
52
|
homepage: https://github.com/lllisteu/redgreenblue
|
37
53
|
licenses:
|
38
54
|
- MIT
|
39
|
-
metadata:
|
55
|
+
metadata:
|
56
|
+
homepage_uri: https://github.com/lllisteu/redgreenblue
|
57
|
+
changelog_uri: https://github.com/lllisteu/redgreenblue/blob/master/History.md
|
58
|
+
documentation_uri: https://www.rubydoc.info/gems/redgreenblue/RGB
|
40
59
|
post_install_message:
|
41
60
|
rdoc_options: []
|
42
61
|
require_paths:
|
@@ -52,8 +71,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
52
71
|
- !ruby/object:Gem::Version
|
53
72
|
version: '0'
|
54
73
|
requirements: []
|
55
|
-
rubygems_version: 3.
|
74
|
+
rubygems_version: 3.1.2
|
56
75
|
signing_key:
|
57
76
|
specification_version: 4
|
58
|
-
summary: A simple Ruby library for handling RGB colors
|
77
|
+
summary: A simple Ruby library for handling RGB colors.
|
59
78
|
test_files: []
|
data/lib/redgreenblue/hsl_hsv.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
class RGB
|
2
|
-
|
3
|
-
# Returns color as HSL:
|
4
|
-
# hue (0..360), saturation (0..1), lightness (0..1).
|
5
|
-
# When saturation is 0, hue is nil.
|
6
|
-
def hsl
|
7
|
-
hsl_hsv_c[0]
|
8
|
-
end
|
9
|
-
|
10
|
-
# Returns color as HSV:
|
11
|
-
# hue (0..360), saturation (0..1), value (0..1).
|
12
|
-
# When saturation is 0, hue is nil.
|
13
|
-
#
|
14
|
-
# #hsb is an alias for #hsv.
|
15
|
-
def hsv
|
16
|
-
hsl_hsv_c[1]
|
17
|
-
end
|
18
|
-
|
19
|
-
alias hsb hsv
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
# Compute HSL, HSV, and chroma.
|
24
|
-
# With help from:
|
25
|
-
# - https://en.wikipedia.org/wiki/HSL_and_HSV
|
26
|
-
def hsl_hsv_c
|
27
|
-
sorted_hash = to_h
|
28
|
-
min, max = sorted_hash.values.values_at(2,0)
|
29
|
-
|
30
|
-
chroma = max - min
|
31
|
-
|
32
|
-
hue =
|
33
|
-
if chroma == 0
|
34
|
-
nil
|
35
|
-
else
|
36
|
-
case sorted_hash.keys.first
|
37
|
-
when :red
|
38
|
-
60 * ( ( ( green - blue ) / chroma ).modulo 6 )
|
39
|
-
when :green
|
40
|
-
60 * ( ( blue - red ) / chroma + 2 )
|
41
|
-
when :blue
|
42
|
-
60 * ( ( red - green ) / chroma + 4 )
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
lightness = ( min + max ) / 2.0
|
47
|
-
|
48
|
-
saturation_hsl =
|
49
|
-
chroma == 0 ? 0.0 : ( chroma / ( 1 - (2 * lightness - 1).abs ) ).round(9)
|
50
|
-
|
51
|
-
value = max
|
52
|
-
|
53
|
-
saturation_hsv =
|
54
|
-
value == 0 ? 0.0 : chroma / value
|
55
|
-
|
56
|
-
[ [hue, saturation_hsl, lightness], [hue, saturation_hsv, value], chroma ]
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|