You are here

function sls_build_sprites in Service links 7.2

Same name and namespace in other branches
  1. 6.2 plugins/service_links_sprites.module \sls_build_sprites()

Build the CSS file and images.

1 call to sls_build_sprites()
service_links_sprites_validate in plugins/service_links_sprites.module

File

plugins/service_links_sprites.module, line 32
Adds new styles based on sprites.

Code

function sls_build_sprites($files = array()) {
  $sprite_filename = variable_get('file_public_path', conf_path() . '/files') . '/' . SLS_FILENAME;
  $tot_height = array();
  $images = array();
  $sizes = array();

  //potrebbe essere configurabile
  $css_str = ".service-links ul.links li{display:inline-block;}\n.sprites.service-links span{display:block;}\n.service-links span.hide{display:none;}\n.sprites.service-links {background-repeat: no-repeat; float:left;}\n";
  foreach ($files as $service_id => $file) {
    if (is_file($file)) {
      $img_details = getimagesize($file);
      if (!isset($images[$img_details[SLS_GD_WIDTH]])) {
        $images[$img_details[SLS_GD_WIDTH]] = array();
      }
      $images[$img_details[SLS_GD_WIDTH]][$service_id] = array(
        'height' => $img_details[SLS_GD_HEIGHT],
        'file' => $file,
        'mime' => $img_details[SLS_GD_MIME],
      );
      if (!isset($tot_height[$img_details[SLS_GD_WIDTH]])) {
        $tot_height[$img_details[SLS_GD_WIDTH]] = 0;
      }
      $tot_height[$img_details[SLS_GD_WIDTH]] += (int) $img_details[SLS_GD_HEIGHT];
    }
  }
  foreach ($images as $width => $image) {
    $img_dest = @imagecreatetruecolor($width, $tot_height[$width]);
    $background = @imagecolorallocatealpha($img_dest, 255, 255, 255, 127);
    @imagefill($img_dest, 0, 0, $background);
    @imagealphablending($img_dest, FALSE);
    @imagesavealpha($img_dest, TRUE);
    $y = 0;
    $padding = $width + 2;
    $css_str .= ".sprites.service-links.w{$width} {padding-left: {$padding}px; background-image:url(\"" . SLS_FILENAME . "{$width}.png\");}\n";
    foreach ((array) $image as $service_id => $img_details) {
      switch ($img_details['mime']) {
        case 'image/png':
          $img_src = @imagecreatefrompng($img_details['file']);
          break;
        case 'image/jpeg':
          $img_src = @imagecreatefromjpeg($img_details['file']);
          break;
        case 'image/gif':
          $img_src = @imagecreatefromgif($img_details['file']);
          break;
        default:
          continue;
      }
      $class = str_replace('_', '-', $service_id);
      $sign = $y > 0 ? '-' : '';
      $css_str .= ".sprites.service-links-{$class} {background-position: 0 {$sign}{$y}px; height:{$img_details['height']}px}\n";
      @imagecopy($img_dest, $img_src, 0, $y, 0, 0, $width, $img_details['height']);
      @imagedestroy($img_src);
      $y += $img_details['height'];
      $sizes[$img_details['file']] = $width;
    }
    imagepng($img_dest, $sprite_filename . $width . '.png');
    imagedestroy($img_dest);
  }
  $css_fhandler = fopen($sprite_filename . '.css', 'w');
  if ($css_fhandler && !empty($css_str)) {
    fwrite($css_fhandler, $css_str);
    fclose($css_fhandler);
  }
  variable_set('service_links_sprites_sizes', $sizes);
}