module Sass::Extras::YUV::Functions
Public Class Methods
included(base)
click to toggle source
# File lib/sass/extras/yuv.rb, line 27 def self.included(base) base.declare :yuv, [:y, :u, :v] base.declare :yuva, [:y, :u, :v, :alpha] base.declare :set_brightness, [:color, :amount] base.declare :increase_brightness, [:color, :amount] base.declare :reduce_brightness, [:color, :amount] base.declare :add_brightness, [:color, :amount] base.declare :detract_brightness, [:color, :amount] end
Public Instance Methods
add_brightness(color, amount)
click to toggle source
@param color [Color] @param amount [Number] between 0 and 1.0, or 0% and 100%
# File lib/sass/extras/yuv.rb, line 94 def add_brightness(color, amount) adjust_brightness(color, amount) { |c, y| [y + c, 1.0].min } end
detract_brightness(color, amount)
click to toggle source
@param color [Color] @param amount [Number] between 0 and 1.0, or 0% and 100%
# File lib/sass/extras/yuv.rb, line 100 def detract_brightness(color, amount) adjust_brightness(color, amount) { |c, y| [y - c, 0.0].max } end
increase_brightness(color, amount)
click to toggle source
@param color [Color] @param amount [Number] between 0 and 1.0, or 0% and 100%
# File lib/sass/extras/yuv.rb, line 82 def increase_brightness(color, amount) adjust_brightness(color, amount) { |c, y| [(1 + c) * y, 1.0].min } end
reduce_brightness(color, amount)
click to toggle source
@param color [Color] @param amount [Number] between 0 and 1.0, or 0% and 100%
# File lib/sass/extras/yuv.rb, line 88 def reduce_brightness(color, amount) adjust_brightness(color, amount) { |c, y| [(1 - c) * y, 0.0].max } end
set_brightness(color, amount)
click to toggle source
@param color [Color] @param amount [Number] between 0 and 1.0, or 0% and 100%
# File lib/sass/extras/yuv.rb, line 76 def set_brightness(color, amount) adjust_brightness(color, amount) { |c, _| c } end
yuv(y, u, v)
click to toggle source
Creates a {Color} object from luma (Y), and two chrominance (UV) values.
@param y [Number]
A number between 0 and 1.0 inclusive
@param u [Number]
A number between -{U_MAX} and +{U_MAX} inclusive
@param v [Number]
A number between -{V_MAX} and +{V_MAX} inclusive
@return [Color]
# File lib/sass/extras/yuv.rb, line 46 def yuv(y, u, v) assert_type y, :Number, :y assert_type u, :Number, :u assert_type v, :Number, :v yv = y.value if y.numerator_units == ["%"] && y.denominator_units.empty? fail ArgumentError, "Brightness (Y') value #{y} must be between 0% and 100% inclusive" unless (0..100).include?(y.value) yv /= 100.0 else fail ArgumentError, "Brightness (Y') value #{y} must be between 0 and 1.0 inclusive" unless (0..1.0).include?(y.value) end fail ArgumentError, "Chrominance (U) value #{u} must be between -#{U_MAX} and #{U_MAX} inclusive" unless (-U_MAX..U_MAX).include?(u.value) fail ArgumentError, "Chrominance (V) value #{v} must be between -#{V_MAX} and #{V_MAX} inclusive" unless (-V_MAX..V_MAX).include?(v.value) r = yv + v.value * (1 - WR) / (V_MAX) g = yv - u.value * (WB * (1 - WB)) / (V_MAX * WG) - v.value * (WR * (1 - WR)) / (V_MAX * WG) b = yv + u.value * (1 - WB) / U_MAX rgb = [r, g, b].map { |c| [0, [255, c * 255].min].max } Sass::Script::Color.new(rgb) end
yuva(y, u, v, a)
click to toggle source
# File lib/sass/extras/yuv.rb, line 69 def yuva(y, u, v, a) assert_type a, :Number, :a yuv(y, u, v).with(alpha: a.value) end
Protected Instance Methods
adjust_brightness(color, amount) { |c, value| ... }
click to toggle source
# File lib/sass/extras/yuv.rb, line 106 def adjust_brightness(color, amount) y, u, v, a = color.yuva.map { |x| Sass::Script::Number.new x } c = amount.value if amount.numerator_units == ["%"] && amount.denominator_units.empty? fail ArgumentError, "Amount value #{amount} must be between 0% and 100% inclusive" unless (0..100).include?(c) c /= 100.0 else fail ArgumentError, "Amount value #{amount} must be between 0 and 1.0 inclusive" unless (0..1.0).include?(c) end y = Sass::Script::Number.new yield(c, y.value) yuva(y, u, v, a) end