1) return Colour::mix( $warning, self::cached(self::RATIO_GOOD), XNumber::easeInQuad($ratio - 1) ); return Colour::mix( self::cached(self::RATIO_BAD), $warning, XNumber::easeOutQuad($ratio) ); } public static function forFileSize(int $bytes): Colour { // should this ratio as well? if($bytes >= 53687090000) return self::cached(self::FILE_OVER_50GB); if($bytes >= 21474840000) return self::cached(self::FILE_UP_TO_50GB); if($bytes >= 10737420000) return self::cached(self::FILE_UP_TO_20GB); if($bytes >= 5368709000) return self::cached(self::FILE_UP_TO_10GB); if($bytes >= 1073742000) return self::cached(self::FILE_UP_TO_5GB); return self::cached(self::FILE_UP_TO_1GB); } public static function cached(int $raw): Colour { if(array_key_exists($raw, self::$colourCache)) return self::$colourCache[$raw]; return self::$colourCache[$raw] = ColourRGB::fromRawRGB($raw); } }