1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace ComboStrap; 4*04fd306cSNickeau 5*04fd306cSNickeau/** 6*04fd306cSNickeau * Static method of color calculation 7*04fd306cSNickeau */ 8*04fd306cSNickeauclass ColorSystem 9*04fd306cSNickeau{ 10*04fd306cSNickeau 11*04fd306cSNickeau const CANONICAL = "color-system"; 12*04fd306cSNickeau 13*04fd306cSNickeau /** 14*04fd306cSNickeau * Return a color suitable for reading (that has a good ratio) 15*04fd306cSNickeau * @param ColorRgb $colorRgb 16*04fd306cSNickeau * @return ColorRgb 17*04fd306cSNickeau */ 18*04fd306cSNickeau public static function toTextColor(ColorRgb $colorRgb): ColorRgb 19*04fd306cSNickeau { 20*04fd306cSNickeau try { 21*04fd306cSNickeau return $colorRgb 22*04fd306cSNickeau ->toHsl() 23*04fd306cSNickeau ->setSaturation(30) 24*04fd306cSNickeau ->setLightness(40) 25*04fd306cSNickeau ->toRgb() 26*04fd306cSNickeau ->toMinimumContrastRatioAgainstWhite(); 27*04fd306cSNickeau } catch (ExceptionCompile $e) { 28*04fd306cSNickeau LogUtility::error("Error while calculating the primary text color. {$e->getMessage()}", self::CANONICAL, $e); 29*04fd306cSNickeau return $colorRgb; 30*04fd306cSNickeau } 31*04fd306cSNickeau 32*04fd306cSNickeau } 33*04fd306cSNickeau 34*04fd306cSNickeau /** 35*04fd306cSNickeau * Calculate a color for a text hover that has: 36*04fd306cSNickeau * * more lightness than the text 37*04fd306cSNickeau * * and a good contrast ratio 38*04fd306cSNickeau * 39*04fd306cSNickeau * @param ColorRgb $colorRgb 40*04fd306cSNickeau * @return ColorRgb 41*04fd306cSNickeau */ 42*04fd306cSNickeau public static function toTextHoverColor(ColorRgb $colorRgb): ColorRgb 43*04fd306cSNickeau { 44*04fd306cSNickeau try { 45*04fd306cSNickeau return $colorRgb 46*04fd306cSNickeau ->toHsl() 47*04fd306cSNickeau ->setSaturation(88) 48*04fd306cSNickeau ->setLightness(53) 49*04fd306cSNickeau ->toRgb() 50*04fd306cSNickeau ->toMinimumContrastRatioAgainstWhite(); 51*04fd306cSNickeau } catch (ExceptionCompile $e) { 52*04fd306cSNickeau LogUtility::error("Error while calculating the color text hover color. {$e->getMessage()}", self::CANONICAL, $e); 53*04fd306cSNickeau return $colorRgb; 54*04fd306cSNickeau } 55*04fd306cSNickeau } 56*04fd306cSNickeau 57*04fd306cSNickeau /** 58*04fd306cSNickeau * 59*04fd306cSNickeau * @throws ExceptionCompile when the color could not be calculated 60*04fd306cSNickeau */ 61*04fd306cSNickeau public static function toBackgroundColor(ColorRgb $primaryColor): ColorRgb 62*04fd306cSNickeau { 63*04fd306cSNickeau return $primaryColor 64*04fd306cSNickeau ->toHsl() 65*04fd306cSNickeau ->setLightness(98) 66*04fd306cSNickeau ->toRgb() 67*04fd306cSNickeau ->toMinimumContrastRatioAgainstWhite(1.1, 1); 68*04fd306cSNickeau } 69*04fd306cSNickeau 70*04fd306cSNickeau} 71