<?php
if (!extension_loaded('gtk')) {
dl('php_gtk.' . PHP_SHLIB_SUFFIX);
}
$arXPMs['ok'] = array(
"32 32 7 1",
" c None",
". c #005F00", "+ c #008A00", "@ c #00BB00",
"# c #00E000", "$ c #00F709", "% c #4BE24A",
" ",
" ",
" ",
" ",
" @@",
" +@++",
"+@ +@+@+ ",
"+++ @+@++. ",
"+@++ ++@%++. ",
" +%++ +++%%@+ ",
" +%@++ +++%%%++ ",
" +@##++ +++%$$%++ ",
" +$$%++ +++@$$$$++ ",
" +#$$@+. +++@$$$$%++ ",
" +@$$$#+.+.+@$$$$$#+. ",
" .+$$$$@+.@#$$$$$@+. ",
" +##$$$####$$$$++. ",
" .@$#####$$###@.. ",
" .+##########+.. ",
" .#########+.. ",
" .@##@#@#@.. ",
" .+@##@#@+. ",
" ..#@@#@.. ",
" .@@@@.. ",
" .+@+.. ",
" .++.. ",
" ... ",
" .. ",
" ",
" ",
" ",
" "
);
$arXPMs['inbox'] = array(
"16 16 6 1",
" c None" , ". c #028800", "+ c #995700",
"@ c #82E61D", "# c #FFBE58", "$ c #FCEF8E",
" ",
" .... ",
" .$$$$. ",
" .@@@@. ",
" .@@@@. ",
" ..@@@@.. ",
" .@@@@@@@@. ",
" .@@@@@@. ",
" .@.@@. ",
" ..@. ",
"+++ .. +++",
"+$$+ +$$+",
"+$$++++++++++$$+",
"+$#$$$$$$$$$$$#+",
"+$#############+",
"++++++++++++++++"
);
$window =& new GtkWindow();
$window->set_title('pixmaps');
$window->set_default_size(200, 100);
$window->connect_object('destroy', array('gtk', 'main_quit'));
$window->realize();
$clTransparentTest =& new GdkColor('#000000');
$arPxTest = gdk::pixmap_create_from_xpm_d($window->window, $clTransparentTest, $arXPMs['ok']);
$btnTest =& new GtkButton();
$pxmTest =& new GtkPixmap($arPxTest[0], $arPxTest[1]);
$lblTest =& new GtkLabel('Button with icon');
$hboxTest =& new GtkHBox();
$hboxTest->pack_start($pxmTest);
$hboxTest->pack_end($lblTest);
$btnTest->add($hboxTest);
// hovering the button changes the image
// to a highlighted version of itself
function changePixmap( $btnTest, $strAction, &$pixmap)
{
$hbox = $btnTest->child;
$arChildren = $hbox->children();
$hbox->remove($arChildren[0]);
$hbox->pack_start($pixmap);
$pixmap->show();
// underline the label
$lblTest = $arChildren[1];
$strPattern = '';
if ($strAction == 'enter') {
$strPattern = '________________';
}
$lblTest->set_pattern($strPattern);
}
// generate a highlighted picture from the original
$arXPMs['high'] = $arXPMs['ok'];
$arData = explode(' ', $arXPMs['high'][0]);
$nColors = $arData[2];
// change all colors | we know the first color is transparent
for ($nA = 2; $nA < $nColors + 1; $nA++) {
$arData = explode(' #', $arXPMs['high'][$nA]);
// the following code is taken from PEAR::Image_Color
$degree = 40;
$color[] = hexdec(substr($arData[1], 0, 2));
$color[] = hexdec(substr($arData[1], 2, 2));
$color[] = hexdec(substr($arData[1], 4, 2));
for ($x = 0; $x < 3; $x++) {
if (($color[$x] + $degree) < 256) {
if (($color1[$x] + $degree) > -1) {
$color[$x] += $degree;
} else {
$color[$x] = 0;
}
} else {
$color[$x] = 255;
}
}
$arData[1] = sprintf('%02X%02X%02X', $color[0], $color[1], $color[2]);
$arXPMs['high'][$nA] = implode(' #', $arData);
}
$arPxTestH = gdk::pixmap_create_from_xpm_d($window->window, null, $arXPMs['high']);
$pxmTestHigh =& new GtkPixmap($arPxTestH[0], $arPxTestH[1]);
$btnTest->connect('enter', 'changePixmap', 'enter', $pxmTestHigh);
$btnTest->connect('leave', 'changePixmap', 'leave', $pxmTest);
$alBtn =& new GtkAlignment(0.5, 0.5, 0, 0);
$alBtn->add($btnTest);
list($pxWindow, $maskWindow) = gdk::pixmap_create_from_xpm_d($window->window, null, $arXPMs['inbox']);
$gdkwindow = $window->window;
$gdkwindow->set_icon($gdkwindow, $pxWindow, $maskWindow);
$window->add($alBtn);
$window->show_all();
gtk::main();
?>
|