uw Wed Mar 28 05:07:16 2001 EDT Added files: /php4/pear/Experimental/Image gbutton.php Log: Very much the same like gtext but this one can be used to render graphical buttons.
Index: php4/pear/Experimental/Image/gbutton.php +++ php4/pear/Experimental/Image/gbutton.php <?php // // +----------------------------------------------------------------------+ // | PHP version 4.0 | // +----------------------------------------------------------------------+ // | Copyright (c) 1997-2001 The PHP Group | // +----------------------------------------------------------------------+ // | This source file is subject to version 2.0 of the PHP license, | // | that is bundled with this package in the file LICENSE, and is | // | available at through the world-wide-web at | // | http://www.php.net/license/2_02.txt. | // | If you did not receive a copy of the PHP license and are unable to | // | obtain it through the world-wide-web, please send a note to | // | [EMAIL PROTECTED] so we can mail you a copy immediately. | // +----------------------------------------------------------------------+ // | Authors: Ulf Wendel <[EMAIL PROTECTED] | // +----------------------------------------------------------------------+ // // $Id: gbutton.php,v 1.1 2001/03/28 13:07:16 uw Exp $ // /** * Creates graphical buttons. * * @author Ulf Wendel <[EMAIL PROTECTED]> * @version $Id: gbutton.php,v 1.1 2001/03/28 13:07:16 uw Exp $ */ class gbutton extends gtext { var $properties = array( "fontsize" => 20, "fgcolor" => "black", "fontdir" => "c:/www/apache/gtext/", "font" => "arial", "border" => 1, "bordercolor" => "black", "padding" => 2 ); var $allowed = array( "fontsize" => "integer", "fgcolor" => "mixed", "fontdir" => "strint", "bold" => "boolean", "italic" => "boolean", "transparent" => "mixed", "padding" => "integer", "bgcolor" => "mixed", "background" => "string", "bgstrech" => "boolean", "bgcenter" => "boolean", "border" => "integer", "bordercolor" => "mixed", "3d" => "integer", "3dlightcolor" => "mixed", "3ddarkcolor" => "mixed", "statusbar" => "string", "name" => "string", "submit" => "boolean", "href" => "string", "align" => "string", "valign" => "string", "width" => "integer", "height" => "integer" ); function createImageTag($id, $text, &$properties, $link) { $size = getImageSize($link[0]); $name = (isset($properties["name"])) ? $properties["name"] : ""; $js_over = ""; $js_out = ""; if (isset($properties["statusbar"])) { $name = $id; $js_over .= sprintf("window.status = '%s';", str_replace('"', "'", $properties["statusbar"])); $js_out .= "window.status = '';"; } $js = ""; if ($js_over) $js .= sprintf(' onMouseOver="%s";', $js_over); if ($js_out) $js .= sprintf(' onMouseOut="%s";', $js_out); if (isset($properties["submit"])) { $html = sprintf('<input type="submit"%s%s>', ($name) ? ' name="' . $name . '"' : "", ($js) ? $js : "" ); } else { $html = sprintf('<img src="%s" %s alt="%s"%s%s>', $link[1], $size[3], (isset($properties["alt"])) ? $properties["alt"] : $text, ($name) ? ' name="' . $name . '"' : "", ($js) ? $js : "" ); } if (isset($properties["href"])) { $html = sprintf('<a href="%s"%s>%s</a>', $properties["url"], (isset($properties["target"])) ? ' target="' . $properties["target"] . '"' : "" ); } return $html; } // end func createImageTag function &buildImage($id, $text, &$properties) { $font_dir = (isset($properties["fontdir"])) ? $properties["fontdir"] : $this->font_dir; if ($font_dir && "/" != substr($font_dir, -1)) $font_dir .= "/"; $font = $font_dir . $properties["font"]; // this is not a proper test but better than nothing and // windows seems to follow this naming convention widely. if (isset($properties["italic"])) { if (isset($properties["bold"]) && file_exists($font . "bi.ttf")) $font .= "bi"; else if (file_exists($font . "i.tff")) $font .= "i"; } else { if (isset($properties["bold"])) { if (file_exists($font . "bd.ttf")) $font .= "bd"; else if (file_exists($font . "b.ttf")) $font .= "b"; } } $font .= ".ttf"; // size of the bounding text box $textsize = ImageTTFBBox($properties["fontsize"], 0, $font , $text); $tx = ($textsize[2] - $textsize[0]) + $properties["padding"]; $ty = ($textsize[3] - $textsize[5]) + $properties["padding"]; $border = 0; if (isset($properties["border"])) $border += (2 * $properties["border"]); if (isset($properties["3d"])) $border += (2 * $properties["3d"]); // border size $sx = $tx + $border; $sy = $ty + $border; // min width and height if (isset($properties["width"]) && $sx < $properties["width"]) $sx = $properties["width"]; if (isset($properties["height"]) && $sy < $properties["height"]) $sy = $properties["height"]; $img = @ImageCreate($sx, $sy); if (!$img) return new gerror("Can't create Image."); // draw the background $bg_color = $this->allocateColor($img, $properties["bgcolor"]); ImageFilledRectangle($img, 0, 0, $sx, $sy, $bg_color); if (isset($properties["border"])) { $border_color = (isset($properties["bordercolor"])) ? $properties["bordercolor"] : $properties["fgcolor"]; $border_color = $this->allocateColor($img, $border_color); for ($i = 1; $i <= $properties["border"]; $i++) ImageRectangle($img, $i, $i, $sx - $i, $sy - $i, $border_color); } if (isset($properties["3d"])) { $d_light = (isset($properties["3dlightcolor"])) ? $properties["3dlightcolor"] : $properties["bgcolor"]; $d_light = $this->allocateColor($img, $d_light); $d_dark = (isset($properties["3ddarkcolor"])) ? $properties["3ddarkcolor"] : $properties["fgcolor"]; $d_dark = $this->allocateColor($img, $d_dark); for ($i = 1; $i <= $properties["3d"]; $i++) { ImageLine($img, $i - 1, $i - 1, $i - 1, $sy - $i, $d_light); ImageLine($img, $i - 1, $i - 1, $sx - $i , $i - 1, $d_light); ImageLine($img, $i - 1, $sy - $i, $sx, $sy - $i, $d_dark); ImageLine($img, $sx - $i, $i, $sx - $i, $sy, $d_dark); } } // preparing to render the text $fg_color = $this->allocateColor($img, $properties["fgcolor"]); $pad = $properties["padding"] / 2; $border /= 2; // checking the horizontal alignment if (isset($properties["align"])) { $align = strtolower($properties["align"]); if ("center" == $align) { $x = (($sx - $tx) / 2) + $pad; } else if ("right" == $align) { $x = $sx - $tx - $pad - $border ; } else { // default: left $x = $pad + $border; } } else { // default: left $x = $pad + $border; } // checking the vertical alignment if (isset($properties["valign"])) { $valign = strtolower($properties["valign"]); if ("top" == $valign) { $y = $sy - ($sy - $ty) + $border + $pad; } else if ("bottom" == $valign) { $y = $sy - $ty + $border - $pad; } else { // default: middle $y = $sy - (($sy - $ty) / 2) + $border - $pad; } } else { // default: middle $y = $sy - (($sy - $ty) / 2) + $border - $pad; } // rendering the label itself ImageTTFText($img, $properties["fontsize"], 0, $x, $y, $fg_color, $font, $text); // set the transparent color if (isset($properties["transparent"])) { $trans = $this->allocateColor($img, $properties["transparent"]); ImageColorTransparent($img, $trans); } return $img; } // end func buildImage } // end class gbutton ?>
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]