• File: colors.php
  • Full Path: /home/matthif/www/wp-content/plugins/wpforms-lite/includes/functions/colors.php
  • Date Modified: 02/16/2024 11:45 AM
  • File size: 3.97 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php
/**
 * Helper functions to work with colors.
 *
 * @since 1.8.0
 */

/**
 * Detect if we should use a light or dark color based on the color given.
 *
 * @link https://docs.woocommerce.com/wc-apidocs/source-function-wc_light_or_dark.html#608-627
 *
 * @since 1.2.5
 *
 * @param mixed  $color Color value.
 * @param string $dark  Dark color value (default: '#000000').
 * @param string $light Light color value (default: '#FFFFFF').
 *
 * @return string
 */
function wpforms_light_or_dark$color$dark '#000000'$light '#FFFFFF' ) {

    
$hex str_replace'#'''$color );

    
$c_r hexdecsubstr$hex0) );
    
$c_g hexdecsubstr$hex2) );
    
$c_b hexdecsubstr$hex4) );

    
$brightness = ( ( $c_r 299 ) + ( $c_g 587 ) + ( $c_b 114 ) ) / 1000;

    return 
$brightness 155 $dark $light;
}

/**
 * Convert hex color value to RGB.
 *
 * @since 1.7.9
 * @since 1.8.5 New param and return type were added.
 *
 * @param string $hex       Color value in hex format.
 * @param bool   $as_string Whether to return the RGB value as a string or array.
 *
 * @return string|array Color value in RGB format.
 */
function wpforms_hex_to_rgb$hex$as_string true ) {

    
$hex ltrim$hex'#' );

    
// Convert shorthand colors to full format, e.g. "FFF" -> "FFFFFF".
    
$rgb_parts preg_replace'~^(.)(.)(.)$~''$1$1$2$2$3$3'$hex );

    
$rgb      = [];
    
$rgb['R'] = hexdec$rgb_parts[0] . $rgb_parts[1] );
    
$rgb['G'] = hexdec$rgb_parts[2] . $rgb_parts[3] );
    
$rgb['B'] = hexdec$rgb_parts[4] . $rgb_parts[5] );

    
// Return the RGB value as a string.
    
if ( $as_string ) {
        return 
sprintf(
            
'%1$d, %2$d, %3$d',
            
$rgb['R'],
            
$rgb['G'],
            
$rgb['B']
        );
    }

    return 
$rgb// This is an array.
}

/**
 * Get a lighter color hex value.
 *
 * @since 1.8.5
 *
 * @param string $color  Color hex value.
 * @param int    $factor Factor to lighten the color.
 *
 * @return string Lighter color hex value.
 */
function wpforms_hex_lighter$color$factor 30 ) {

    
$base wpforms_hex_to_rgb$colorfalse );

    
// Leave if we can't get the RGB values.
    
if ( empty( $base ) || count$base ) !== ) {
        return 
'';
    }

    
$hex '#';

    foreach ( 
$base as $channel ) {
        
$amount      255 $channel;
        
$amount      $amount 100;
        
$amount      roundfloatval$amount $factor ) );
        
$new_decimal $channel $amount;

        
$new_hex_component dechex$new_decimal );

        if ( 
strlen$new_hex_component ) < ) {
            
$new_hex_component '0' $new_hex_component;
        }

        
$hex .= $new_hex_component;
    }

    return 
$hex;
}

/**
 * Get a darker color hex value.
 *
 * @since 1.8.5
 *
 * @param string $color  Color hex value.
 * @param int    $factor Factor to darken the color.
 *
 * @return string Darker color hex value.
 */
function wpforms_hex_darker$color$factor 30 ) {

    
$base wpforms_hex_to_rgb$colorfalse );

    
// Leave if we can't get the RGB values.
    
if ( empty( $base ) || count$base ) !== ) {
        return 
'';
    }

    
$hex '#';

    foreach ( 
$base as $channel ) {
        
$amount      $channel 100;
        
$amount      roundfloatval$amount $factor ) );
        
$new_decimal $channel $amount;

        
$new_hex_component dechex$new_decimal );

        if ( 
strlen$new_hex_component ) < ) {
            
$new_hex_component '0' $new_hex_component;
        }

        
$hex .= $new_hex_component;
    }

    return 
$hex;
}

/**
 * Generate a contrasting color based on the given color.
 *
 * This function calculates a contrasting color to ensure readability based on the provided color.
 *
 * @since 1.8.5
 *
 * @param string $color        The original color value. Color hex value.
 * @param int    $light_factor The factor to lighten the color.
 * @param int    $dark_factor  The factor to darken the color.
 *
 * @return string The contrasting color value.
 */
function wpforms_generate_contrasting_color$color$light_factor 30$dark_factor 30 ) {

    
$is_dark wpforms_light_or_dark$color'light''dark' ) === 'dark';

    return 
$is_dark wpforms_hex_lighter$color$light_factor ) : wpforms_hex_darker$color$dark_factor );
}