sharkdp / pastel

A command-line tool to generate, analyze, convert and manipulate colors
Apache License 2.0
5.04k stars 97 forks source link

Add multiple stops for gradient command #49

Closed sharkdp closed 4 years ago

sharkdp commented 5 years ago
pastel gradient red orange yellow white
felipe-fg commented 4 years ago

Hello, @sharkdp.

Do you accept contributions? I can help with this issue. :blush:

sharkdp commented 4 years ago

Yes, I do.

I have implemented something like this in the past in a similar project (but in PureScript, not in Rust): https://github.com/sharkdp/purescript-colors/blob/master/src/Color/Scale.purs

We could use this as a starting point for the design of the new functionality. In particular, the way how a "color scale" is represented as a list of (color, position) pairs where position is a number between 0 and 1.

felipe-fg commented 4 years ago

So the idea is to create a color scale using pairs of colors and positions. This will allow to position a color in the middle or close to others.

Evenly distributed:

0.0            0.5            1.0
#FF0000        #00FF00        #0000FF

Unevenly distributed:

0.0      0.25                 1.0
#FF0000  #00FF00              #0000FF

After this, I can use the mixing function and compute the fraction to sample any given position in the color scale. With this new function, I can sample a gradient with multiple colors similar to the current gradient command implementation.

Is this right?

sharkdp commented 4 years ago

Yes, exactly :+1: