Create initial version of shard.
This commit is contained in:
		
						commit
						3d9cf7858b
					
				
							
								
								
									
										9
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					root = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[*.cr]
 | 
				
			||||||
 | 
					charset = utf-8
 | 
				
			||||||
 | 
					end_of_line = lf
 | 
				
			||||||
 | 
					insert_final_newline = true
 | 
				
			||||||
 | 
					indent_style = space
 | 
				
			||||||
 | 
					indent_size = 2
 | 
				
			||||||
 | 
					trim_trailing_whitespace = true
 | 
				
			||||||
							
								
								
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					/docs/
 | 
				
			||||||
 | 
					/lib/
 | 
				
			||||||
 | 
					/bin/
 | 
				
			||||||
 | 
					/.shards/
 | 
				
			||||||
 | 
					*.dwarf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Libraries don't need dependency lock
 | 
				
			||||||
 | 
					# Dependencies will be locked in application that uses them
 | 
				
			||||||
 | 
					/shard.lock
 | 
				
			||||||
							
								
								
									
										1
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					language: crystal
 | 
				
			||||||
							
								
								
									
										21
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					The MIT License (MIT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2018 Danila Fedorin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					of this software and associated documentation files (the "Software"), to deal
 | 
				
			||||||
 | 
					in the Software without restriction, including without limitation the rights
 | 
				
			||||||
 | 
					to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The above copyright notice and this permission notice shall be included in
 | 
				
			||||||
 | 
					all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
				
			||||||
 | 
					OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
				
			||||||
 | 
					THE SOFTWARE.
 | 
				
			||||||
							
								
								
									
										40
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					# golden-color
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A simple shard to generate colors using the golden ratio method.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Installation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Add this to your application's `shard.yml`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```yaml
 | 
				
			||||||
 | 
					dependencies:
 | 
				
			||||||
 | 
					  golden-color:
 | 
				
			||||||
 | 
					    git: https://dev.danilafe.com/DanilaFe/golden-color
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Usage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The first step to using golden-color is to create a color generator.
 | 
				
			||||||
 | 
					The saturation and value parameters can be used to ajust the colors
 | 
				
			||||||
 | 
					that are produced. Additionally, the seed parameter can be modified
 | 
				
			||||||
 | 
					to change the starting hue. Colors can then be generated by repeated
 | 
				
			||||||
 | 
					calls to "generate".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```crystal
 | 
				
			||||||
 | 
					require "golden-color"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					generator = GoldenColor::ColorGen.new saturation: 0.5, value: 0.95
 | 
				
			||||||
 | 
					color = generator.generate
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Contributing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Fork it
 | 
				
			||||||
 | 
					2. Create your feature branch (`git checkout -b my-new-feature`)
 | 
				
			||||||
 | 
					3. Commit your changes (`git commit -am 'Add some feature'`)
 | 
				
			||||||
 | 
					4. Push to the branch (`git push origin my-new-feature`)
 | 
				
			||||||
 | 
					5. Create a new Pull Request
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Contributors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [DanilaFe](https://dev.danilafe.com/DanilaFe) Danila Fedorin - creator, maintainer
 | 
				
			||||||
							
								
								
									
										9
									
								
								shard.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								shard.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					name: golden-color
 | 
				
			||||||
 | 
					version: 0.1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					authors:
 | 
				
			||||||
 | 
					  - Danila Fedorin <danila.fedorin@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					crystal: 0.26.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					license: MIT
 | 
				
			||||||
							
								
								
									
										27
									
								
								spec/golden-color_spec.cr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								spec/golden-color_spec.cr
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					require "./spec_helper"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe GoldenColor do
 | 
				
			||||||
 | 
					    describe ".from_rgb" do
 | 
				
			||||||
 | 
					        it "Correctly creates a color from red, green and blue" do
 | 
				
			||||||
 | 
					            c = GoldenColor::Color.from_rgb 0.0, 0.5, 1.0
 | 
				
			||||||
 | 
					            c.r.should eq 0.0
 | 
				
			||||||
 | 
					            c.g.should eq 0.5
 | 
				
			||||||
 | 
					            c.b.should eq 1.0
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        it "Correctly creates a color from hue, saturation and value" do
 | 
				
			||||||
 | 
					            c = GoldenColor::Color.from_hsv 0.0, 0.5, 0.95
 | 
				
			||||||
 | 
					            c.r.should eq 0.95
 | 
				
			||||||
 | 
					            c.g.should eq 0.475
 | 
				
			||||||
 | 
					            c.b.should eq 0.475
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        it "Correctly reports a tuple of red, green, and blue" do
 | 
				
			||||||
 | 
					            c = GoldenColor::Color.from_rgb 0.0, 0.5, 1.0
 | 
				
			||||||
 | 
					            r, g, b = c.rgb
 | 
				
			||||||
 | 
					            r.should eq c.r
 | 
				
			||||||
 | 
					            g.should eq c.g
 | 
				
			||||||
 | 
					            b.should eq c.b
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
							
								
								
									
										2
									
								
								spec/spec_helper.cr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								spec/spec_helper.cr
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					require "spec"
 | 
				
			||||||
 | 
					require "../src/golden-color"
 | 
				
			||||||
							
								
								
									
										58
									
								
								src/golden-color.cr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/golden-color.cr
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					module GoldenColor
 | 
				
			||||||
 | 
					  VERSION = "0.1.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  struct Color
 | 
				
			||||||
 | 
					      getter r : Float64
 | 
				
			||||||
 | 
					      getter g : Float64
 | 
				
			||||||
 | 
					      getter b : Float64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      def initialize(@r = 0, @g = 0, @b = 0)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      def self.from_rgb(r, g, b)
 | 
				
			||||||
 | 
					          self.new r, g, b
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      def self.from_hsv(h, s, v)
 | 
				
			||||||
 | 
					          h *= 6.0
 | 
				
			||||||
 | 
					          chroma = s * v
 | 
				
			||||||
 | 
					          x = chroma * (1.0 - (h.modulo(2.0) - 1.0).abs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          r, g, b = if h >= 0.0 && h <= 1.0 
 | 
				
			||||||
 | 
					                        {chroma, x, 0.0}
 | 
				
			||||||
 | 
					                    elsif h >= 1.0 && h <= 2.0
 | 
				
			||||||
 | 
					                        {x, chroma, 0.0}
 | 
				
			||||||
 | 
					                    elsif h >= 2.0 && h <= 3.0
 | 
				
			||||||
 | 
					                        {0.0, chroma, x}
 | 
				
			||||||
 | 
					                    elsif h >= 3.0 && h <= 4.0
 | 
				
			||||||
 | 
					                        {0.0, x, chroma}
 | 
				
			||||||
 | 
					                    elsif h >= 4.0 && h <= 5.0
 | 
				
			||||||
 | 
					                        {x, 0.0, chroma}
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                        {chroma, 0.0, x}
 | 
				
			||||||
 | 
					                    end
 | 
				
			||||||
 | 
					          m = v - chroma
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          self.new(r + m, g + m, b + m)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      def rgb
 | 
				
			||||||
 | 
					          { r, g, b }
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  class ColorGen
 | 
				
			||||||
 | 
					      getter seed : Float64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      def initialize(@saturation = 0.5,
 | 
				
			||||||
 | 
					                     @value = 0.95,
 | 
				
			||||||
 | 
					                     @seed = Random.rand(1.0))
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      def generate
 | 
				
			||||||
 | 
					          color = Color.from_hsv @seed, @saturation, @value
 | 
				
			||||||
 | 
					          @seed = (@seed + 0.618033988749895).modulo(1.0)
 | 
				
			||||||
 | 
					          color
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user