Index: includes/image.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/image.inc,v
retrieving revision 1.21
diff -u -p -r1.21 image.inc
--- includes/image.inc	12 May 2007 05:51:20 -0000	1.21
+++ includes/image.inc	16 Jul 2007 09:28:42 -0000
@@ -2,9 +2,15 @@
 // $Id: image.inc,v 1.21 2007/05/12 05:51:20 dries Exp $
 
 /**
+ * @file
+ * API for manipulating images. 
+ */
+
+/**
  * Return a list of available toolkits.
  *
- * @return An array of toolkit name => descriptive title.
+ * @return
+ *   An array of toolkit name => descriptive title.
  */
 function image_get_available_toolkits() {
   $toolkits = file_scan_directory('includes', 'image\..*\.inc$');
@@ -18,21 +24,23 @@ function image_get_available_toolkits() 
       $output[$info['name']] = $info['title'];
     }
   }
-  $output['gd'] = t('Built-in GD2 toolkit');
+
   return $output;
 }
 
 /**
  * Retrieve the name of the currently used toolkit.
  *
- * @return String containing the name of the toolkit.
+ * @return
+ *   String containing the name of the selected toolkit, or FALSE on error.
  */
 function image_get_toolkit() {
   static $toolkit;
+
   if (!$toolkit) {
     $toolkit = variable_get('image_toolkit', 'gd');
     $toolkit_file = './includes/image.'. $toolkit .'.inc';
-    if ($toolkit != 'gd' && file_exists($toolkit_file)) {
+    if (isset($toolkit) && file_exists($toolkit_file)) {
       include_once $toolkit_file;
     }
     elseif (!image_gd_check_settings()) {
@@ -46,10 +54,12 @@ function image_get_toolkit() {
 /**
  * Invokes the given method using the currently selected toolkit.
  *
- * @param $method A string containing the method to invoke.
- * @param $params An optional array of parameters to pass to the toolkit method.
- *
- * @return Mixed values (typically Boolean for successful operation).
+ * @param $method
+ *   A string containing the method to invoke.
+ * @param $params
+ *   An optional array of parameters to pass to the toolkit method.
+ * @return
+ *   Mixed values (typically Boolean indicating successful operation).
  */
 function image_toolkit_invoke($method, $params = array()) {
   if ($toolkit = image_get_toolkit()) {
@@ -62,23 +72,22 @@ function image_toolkit_invoke($method, $
       return FALSE;
     }
   }
-  else {
-    if ($method == 'settings') {
-      return image_gd_settings();
-    }
-  }
 }
 
 
 /**
  * Get details about an image.
+ * 
+ * Drupal only supports GIF, JPG and PNG file formats. 
  *
- * @return array containing information about the image
- *      'width': image's width in pixels
- *      'height': image's height in pixels
- *      'extension': commonly used extension for the image
- *      'mime_type': image's MIME type ('image/jpeg', 'image/gif', etc.)
- *      'file_size': image's physical size (in bytes)
+ * @return 
+ *   FALSE, if the file could not be found or is not an image. Otherwise, a 
+ *   keyed array containing information about the image:
+ *    'width'     - Width in pixels.
+ *    'height'    - Height in pixels.
+ *    'extension' - Commonly used file extension for the image.
+ *    'mime_type' - MIME type ('image/jpeg', 'image/gif', 'image/png').
+ *    'file_size' - File size in bytes.
  */
 function image_get_info($file) {
   if (!is_file($file)) {
@@ -110,12 +119,16 @@ function image_get_info($file) {
  *
  * The resulting image always has the exact target dimensions.
  *
- * @param $source         The file path of the source image
- * @param $destination    The file path of the destination image
- * @param $width          The target width
- * @param $height         The target height
- *
- * @return TRUE or FALSE, based on success
+ * @param $source
+ *   The file path of the source image.
+ * @param $destination
+ *   The file path of the destination image.
+ * @param $width
+ *   The target width, in pixels.
+ * @param $height
+ *   The target height, in pixels.
+ * @return 
+ *   TRUE or FALSE, based on success.
  */
 function image_scale_and_crop($source, $destination, $width, $height) {
   $info = image_get_info($source);
@@ -136,12 +149,16 @@ function image_scale_and_crop($source, $
  *
  * The resulting image can be smaller for one or both target dimensions.
  *
- * @param $source         The file path of the source image
- * @param $destination    The file path of the destination image
- * @param $width          The target width
- * @param $height         The target height
- *
- * @return True or FALSE, based on success
+ * @param $source
+ *   The file path of the source image.
+ * @param $destination
+ *   The file path of the destination image.
+ * @param $width
+ *   The target width, in pixels.
+ * @param $height
+ *   The target height, in pixels.
+ * @return 
+ *   TRUE or FALSE, based on success.
  */
 function image_scale($source, $destination, $width, $height) {
   $info = image_get_info($source);
@@ -167,10 +184,16 @@ function image_scale($source, $destinati
 /**
  * Resize an image to the given dimensions (ignoring aspect ratio).
  *
- * @param $source        The filepath of the source image.
- * @param $destination   The file path of the destination image.
- * @param $width         The target width.
- * @param $height        The target height.
+ * @param $source
+ *   The file path of the source image.
+ * @param $destination
+ *   The file path of the destination image.
+ * @param $width
+ *   The target width, in pixels.
+ * @param $height
+ *   The target height, in pixels.
+  * @return 
+ *   TRUE or FALSE, based on success.
  */
 function image_resize($source, $destination, $width, $height) {
   return image_toolkit_invoke('resize', array($source, $destination, $width, $height));
@@ -179,180 +202,41 @@ function image_resize($source, $destinat
 /**
  * Rotate an image by the given number of degrees.
  *
- * @param $source  The filepath of the source image
- * @param $destination    The file path of the destination image
- * @param $degrees The number of (clockwise) degrees to rotate the image
+ * @param $source
+ *   The file path of the source image.
+ * @param $destination
+ *   The file path of the destination image.
+ * @param $degrees
+ *   The number of (clockwise) degrees to rotate the image.
+ * @param $bg_color
+ *   An hexidecimal integer specifying the background color to use for the
+ *   uncovered area of the image after the rotation. E.g. 0x000000 for black,
+ *   0xff00ff for magenta, and 0xffffff for white.
+ * @return 
+ *   TRUE or FALSE, based on success.
  */
-function image_rotate($source, $destination, $degrees) {
-  return image_toolkit_invoke('rotate', array($source, $destination, $degrees));
+function image_rotate($source, $destination, $degrees, $bg_color = 0x000000) {
+  return image_toolkit_invoke('rotate', array($source, $destination, $degrees, $bg_color));
 }
 
 /**
  * Crop an image to the rectangle specified by the given rectangle.
  *
- * @param $source        The filepath of the source image
- * @param $destination   The file path of the destination image
- * @param $x             The top left co-ordinate of the crop area (x axis value)
- * @param $y             The top left co-ordinate of the crop area (y axis value)
- * @param $width         The target width
- * @param $height        The target height
+ * @param $source
+ *   The file path of the source image.
+ * @param $destination
+ *   The file path of the destination image.
+ * @param $x
+ *   The top left co-ordinate, in pixels, of the crop area (x axis value).
+ * @param $y
+ *   The top left co-ordinate, in pixels, of the crop area (y axis value).
+ * @param $width
+ *   The target width, in pixels.
+ * @param $height
+ *   The target height, in pixels.
+ * @return 
+ *   TRUE or FALSE, based on success.
  */
 function image_crop($source, $destination, $x, $y, $width, $height) {
   return image_toolkit_invoke('crop', array($source, $destination, $x, $y, $width, $height));
-}
-
-/**
- * GD2 toolkit functions
- * With the minimal requirements of PHP 4.3 for Drupal, we use the built-in version of GD.
- */
-
-/**
- * Retrieve settings for the GD2 toolkit.
- */
-function image_gd_settings() {
-  if (image_gd_check_settings()) {
-    $form = array();
-    $form['status'] = array('#value' => t('The built-in GD2 toolkit is installed and working properly.'));
-
-    $form['image_jpeg_quality'] = array(
-      '#type' => 'textfield',
-      '#title' => t('JPEG quality'),
-      '#description' => t('Define the image quality for JPEG manipulations. Ranges from 0 to 100. Higher values mean better image quality but bigger files.'),
-      '#size' => 10,
-      '#maxlength' => 3,
-      '#default_value' => variable_get('image_jpeg_quality', 75),
-      '#field_suffix' => t('%'),
-    );
-
-    return $form;
-  }
-  else {
-    form_set_error('image_toolkit', t('The built-in GD image toolkit requires that the GD module for PHP be installed and configured properly. For more information see <a href="@url">PHP\'s image documentation</a>.', array('@url' => 'http://php.net/image')));
-    return FALSE;
-  }
-}
-
-/**
- * Verify GD2 settings (that the right version is actually installed).
- *
- * @return boolean
- */
-function image_gd_check_settings() {
-  if ($check = get_extension_funcs('gd')) {
-    if (in_array('imagegd2', $check)) {
-      // GD2 support is available.
-      return TRUE;
-    }
-  }
-  return FALSE;
-}
-
-/**
- * Scale an image to the specified size using GD.
- */
-function image_gd_resize($source, $destination, $width, $height) {
-  if (!file_exists($source)) {
-    return FALSE;
-  }
-
-  $info = image_get_info($source);
-  if (!$info) {
-    return FALSE;
-  }
-
-  $im = image_gd_open($source, $info['extension']);
-  if (!$im) {
-    return FALSE;
-  }
-
-  $res = imageCreateTrueColor($width, $height);
-  if ($info['extension'] == 'png') {
-    $transparency = imagecolorallocatealpha($res, 0, 0, 0, 127);
-    imagealphablending($res, FALSE);
-    imagefilledrectangle($res, 0, 0, $width, $height, $transparency);
-    imagealphablending($res, TRUE);
-    imagesavealpha($res, TRUE);
-  }
-  imageCopyResampled($res, $im, 0, 0, 0, 0, $width, $height, $info['width'], $info['height']);
-  $result = image_gd_close($res, $destination, $info['extension']);
-
-  imageDestroy($res);
-  imageDestroy($im);
-
-  return $result;
-}
-
-/**
- * Rotate an image the given number of degrees.
- */
-function image_gd_rotate($source, $destination, $degrees, $bg_color = 0) {
-  if (!function_exists('imageRotate')) {
-    return FALSE;
-  }
-
-  $info = image_get_info($source);
-  if (!$info) {
-    return FALSE;
-  }
-
-  $im = image_gd_open($source, $info['extension']);
-  if (!$im) {
-    return FALSE;
-  }
-
-  $res = imageRotate($im, $degrees, $bg_color);
-  $result = image_gd_close($res, $destination, $info['extension']);
-
-  return $result;
-}
-
-/**
- * Crop an image using the GD toolkit.
- */
-function image_gd_crop($source, $destination, $x, $y, $width, $height) {
-  $info = image_get_info($source);
-  if (!$info) {
-    return FALSE;
-  }
-
-  $im = image_gd_open($source, $info['extension']);
-  $res = imageCreateTrueColor($width, $height);
-  imageCopy($res, $im, 0, 0, $x, $y, $width, $height);
-  $result = image_gd_close($res, $destination, $info['extension']);
-
-  imageDestroy($res);
-  imageDestroy($im);
-
-  return $result;
-}
-
-/**
- * GD helper function to create an image resource from a file.
- */
-function image_gd_open($file, $extension) {
-  $extension = str_replace('jpg', 'jpeg', $extension);
-  $open_func = 'imageCreateFrom'. $extension;
-  if (!function_exists($open_func)) {
-    return FALSE;
-  }
-  return $open_func($file);
-}
-
-/**
- * GD helper to write an image resource to a destination file.
- */
-function image_gd_close($res, $destination, $extension) {
-  $extension = str_replace('jpg', 'jpeg', $extension);
-  $close_func = 'image'. $extension;
-  if (!function_exists($close_func)) {
-    return FALSE;
-  }
-  if ($extension == 'jpeg') {
-    return $close_func($res, $destination, variable_get('image_jpeg_quality', 75));
-  }
-  else {
-    return $close_func($res, $destination);
-  }
-}
-
-
+}
\ No newline at end of file
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.510
diff -u -p -r1.510 system.module
--- modules/system/system.module	16 Jul 2007 06:33:44 -0000	1.510
+++ modules/system/system.module	16 Jul 2007 09:28:43 -0000
@@ -788,10 +788,12 @@ function system_image_toolkit_settings()
       '#options' => $toolkits_available
     );
   }
-  else {
-    $form['image_toolkit'] = array('#value' => '<p>'. t("No image toolkits found. Drupal will use PHP's built-in GD library for image handling.") .'</p>');
+  elseif (count($toolkits_available) == 1) {
+    variable_set('image_toolkit', key($toolkits_available));
   }
+
   $form['image_toolkit_settings'] = image_toolkit_invoke('settings');
+
   return system_settings_form($form);
 }
 
