color-schemer 0.2.1 → 0.2.2

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.
data/lib/color-schemer.rb CHANGED
@@ -1,9 +1,10 @@
1
1
  require 'compass'
2
+ require 'blend-mode'
2
3
  Compass::Frameworks.register("color-schemer", :path => "#{File.dirname(__FILE__)}/..")
3
4
 
4
5
  module ColorSchemer
5
6
 
6
- VERSION = "0.2.1"
7
+ VERSION = "0.2.2"
7
8
  DATE = "2011-09-15"
8
9
 
9
10
  end
@@ -1,13 +1,25 @@
1
- // Define color schemes quickly
1
+ @import "blend-mode";
2
2
 
3
- @import "color-schemer/defaults";
3
+ // Defaults
4
+ $cs-primary : #f00 !default;
5
+ $cs-scheme : mono !default; // mono, complement, triad, tetrad, analogic, accented-analogic
6
+ $cs-hue-offset : 30 !default;
7
+ $cs-brightness-offset : false !default;
8
+ $cs-color-model : rgb !default; // rgb, ryb
9
+ $cs-colorblind : normal !default;
10
+
11
+ // Partials
12
+ @import "color-schemer/interpolation";
4
13
  @import "color-schemer/cmyk";
5
14
  @import "color-schemer/ryb";
6
-
15
+ @import "color-schemer/colorblind";
7
16
  @import "color-schemer/equalize";
17
+ @import "color-schemer/mix";
8
18
  @import "color-schemer/tint-shade";
9
19
  @import "color-schemer/color-adjustments";
10
20
  @import "color-schemer/color-schemer";
11
21
 
22
+ @import "color-schemer/mixins";
23
+
12
24
  // Tell other files that this is loaded.
