Ejemplo n.º 1
0
 /**
  * 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);
 }