/** * Return a mix of $color1 and $color2 with given $weightPercentage (defaults to 50%) * * @param Node $color1 * @param Node $color2 * @param DimensionNode $weightPercentage * @return ColorNode * @link http://sass-lang.com * @copyright 2006-2009 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein */ public function mix(Node $color1, Node $color2, DimensionNode $weightPercentage = null) { if (!$color1 instanceof ColorNode) { return $color1; } elseif (!$color2 instanceof ColorNode) { return $color1; } if (!$weightPercentage) { $weightPercentage = new DimensionNode(50); } $p = $weightPercentage->value / 100.0; $w = $p * 2 - 1; $a = $color1->getAlpha(true) - $color2->getAlpha(true); $w1 = (($w * $a == -1 ? $w : ($w + $a) / (1 + $w * $a)) + 1) / 2; $w2 = 1 - $w1; $color1Rgb = $color1->getRGB(); $color2Rgb = $color2->getRGB(); $rgb = [$color1Rgb[0] * $w1 + $color2Rgb[0] * $w2, $color1Rgb[1] * $w1 + $color2Rgb[1] * $w2, $color1Rgb[2] * $w1 + $color2Rgb[2] * $w2]; $alpha = $color1->getAlpha(true) * $p + $color2->getAlpha(true) * (1 - $p); return new ColorNode($rgb, $alpha); }