13
- $color-schemer-loaded: true;
25
+ $color-schemer-loaded : true;
@@ -0,0 +1,54 @@
1
+ @function cs-colorblind($color, $mode: $cs-colorblind) {
2
+
3
+ $severity: 66%;
4
+
5
+ // Protanopia - no red
6
+ @if $mode == protanopia {
7
+ @return $color - #f00;
8
+ }
9
+
10
+ // Deuteranopia - no green
11
+ @if $mode == deuteranopia {
12
+ @return $color - #0f0;
13
+ }
14
+
15
+ // Tritanopia - no blue
16
+ @if $mode == tritanopia {
17
+ @return $color - #00f;
18
+ }
19
+
20
+ // Protanomaly - low red
21
+ @if $mode == protanomaly {
22
+ @return $color - shade(#f00, 100% - $severity);
23
+ }
24
+
25
+ // Deuteranomaly - low green
26
+ @if $mode == deuteranomaly {
27
+ @return $color - shade(#0f0, 100% - $severity);
28
+ }
29
+
30
+ // Tritanomaly - low blue
31
+ @if $mode == tritanomaly {
32
+ @return $color - shade(#00f, 100% - $severity);
33
+ }
34
+
35
+ // Typical Monochromacy
36
+ @if $mode == monochromacy {
37
+ @return desaturate($color, 100%);
38
+ }
39
+
40
+ // Atypical Monochromacy
41
+ @if $mode == amonochromacy {
42
+ @return desaturate($color, $severity);
43
+ }
44
+
45
+
46
+ // Return color if no color blind mode.
47
+ @else {
48
+ @return $color;
49
+ }
50
+ }
51
+
52
+ @function cs-cb($color, $mode: $cs-colorblind) {
53
+ @return cs-colorblind($color, $mode);
54
+ }
@@ -0,0 +1,34 @@
1
+ @function cs-interpolate($value, $units: 360, $stops: $ryb-interpolation) {
2
+
3
+ // Loop numbers out of scale back into the scale.
4
+ @while $value >= 360 {
5
+ $value: $value - 360;
6
+ }
7
+ @while $value < 0 {
8
+ $value: $value + 360;
9
+ }
10
+
11
+ // Find out how many units in each stop
12
+ $cs-color-deg: $units / length($stops);
13
+
14
+ // Count through stops
15
+ $cs-deg-count: $cs-color-deg;
16
+ $cs-stop-count: 1;
17
+
18
+ // Add the first stop to the end so it will be
19
+ // interpolated with the last stop.
20
+ $stops: append($stops, nth($stops, 1));
21
+
22
+ // Start interpolating
23
+ @for $i from 0 through length($stops) {
24
+ @if $value < $cs-deg-count {
25
+ @return cs-mix(nth($stops, $cs-stop-count + 1), nth($stops, $cs-stop-count), abs(percentage(($cs-deg-count - $value) / $cs-color-deg) - 100 ), $model: rgb);
26
+ }
27
+
28
+ // If the value is not in this stop, loop up to another stop.
29
+ @else {
30
+ $cs-deg-count: $cs-deg-count + $cs-color-deg;
31
+ $cs-stop-count: $cs-stop-count + 1
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,40 @@
1
+ @function cs-mix($color1, $color2, $percent: 50%, $model: $cs-color-model) {
2
+
3
+ $decimal : abs($percent - 100%) / 100%;
4
+ $hue-offset : ();
5
+
6
+ @if $model == rgb {
7
+ $hue-offset : (hue($color1) - hue($color2)) * $decimal;
8
+ @if (hue($color1) - hue($color2)) * .5 < -90deg {
9
+ $hue-offset : (hue($color1) + 360deg - hue($color2)) * $decimal;
10
+ }
11
+ @if (hue($color1) - hue($color2)) * .5 > 90deg {
12
+ $hue-offset : (hue($color1) - 360deg - hue($color2)) * $decimal;
13
+ }
14
+ }
15
+
16
+ @if $model == ryb {
17
+ $hue-offset : (ryb-hue($color1) - ryb-hue($color2)) * $decimal;
18
+ @if (ryb-hue($color1) - ryb-hue($color2)) * .5 < -90deg {
19
+ $hue-offset : (ryb-hue($color1) + 360deg - ryb-hue($color2)) * $decimal;
20
+ }
21
+ @if (ryb-hue($color1) - ryb-hue($color2)) * .5 > 90deg {
22
+ $hue-offset : (ryb-hue($color1) - 360deg - ryb-hue($color2)) * $decimal;
23
+ }
24
+ }
25
+
26
+ $saturation-offset : (saturation($color1) - saturation($color2)) * $decimal;
27
+ $lightness-offset : (lightness($color1) - lightness($color2)) * $decimal;
28
+
29
+ @if $model == ryb {
30
+ $color1: ryb-adjust-hue($color1, $hue-offset * -1);
31
+ }
32
+ @else {
33
+ $color1: adjust-hue($color1, $hue-offset * -1);
34
+ }
35
+
36
+ $color1: set-saturation($color1, saturation($color1) - $saturation-offset);
37
+ $color1: set-lightness($color1, lightness($color1) - $lightness-offset);
38
+
39
+ @return $color1;
40
+ }
@@ -0,0 +1,29 @@
1
+ ////////////////////////////////////////////
2
+ // From Jina Bolton and Eric Meyer -- http://codepen.io/jina/pen/iosjp
3
+ @function cs-stripes($position, $colors) {
4
+ $colors: if(type-of($colors) != 'list', compact($colors), $colors);
5
+ $gradient: ();
6
+ $width: 100% / length($colors);
7
+
8
+ @for $i from 1 through length($colors) {
9
+ $pop: nth($colors,$i);
10
+ $new: $pop ($width * ($i - 1)), $pop ($width * $i);
11
+ $gradient: join($gradient, $new, comma);
12
+ }
13
+
14
+ @return linear-gradient($position, $gradient);
15
+ }
16
+
17
+ ////////////////////////////////////////////
18
+ // Color tester
19
+
20
+ @mixin cs-test($colors, $height: 2em, $element: "body:before") {
21
+ #{$element} {
22
+ content: "";
23
+ display: block;
24
+ height: $height;
25
+ @include background(cs-stripes(left, ($colors)));
26
+ position: relative;
27
+ z-index: 999999999999;
28
+ }
29
+ }
@@ -1,45 +1,10 @@
1
- @function cs-interpolate($value, $units: 360, $stops: #FF0000 #FF4900 #FF7400 #FF9200 #FFAA00 #FFBF00 #FFD300 #FFE800 #FFFF00 #CCF600 #9FEE00 #67E300 #00CC00 #00AF64 #009999 #0B61A4 #1240AB #1B1BB3 #3914AF #530FAD #7109AA #A600A6 #CD0074 #E40045) {
2
-
3
- // Loop numbers out of scale back into the scale.
4
- @while $value >= 360 {
5
- $value: $value - 360;
6
- }
7
- @while $value < 0 {
8
- $value: $value + 360;
9
- }
10
-
11
- // Find out how many units in each stop
12
- $cs-color-deg: $units / length($stops);
13
-
14
- // Count through stops
15
- $cs-deg-count: $cs-color-deg;
16
- $cs-stop-count: 1;
17
-
18
- // Add the first stop to the end so it will be
19
- // interpolated with the last stop.
20
- $stops: append($stops, nth($stops, 1));
21
-
22
- // Start interpolating
23
- @for $i from 0 through length($stops) {
24
- @if $value < $cs-deg-count {
25
- @return mix(nth($stops, $cs-stop-count + 1), nth($stops, $cs-stop-count), abs(percentage(($cs-deg-count - $value) / $cs-color-deg) - 100 ));
26
- }
27
-
28
- // If the value is not in this stop, loop up to another stop.
29
- @else {
30
- $cs-deg-count: $cs-deg-count + $cs-color-deg;
31
- $cs-stop-count: $cs-stop-count + 1
32
- }
33
- }
34
- }
1
+ $ryb-interpolation: #FF0000 #FF4900 #FF7400 #FF9200 #FFAA00 #FFBF00 #FFD300 #FFE800 #FFFF00 #CCF600 #9FEE00 #67E300 #00CC00 #00AF64 #009999 #0B61A4 #1240AB #1B1BB3 #3914AF #530FAD #7109AA #A600A6 #CD0074 #E40045;
35
2
 
36
3
  // RYB color interpolation
37
4
  @function find-ryb($hue) {
38
5
 
39
6
  // remove units on $hue
40
- @if unit($hue) == deg {
41
- $hue: $hue / 1deg;
42
- }
7
+ @if unit($hue) == deg { $hue: $hue / 1deg; }
43
8
 
44
9
  // return an interpolated hue
45
10
  @return hue(cs-interpolate($hue));
@@ -77,24 +42,18 @@
77
42
  // Start at the current hue and loop in the adjustment.
78
43
  $hue-adjust: (ryb-hue($color) + $degrees) / 1deg;
79
44
 
80
- $saturation: saturation(cs-interpolate(abs(ryb-hue($color)) / 1deg)) - saturation($color);
81
- $lightness: lightness(cs-interpolate(abs(ryb-hue($color)) / 1deg)) - lightness($color);
45
+ $lightness: lightness($color);
46
+ $saturation: saturation($color);
82
47
 
83
48
  // Set hue of new color
84
- $new-color: cs-interpolate($hue-adjust);
49
+ $new-color: set-hue(red, hue(cs-interpolate($hue-adjust)));
85
50
 
86
- // Tint or shade according to lightness
87
- @if $lightness > 0 {
88
- $new-color: shade($new-color, $lightness * 2);
89
- }
90
- @if $lightness < 0 {
91
- $new-color: tint($new-color, abs($lightness));
92
- }
51
+ // Add back lightness
52
+ $new-color: set-lightness($new-color, $lightness);
53
+
54
+ // Add back saturation
55
+ $new-color: set-saturation($new-color, $saturation);
93
56
 
94
- // Adjust saturation
95
- @if $saturation < 100% {
96
- $new-color: desaturate($new-color, abs($saturation));
97
- }
98
57
  @return $new-color;
99
58
  }
100
59
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: color-schemer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -28,6 +28,22 @@ dependencies:
28
28
  - - ~>
29
29
  - !ruby/object:Gem::Version
30
30
  version: '0.12'
31
+ - !ruby/object:Gem::Dependency
32
+ name: blend-mode
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 0.0.1
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 0.0.1
31
47
  description: Create color schemes with ease.
32
48
  email:
33
49
  - scott@scottkellum.com
@@ -40,8 +56,11 @@ files:
40
56
  - stylesheets/color-schemer/_cmyk.scss
41
57
  - stylesheets/color-schemer/_color-adjustments.scss
42
58
  - stylesheets/color-schemer/_color-schemer.scss
43
- - stylesheets/color-schemer/_defaults.scss
59
+ - stylesheets/color-schemer/_colorblind.scss
44
60
  - stylesheets/color-schemer/_equalize.scss
61
+ - stylesheets/color-schemer/_interpolation.scss
62
+ - stylesheets/color-schemer/_mix.scss
63
+ - stylesheets/color-schemer/_mixins.scss
45
64
  - stylesheets/color-schemer/_ryb.scss
46
65
  - stylesheets/color-schemer/_tint-shade.scss
47
66
  homepage: https://github.com/scottkellum/color-schemer
@@ -1,5 +0,0 @@
1
- $cs-primary : #f00 !default;
2
- $cs-scheme : mono !default; // mono, complement, triad, tetrad, analogic, accented-analogic
3
- $cs-hue-offset : 30 !default;
4
- $cs-brightness-offset : false !default;
5
- $cs-color-model : rgb !default; // rgb, ryb