color_contrast_calc 0.3.0 → 0.4.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/README.ja.md +15 -4
- data/README.md +15 -4
- data/examples/grayscale.rb +2 -2
- data/lib/color_contrast_calc/color.rb +9 -7
- data/lib/color_contrast_calc/deprecated.rb +50 -0
- data/lib/color_contrast_calc/threshold_finder.rb +93 -101
- data/lib/color_contrast_calc/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 513b56ff5dca5ea3a6a7343a4cc5111a19c976e2
|
4
|
+
data.tar.gz: 9958f22f8d1474b93a3573ce728ffe6e41abe6d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebf3189b2a716538c29fe3c3730e47f79d9a51fba4d53989269fe20f9a56e0225ee38e105936aa2c05844b3fb4925243feeefa9c670733975f82b46eabb15c2d
|
7
|
+
data.tar.gz: 5c6b613c861aaa290e31d1c1c710c6d7775beb742f43c896f25e7c10bf1b890cc7833ebe7f37b8b4c5727bc1ce68eb4ad9c8916f8bc853fc8f47d405ac2d34ec
|
data/README.ja.md
CHANGED
@@ -174,7 +174,7 @@ The contrast ratio between #ffff00 and #9d6600 is 4.5121
|
|
174
174
|
### 例3: ある色のグレースケール
|
175
175
|
|
176
176
|
ある色のグレースケールを得るために`ColorContrastCalc::Color` には
|
177
|
-
`
|
177
|
+
`with_grayscale`というインスタンスメソッドがあります。
|
178
178
|
|
179
179
|
例えば次のコードを`grayscale.rb`として保存し:
|
180
180
|
|
@@ -185,8 +185,8 @@ yellow = ColorContrastCalc.color_from('yellow')
|
|
185
185
|
orange = ColorContrastCalc.color_from('orange')
|
186
186
|
|
187
187
|
report = 'The grayscale of %s is %s.'
|
188
|
-
puts(format(report, yellow.hex, yellow.
|
189
|
-
puts(format(report, orange.hex, orange.
|
188
|
+
puts(format(report, yellow.hex, yellow.with_grayscale))
|
189
|
+
puts(format(report, orange.hex, orange.with_grayscale))
|
190
190
|
```
|
191
191
|
|
192
192
|
以下のように実行します:
|
@@ -197,9 +197,20 @@ The grayscale of #ffff00 is #ededed.
|
|
197
197
|
The grayscale of #ffa500 is #acacac.
|
198
198
|
```
|
199
199
|
|
200
|
-
また`
|
200
|
+
また`with_grayscale`以外に、以下のインスタンスメッソドが
|
201
201
|
`ColorContrastCalc::Color`では利用できます。:
|
202
202
|
|
203
|
+
* `with_brightness`
|
204
|
+
* `with_contrast`
|
205
|
+
* `with_hue_rotate`
|
206
|
+
* `with_invert`
|
207
|
+
* `with_saturate`
|
208
|
+
|
209
|
+
#### 非推奨のメソッド
|
210
|
+
|
211
|
+
以下のメソッドは非推奨であることにご注意下さい。
|
212
|
+
|
213
|
+
* `new_grayscale_color`
|
203
214
|
* `new_brightness_color`
|
204
215
|
* `new_contrast_color`
|
205
216
|
* `new_hue_rotate_color`
|
data/README.md
CHANGED
@@ -174,7 +174,7 @@ The contrast ratio between #ffff00 and #9d6600 is 4.5121
|
|
174
174
|
### Example 3: Grayscale of given colors
|
175
175
|
|
176
176
|
For getting grayscale, `ColorContrastCalc::Color` has an instance method
|
177
|
-
`
|
177
|
+
`with_grayscale`.
|
178
178
|
For example, save the following code as `grayscale.rb`:
|
179
179
|
|
180
180
|
```ruby
|
@@ -184,8 +184,8 @@ yellow = ColorContrastCalc.color_from('yellow')
|
|
184
184
|
orange = ColorContrastCalc.color_from('orange')
|
185
185
|
|
186
186
|
report = 'The grayscale of %s is %s.'
|
187
|
-
puts(format(report, yellow.hex, yellow.
|
188
|
-
puts(format(report, orange.hex, orange.
|
187
|
+
puts(format(report, yellow.hex, yellow.with_grayscale))
|
188
|
+
puts(format(report, orange.hex, orange.with_grayscale))
|
189
189
|
```
|
190
190
|
|
191
191
|
Then execute the script:
|
@@ -196,9 +196,20 @@ The grayscale of #ffff00 is #ededed.
|
|
196
196
|
The grayscale of #ffa500 is #acacac.
|
197
197
|
```
|
198
198
|
|
199
|
-
And other than `
|
199
|
+
And other than `with_grayscale`, following instance methods
|
200
200
|
are available for `ColorContrastCalc::Color`:
|
201
201
|
|
202
|
+
* `with_brightness`
|
203
|
+
* `with_contrast`
|
204
|
+
* `with_hue_rotate`
|
205
|
+
* `with_invert`
|
206
|
+
* `with_saturate`
|
207
|
+
|
208
|
+
#### Deprecated instance methods
|
209
|
+
|
210
|
+
Please note the following methods are deprecated:
|
211
|
+
|
212
|
+
* `new_grayscale_color`
|
202
213
|
* `new_brightness_color`
|
203
214
|
* `new_contrast_color`
|
204
215
|
* `new_hue_rotate_color`
|
data/examples/grayscale.rb
CHANGED
@@ -6,5 +6,5 @@ yellow = ColorContrastCalc.color_from('yellow')
|
|
6
6
|
orange = ColorContrastCalc.color_from('orange')
|
7
7
|
|
8
8
|
report = 'The grayscale of %s is %s.'
|
9
|
-
puts(format(report, yellow.hex, yellow.
|
10
|
-
puts(format(report, orange.hex, orange.
|
9
|
+
puts(format(report, yellow.hex, yellow.with_grayscale))
|
10
|
+
puts(format(report, orange.hex, orange.with_grayscale))
|
@@ -3,6 +3,7 @@
|
|
3
3
|
require 'color_contrast_calc/utils'
|
4
4
|
require 'color_contrast_calc/checker'
|
5
5
|
require 'color_contrast_calc/threshold_finder'
|
6
|
+
require 'color_contrast_calc/deprecated'
|
6
7
|
require 'json'
|
7
8
|
|
8
9
|
module ColorContrastCalc
|
@@ -13,6 +14,7 @@ module ColorContrastCalc
|
|
13
14
|
# instances of Color class.
|
14
15
|
|
15
16
|
class Color
|
17
|
+
include Deprecated::Color
|
16
18
|
# @private
|
17
19
|
RGB_LIMITS = [0, 255].freeze
|
18
20
|
|
@@ -102,7 +104,7 @@ module ColorContrastCalc
|
|
102
104
|
# code is assigned instead.
|
103
105
|
# @return [Color] New color with adjusted contrast
|
104
106
|
|
105
|
-
def
|
107
|
+
def with_contrast(ratio, name = nil)
|
106
108
|
generate_new_color(Converter::Contrast, ratio, name)
|
107
109
|
end
|
108
110
|
|
@@ -115,7 +117,7 @@ module ColorContrastCalc
|
|
115
117
|
# code is assigned instead.
|
116
118
|
# @return [Color] New color with adjusted brightness
|
117
119
|
|
118
|
-
def
|
120
|
+
def with_brightness(ratio, name = nil)
|
119
121
|
generate_new_color(Converter::Brightness, ratio, name)
|
120
122
|
end
|
121
123
|
|
@@ -128,7 +130,7 @@ module ColorContrastCalc
|
|
128
130
|
# code is assigned instead.
|
129
131
|
# @return [Color] New inverted color
|
130
132
|
|
131
|
-
def
|
133
|
+
def with_invert(ratio = 100, name = nil)
|
132
134
|
generate_new_color(Converter::Invert, ratio, name)
|
133
135
|
end
|
134
136
|
|
@@ -141,7 +143,7 @@ module ColorContrastCalc
|
|
141
143
|
# code is assigned instead.
|
142
144
|
# @return [Color] New hue rotation applied color
|
143
145
|
|
144
|
-
def
|
146
|
+
def with_hue_rotate(degree, name = nil)
|
145
147
|
generate_new_color(Converter::HueRotate, degree, name)
|
146
148
|
end
|
147
149
|
|
@@ -154,7 +156,7 @@ module ColorContrastCalc
|
|
154
156
|
# code is assigned instead.
|
155
157
|
# @return [Color] New saturated color
|
156
158
|
|
157
|
-
def
|
159
|
+
def with_saturate(ratio, name = nil)
|
158
160
|
generate_new_color(Converter::Saturate, ratio, name)
|
159
161
|
end
|
160
162
|
|
@@ -167,7 +169,7 @@ module ColorContrastCalc
|
|
167
169
|
# code is assigned instead.
|
168
170
|
# @return [Color] New grayscale color
|
169
171
|
|
170
|
-
def
|
172
|
+
def with_grayscale(ratio = 100, name = nil)
|
171
173
|
generate_new_color(Converter::Grayscale, ratio, name)
|
172
174
|
end
|
173
175
|
|
@@ -290,7 +292,7 @@ module ColorContrastCalc
|
|
290
292
|
# The max contrast in this context means that of colors modified
|
291
293
|
# by the operation defined at
|
292
294
|
# * {https://www.w3.org/TR/filter-effects/#funcdef-contrast}
|
293
|
-
# @return [Boolean] true if self.
|
295
|
+
# @return [Boolean] true if self.with_contrast(r) where r is
|
294
296
|
# greater than 100 returns the same color as self.
|
295
297
|
|
296
298
|
def max_contrast?
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ColorContrastCalc
|
4
|
+
##
|
5
|
+
# Collection of deprecated methods.
|
6
|
+
|
7
|
+
module Deprecated
|
8
|
+
def self.warn(old_method, new_method)
|
9
|
+
STDERR.puts "##{old_method} is deprecated. Use ##{new_method} instead"
|
10
|
+
end
|
11
|
+
|
12
|
+
module Color
|
13
|
+
# @deprecated Use {#with_contrast} instead
|
14
|
+
def new_contrast_color(ratio, name = nil)
|
15
|
+
Deprecated.warn(__method__, :with_contrast)
|
16
|
+
with_contrast(ratio, name)
|
17
|
+
end
|
18
|
+
|
19
|
+
# @deprecated Use {#with_brightness} instead
|
20
|
+
def new_brightness_color(ratio, name = nil)
|
21
|
+
Deprecated.warn(__method__, :with_brightness)
|
22
|
+
with_brightness(ratio, name)
|
23
|
+
end
|
24
|
+
|
25
|
+
# @deprecated Use {#with_invert} instead
|
26
|
+
def new_invert_color(ratio = 100, name = nil)
|
27
|
+
Deprecated.warn(__method__, :with_invert)
|
28
|
+
with_invert(ratio, name)
|
29
|
+
end
|
30
|
+
|
31
|
+
# @deprecated Use {#with_hue_rotate} instead
|
32
|
+
def new_hue_rotate_color(degree, name = nil)
|
33
|
+
Deprecated.warn(__method__, :with_hue_rotate)
|
34
|
+
with_hue_rotate(degree, name)
|
35
|
+
end
|
36
|
+
|
37
|
+
# @deprecated Use {#with_saturate} instead
|
38
|
+
def new_saturate_color(ratio, name = nil)
|
39
|
+
Deprecated.warn(__method__, :with_saturate)
|
40
|
+
with_saturate(ratio, name)
|
41
|
+
end
|
42
|
+
|
43
|
+
# @deprecated Use {#with_grayscale} instead
|
44
|
+
def new_grayscale_color(ratio = 100, name = nil)
|
45
|
+
Deprecated.warn(__method__, :with_grayscale)
|
46
|
+
with_grayscale(ratio, name)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -14,7 +14,7 @@ module ColorContrastCalc
|
|
14
14
|
module Criteria
|
15
15
|
# @private
|
16
16
|
|
17
|
-
def self.
|
17
|
+
def self.define(level, fixed_rgb, other_rgb)
|
18
18
|
if should_scan_darker_side?(fixed_rgb, other_rgb)
|
19
19
|
return ToDarkerSide.new(level, fixed_rgb)
|
20
20
|
end
|
@@ -32,16 +32,15 @@ module ColorContrastCalc
|
|
32
32
|
end
|
33
33
|
|
34
34
|
class SearchDirection
|
35
|
-
attr_reader :
|
35
|
+
attr_reader :target_contrast, :fixed_luminance
|
36
36
|
|
37
37
|
def initialize(level, fixed_rgb)
|
38
|
-
@
|
39
|
-
@target_ratio = Checker.level_to_ratio(level)
|
38
|
+
@target_contrast = Checker.level_to_ratio(level)
|
40
39
|
@fixed_luminance = Checker.relative_luminance(fixed_rgb)
|
41
40
|
end
|
42
41
|
|
43
42
|
def sufficient_contrast?(rgb)
|
44
|
-
contrast_ratio(rgb) >= @
|
43
|
+
contrast_ratio(rgb) >= @target_contrast
|
45
44
|
end
|
46
45
|
|
47
46
|
def contrast_ratio(rgb)
|
@@ -53,28 +52,28 @@ module ColorContrastCalc
|
|
53
52
|
class ToDarkerSide < SearchDirection
|
54
53
|
# @private
|
55
54
|
|
56
|
-
def round(
|
57
|
-
(
|
55
|
+
def round(ratio)
|
56
|
+
(ratio * 10).floor / 10.0
|
58
57
|
end
|
59
58
|
|
60
59
|
# @private
|
61
60
|
|
62
61
|
def increment_condition(contrast_ratio)
|
63
|
-
contrast_ratio > @
|
62
|
+
contrast_ratio > @target_contrast
|
64
63
|
end
|
65
64
|
end
|
66
65
|
|
67
66
|
class ToBrighterSide < SearchDirection
|
68
67
|
# @private
|
69
68
|
|
70
|
-
def round(
|
71
|
-
(
|
69
|
+
def round(ratio)
|
70
|
+
(ratio * 10).ceil / 10.0
|
72
71
|
end
|
73
72
|
|
74
73
|
# @private
|
75
74
|
|
76
75
|
def increment_condition(contrast_ratio)
|
77
|
-
@
|
76
|
+
@target_contrast > contrast_ratio
|
78
77
|
end
|
79
78
|
end
|
80
79
|
end
|
@@ -96,13 +95,55 @@ module ColorContrastCalc
|
|
96
95
|
|
97
96
|
# @private
|
98
97
|
|
99
|
-
def sufficient_contrast?(
|
100
|
-
|
101
|
-
ratio = Checker.
|
102
|
-
ratio >=
|
98
|
+
def sufficient_contrast?(ref_luminance, rgb, criteria)
|
99
|
+
luminance = Checker.relative_luminance(rgb)
|
100
|
+
ratio = Checker.luminance_to_contrast_ratio(ref_luminance, luminance)
|
101
|
+
ratio >= criteria.target_contrast
|
103
102
|
end
|
104
103
|
|
105
104
|
private :sufficient_contrast?
|
105
|
+
|
106
|
+
def rgb_with_better_ratio(color, criteria, last_r, passing_r)
|
107
|
+
closest = rgb_with_ratio(color, last_r)
|
108
|
+
|
109
|
+
if passing_r && !criteria.sufficient_contrast?(closest)
|
110
|
+
return rgb_with_ratio(color, passing_r)
|
111
|
+
end
|
112
|
+
|
113
|
+
closest
|
114
|
+
end
|
115
|
+
|
116
|
+
private :rgb_with_better_ratio
|
117
|
+
|
118
|
+
# @private
|
119
|
+
|
120
|
+
def find_ratio(other_color, criteria, init_ratio, init_width)
|
121
|
+
target_contrast = criteria.target_contrast
|
122
|
+
r = init_ratio
|
123
|
+
passing_r = nil
|
124
|
+
|
125
|
+
FinderUtils.binary_search_width(init_width, 0.01) do |d|
|
126
|
+
contrast = criteria.contrast_ratio(rgb_with_ratio(other_color, r))
|
127
|
+
|
128
|
+
passing_r = r if contrast >= target_contrast
|
129
|
+
break if contrast == target_contrast
|
130
|
+
|
131
|
+
r += criteria.increment_condition(contrast) ? d : -d
|
132
|
+
end
|
133
|
+
|
134
|
+
[r, passing_r]
|
135
|
+
end
|
136
|
+
|
137
|
+
private :find_ratio
|
138
|
+
|
139
|
+
# @private
|
140
|
+
|
141
|
+
def rgb_with_ratio(rgb, ratio)
|
142
|
+
raise(NotImplementedError,
|
143
|
+
"Implement ##{__method__} with arguments #{rgb} and #{ratio}")
|
144
|
+
end
|
145
|
+
|
146
|
+
private :rgb_with_ratio
|
106
147
|
end
|
107
148
|
|
108
149
|
##
|
@@ -126,19 +167,27 @@ module ColorContrastCalc
|
|
126
167
|
# adjusted from that of +other_rgb+
|
127
168
|
|
128
169
|
def self.find(fixed_rgb, other_rgb, level = Checker::Level::AA)
|
129
|
-
criteria = Criteria.
|
170
|
+
criteria = Criteria.define(level, fixed_rgb, other_rgb)
|
130
171
|
w = calc_upper_ratio_limit(other_rgb) / 2.0
|
131
172
|
|
132
173
|
upper_rgb = upper_limit_rgb(criteria, other_rgb, w * 2)
|
133
174
|
return upper_rgb if upper_rgb
|
134
175
|
|
135
|
-
|
176
|
+
last_r, passing_r = find_ratio(other_rgb, criteria, w, w).map do |ratio|
|
177
|
+
criteria.round(ratio) if ratio
|
178
|
+
end
|
179
|
+
|
180
|
+
rgb_with_better_ratio(other_rgb, criteria, last_r, passing_r)
|
181
|
+
end
|
136
182
|
|
137
|
-
|
183
|
+
def self.rgb_with_ratio(rgb, ratio)
|
184
|
+
Converter::Brightness.calc_rgb(rgb, ratio)
|
138
185
|
end
|
139
186
|
|
187
|
+
private_class_method :rgb_with_ratio
|
188
|
+
|
140
189
|
def self.upper_limit_rgb(criteria, other_rgb, max_ratio)
|
141
|
-
limit_rgb =
|
190
|
+
limit_rgb = rgb_with_ratio(other_rgb, max_ratio)
|
142
191
|
limit_rgb if exceed_upper_limit?(criteria, other_rgb, limit_rgb)
|
143
192
|
end
|
144
193
|
|
@@ -152,44 +201,6 @@ module ColorContrastCalc
|
|
152
201
|
|
153
202
|
private_class_method :exceed_upper_limit?
|
154
203
|
|
155
|
-
def self.calc_brightness_ratio(other_rgb, criteria, w)
|
156
|
-
target_ratio = criteria.target_ratio
|
157
|
-
r = w
|
158
|
-
sufficient_r = nil
|
159
|
-
|
160
|
-
FinderUtils.binary_search_width(w, 0.01) do |d|
|
161
|
-
contrast_ratio = calc_contrast_ratio(criteria, other_rgb, r)
|
162
|
-
|
163
|
-
sufficient_r = r if contrast_ratio >= target_ratio
|
164
|
-
break if contrast_ratio == target_ratio
|
165
|
-
|
166
|
-
r += criteria.increment_condition(contrast_ratio) ? d : -d
|
167
|
-
end
|
168
|
-
|
169
|
-
[r, sufficient_r]
|
170
|
-
end
|
171
|
-
|
172
|
-
private_class_method :calc_brightness_ratio
|
173
|
-
|
174
|
-
def self.generate_satisfying_color(other_rgb, criteria, r, sufficient_r)
|
175
|
-
nearest = Converter::Brightness.calc_rgb(other_rgb, criteria.round(r))
|
176
|
-
|
177
|
-
if sufficient_r && !criteria.sufficient_contrast?(nearest)
|
178
|
-
return Converter::Brightness.calc_rgb(other_rgb,
|
179
|
-
criteria.round(sufficient_r))
|
180
|
-
end
|
181
|
-
|
182
|
-
nearest
|
183
|
-
end
|
184
|
-
|
185
|
-
private_class_method :generate_satisfying_color
|
186
|
-
|
187
|
-
def self.calc_contrast_ratio(criteria, other_rgb, r)
|
188
|
-
criteria.contrast_ratio(Converter::Brightness.calc_rgb(other_rgb, r))
|
189
|
-
end
|
190
|
-
|
191
|
-
private_class_method :calc_contrast_ratio
|
192
|
-
|
193
204
|
# @private
|
194
205
|
|
195
206
|
def self.calc_upper_ratio_limit(rgb)
|
@@ -221,68 +232,49 @@ module ColorContrastCalc
|
|
221
232
|
|
222
233
|
def self.find(fixed_rgb, other_rgb, level = Checker::Level::AA)
|
223
234
|
other_hsl = Utils.rgb_to_hsl(other_rgb)
|
224
|
-
criteria = Criteria.
|
235
|
+
criteria = Criteria.define(level, fixed_rgb, other_rgb)
|
225
236
|
max, min = determine_minmax(fixed_rgb, other_rgb, other_hsl[2])
|
226
237
|
|
227
|
-
|
228
|
-
return
|
238
|
+
boundary_rgb = lightness_boundary_rgb(fixed_rgb, max, min, criteria)
|
239
|
+
return boundary_rgb if boundary_rgb
|
229
240
|
|
230
|
-
|
241
|
+
last_l, passing_l = find_ratio(other_hsl, criteria,
|
242
|
+
(max + min) / 2.0, max - min)
|
231
243
|
|
232
|
-
|
244
|
+
rgb_with_better_ratio(other_hsl, criteria, last_l, passing_l)
|
233
245
|
end
|
234
246
|
|
235
|
-
def self.
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
end
|
240
|
-
|
241
|
-
private_class_method :determine_minmax
|
242
|
-
|
243
|
-
def self.lightness_boundary_color(rgb, max, min, level)
|
244
|
-
if min.zero? && !sufficient_contrast?(Rgb::BLACK, rgb, level)
|
245
|
-
return Rgb::BLACK
|
247
|
+
def self.rgb_with_ratio(hsl, ratio)
|
248
|
+
if hsl[2] != ratio
|
249
|
+
hsl = hsl.dup
|
250
|
+
hsl[2] = ratio
|
246
251
|
end
|
247
252
|
|
248
|
-
|
249
|
-
return Rgb::WHITE
|
250
|
-
end
|
253
|
+
Utils.hsl_to_rgb(hsl)
|
251
254
|
end
|
252
255
|
|
253
|
-
private_class_method :
|
256
|
+
private_class_method :rgb_with_ratio
|
254
257
|
|
255
|
-
def self.
|
256
|
-
|
257
|
-
|
258
|
-
sufficient_l = nil
|
259
|
-
|
260
|
-
FinderUtils.binary_search_width(max - min, 0.01) do |d|
|
261
|
-
contrast_ratio = criteria.contrast_ratio(Utils.hsl_to_rgb([h, s, l]))
|
262
|
-
|
263
|
-
sufficient_l = l if contrast_ratio >= criteria.target_ratio
|
264
|
-
break if contrast_ratio == criteria.target_ratio
|
265
|
-
|
266
|
-
l += criteria.increment_condition(contrast_ratio) ? d : -d
|
267
|
-
end
|
268
|
-
|
269
|
-
[l, sufficient_l]
|
258
|
+
def self.determine_minmax(fixed_rgb, other_rgb, init_l)
|
259
|
+
on_darker_side = Criteria.should_scan_darker_side?(fixed_rgb, other_rgb)
|
260
|
+
on_darker_side ? [init_l, 0] : [100, init_l] # [max, min]
|
270
261
|
end
|
271
262
|
|
272
|
-
private_class_method :
|
273
|
-
|
274
|
-
def self.generate_satisfying_color(other_hsl, criteria, l, sufficient_l)
|
275
|
-
h, s, = other_hsl
|
276
|
-
nearest = Utils.hsl_to_rgb([h, s, l])
|
263
|
+
private_class_method :determine_minmax
|
277
264
|
|
278
|
-
|
279
|
-
|
265
|
+
def self.lightness_boundary_rgb(rgb, max, min, criteria)
|
266
|
+
if min.zero? && !sufficient_contrast?(Checker::Luminance::BLACK,
|
267
|
+
rgb, criteria)
|
268
|
+
return Rgb::BLACK
|
280
269
|
end
|
281
270
|
|
282
|
-
|
271
|
+
if max == 100 && !sufficient_contrast?(Checker::Luminance::WHITE,
|
272
|
+
rgb, criteria)
|
273
|
+
return Rgb::WHITE
|
274
|
+
end
|
283
275
|
end
|
284
276
|
|
285
|
-
private_class_method :
|
277
|
+
private_class_method :lightness_boundary_rgb
|
286
278
|
end
|
287
279
|
end
|
288
280
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: color_contrast_calc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HASHIMOTO, Naoki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- lib/color_contrast_calc/color.rb
|
115
115
|
- lib/color_contrast_calc/converter.rb
|
116
116
|
- lib/color_contrast_calc/data/color_keywords.json
|
117
|
+
- lib/color_contrast_calc/deprecated.rb
|
117
118
|
- lib/color_contrast_calc/shim.rb
|
118
119
|
- lib/color_contrast_calc/sorter.rb
|
119
120
|
- lib/color_contrast_calc/threshold_finder.rb
|