redgreenblue 0.13.0 → 0.16.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.
@@ -1,9 +1,73 @@
1
- class RGB
1
+ class RGB::Color
2
2
 
3
3
  #----------------------------------------------------------------------#
4
- # Class Methods #
4
+ # Instance Methods #
5
5
  #----------------------------------------------------------------------#
6
6
 
7
+ # Returns the object's RGB value in hexadecimal notation as used in CSS.
8
+ #
9
+ # Shortens to 3 digits when possible.
10
+ def css_hex
11
+ "##{hex true}"
12
+ end
13
+
14
+ # Returns the names of CSS named colors identical to this color.
15
+ # @example
16
+ # RGB.hex('f0f').css_names
17
+ def css_names
18
+ RGB.css(self).map &:name
19
+ end
20
+
21
+ # Returns the color's relative luminance, as defined by the Web Content Accessibility Guidelines (WCAG) 2.0.
22
+ #
23
+ # This is different from the Y component of CIE 1931 XYZ.
24
+ #
25
+ # Based on:
26
+ # - https://www.w3.org/TR/WCAG20/#relativeluminancedef
27
+ def wcag20_luminance(round: true)
28
+ if color_space == 'sRGB'
29
+ values.map { |v|
30
+ if v <= 0.03928
31
+ v / 12.92
32
+ else
33
+ ( ( v + 0.055 ) / 1.055 ) ** 2.4
34
+ end
35
+ }.zip( [0.2126, 0.7152, 0.0722] ).map { |c,f|
36
+ c * f
37
+ }.inject(:+).instance_eval { |v| round ? v.round(8) : v }
38
+ else
39
+ raise "can not calculate luminance for color space '#{color_space}'"
40
+ end
41
+ end
42
+
43
+ # Returns the contrast ratio for this color and another color, as defined by the Web Content Accessibility Guidelines (WCAG) 2.0.
44
+ #
45
+ # Based on:
46
+ # - https://www.w3.org/TR/WCAG20/#contrast-ratiodef
47
+ def wcag20_contrast_ratio(another, round: true)
48
+ luminances = [
49
+ wcag20_luminance(round: false),
50
+ another.wcag20_luminance(round: false)
51
+ ].sort.reverse
52
+
53
+ contrast_ratio = ( luminances[0] + 0.05 ) / ( luminances[1] + 0.05 )
54
+
55
+ round ? contrast_ratio.round(8) : contrast_ratio
56
+ end
57
+
58
+ # Returns true if this is one of the 216 so-called "web safe" colors, otherwise false.
59
+ def web_safe?
60
+ ( values - [0.0, 0.2, 0.4, 0.6, 0.8, 1.0] ).empty?
61
+ end
62
+
63
+ end
64
+
65
+ #----------------------------------------------------------------------#
66
+ # Module Methods #
67
+ #----------------------------------------------------------------------#
68
+
69
+ module RGB
70
+
7
71
  class << self
8
72
 
9
73
  # Returns CSS named colors, as per CSS Color Module Level 4.
@@ -42,7 +106,7 @@ class RGB
42
106
  @@css.select { |c| c.name =~ r }
43
107
  when Integer
44
108
  @@css[selector]
45
- when self
109
+ when RGB::Color
46
110
  @@css.select { |c| c == selector }
47
111
  else
48
112
  raise ArgumentError, 'Unsupported selector'
@@ -51,15 +115,4 @@ class RGB
51
115
 
52
116
  end
53
117
 
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
118
  end
data/lib/redgreenblue.rb CHANGED
@@ -1,4 +1,23 @@
1
- class RGB
1
+ # The RGB module is the main namespace for redgreenblue.
2
+ #
3
+ # This module has many helper methods for creating RGB::Color objects.
4
+ # The example below shows seven ways to create an RGB::Color object for the exact same color.
5
+ # @example
6
+ # require 'redgreenblue'
7
+ #
8
+ # pink = RGB.new(1, 0.6, 0.8)
9
+ # pink = RGB.rgb(255, 153, 204)
10
+ # pink = RGB.rrggbb(65535, 39321, 52428)
11
+ # pink = RGB.hex('f9c')
12
+ # pink = RGB.hsl(330, 1, 0.8)
13
+ # pink = RGB.hsv(330, 0.4, 1)
14
+ # pink = RGB.at(16751052)
15
+ module RGB
16
+
17
+ # This class represents an RGB color.
18
+ class Color
19
+ end
20
+
2
21
  end
3
22
 
4
23
  %w(
@@ -11,11 +30,11 @@ end
11
30
 
12
31
  hsl hsv hsb
13
32
 
14
- ostwald
33
+ ostwald hwb
15
34
 
16
35
  gamma
17
36
 
18
- cie_1931 cie_1976
37
+ cie_1931 cie_1976 cie_1994
19
38
 
20
39
  name
21
40
 
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redgreenblue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - lllist.eu
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-09 00:00:00.000000000 Z
11
+ date: 2022-06-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description:
14
- email:
13
+ description:
14
+ email:
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
@@ -23,6 +23,7 @@ files:
23
23
  - lib/redgreenblue/bgr24bit.rb
24
24
  - lib/redgreenblue/cie_1931.rb
25
25
  - lib/redgreenblue/cie_1976.rb
26
+ - lib/redgreenblue/cie_1994.rb
26
27
  - lib/redgreenblue/gamma.rb
27
28
  - lib/redgreenblue/gif.rb
28
29
  - lib/redgreenblue/gpl.rb
@@ -31,6 +32,7 @@ files:
31
32
  - lib/redgreenblue/hsl.rb
32
33
  - lib/redgreenblue/hsv.rb
33
34
  - lib/redgreenblue/hsx_shared.rb
35
+ - lib/redgreenblue/hwb.rb
34
36
  - lib/redgreenblue/inspect.rb
35
37
  - lib/redgreenblue/int.rb
36
38
  - lib/redgreenblue/lazy.rb
@@ -58,7 +60,7 @@ metadata:
58
60
  homepage_uri: https://github.com/lllisteu/redgreenblue
59
61
  changelog_uri: https://github.com/lllisteu/redgreenblue/blob/master/History.md
60
62
  documentation_uri: https://www.rubydoc.info/gems/redgreenblue/RGB
61
- post_install_message:
63
+ post_install_message:
62
64
  rdoc_options: []
63
65
  require_paths:
64
66
  - lib
@@ -73,8 +75,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
75
  - !ruby/object:Gem::Version
74
76
  version: '0'
75
77
  requirements: []
76
- rubygems_version: 3.1.2
77
- signing_key:
78
+ rubygems_version: 3.3.11
79
+ signing_key:
78
80
  specification_version: 4
79
81
  summary: A simple Ruby library for handling RGB colors.
80
82
  test_files: []