The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

package CursorView;

use Qt 2.0;

@ISA = qw(Qt::Window);

$cb_width = 32;
$cb_height = 32;

$cb_bits =
    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x0f\x00" .
    "\x00\x06\x30\x00\x80\x01\xc0\x00\x40\x00\x00\x01" .
    "\x20\x00\x00\x02\x10\x00\x00\x04\x08\x3e\x3e\x08" .
    "\x08\x03\xe0\x08\xc4\x00\x00\x11\x04\x1e\x78\x10" .
    "\x02\x0c\x30\x20\x02\x40\x00\x20\x02\x40\x00\x20" .
    "\x02\x40\x00\x20\x02\x20\x04\x20\x02\x20\x04\x20" .
    "\x02\x10\x08\x20\x02\x08\x08\x20\x02\xf0\x07\x20" .
    "\x04\x00\x00\x10\x04\x00\x00\x10\x08\x00\xc0\x08" .
    "\x08\x3c\x30\x08\x10\xe6\x19\x04\x20\x00\x0f\x02" .
    "\x40\x00\x00\x01\x80\x01\xc0\x00\x00\x06\x30\x00" .
    "\x00\xf8\x0f\x00\x00\x00\x00\x00";

$cm_width = 32;
$cm_height = 32;

$cm_bits =
    "\x00\x00\x00\x00\x00\xf8\x1f\x00\x00\xfe\x3f\x00" .
    "\x80\x07\xf0\x00\xc0\x01\xc0\x01\x60\x00\x00\x03" .
    "\x30\x00\x00\x06\x18\x00\x00\x0c\x0c\x3e\x3e\x18" .
    "\x0e\x03\xe0\x18\xc6\x00\x00\x31\x07\x1e\x78\x30" .
    "\x03\x0c\x30\x60\x03\x40\x00\x60\x03\x40\x00\x60" .
    "\x03\x40\x00\x60\x03\x20\x04\x60\x03\x20\x04\x60" .
    "\x03\x10\x08\x60\x03\x08\x08\x60\x03\xf0\x07\x60" .
    "\x06\x00\x00\x30\x06\x00\x00\x30\x0c\x00\xc0\x18" .
    "\x0c\x3c\x30\x18\x18\xe6\x19\x0c\x30\x00\x0f\x06" .
    "\x60\x00\x00\x03\xc0\x01\xc0\x01\x80\x07\xf0\x00" .
    "\x00\xfe\x3f\x00\x00\xf8\x0f\x00";

sub new {
    my $self = shift->SUPER::new();
    my @list =
	(
	 {'cursor' => Qt::arrowCursor,     'name'   => 'arrowCursor'    },
	 {'cursor' => Qt::upArrowCursor,   'name'   => 'upArrowCursor'  },
	 {'cursor' => Qt::crossCursor,     'name'   => 'crossCursor'    },
	 {'cursor' => Qt::waitCursor,      'name'   => 'waitCursor'     },
	 {'cursor' => Qt::ibeamCursor,     'name'   => 'ibeamCursor'    },
	 {'cursor' => Qt::sizeVerCursor,   'name'   => 'sizeVerCursor'  },
	 {'cursor' => Qt::sizeHorCursor,   'name'   => 'sizeHorCursor'  },
	 {'cursor' => Qt::sizeBDiagCursor, 'name'   => 'sizeBDiagCursor'},
	 {'cursor' => Qt::sizeFDiagCursor, 'name'   => 'sizeFDiagCursor'},
	 {'cursor' => Qt::sizeAllCursor,   'name'   => 'sizeAllCursor'  },
	 );

    $self->setCaption('CursorView');

    my $label;
    my $i = 0;
    my($x, $y);
    for($y = 0; $y < 2; $y++) {
	for($x = 0; $x < 5; $x++) {
	    $label = Qt::Label->new($self);
	    $label->setCursor($list[$i]{'cursor'});
	    $label->setText($list[$i]{'name'});
	    $label->setAlignment(Qt::AlignCenter);
	    $label->setFrameStyle(Qt::Frame::Box | Qt::Frame::Raised);
	    $label->setGeometry(10+$x*110, 10+$y*50, 100, 40);
	    $i++;
	}
    }

    my $cb = Qt::Bitmap->new($cb_width, $cb_height, $cb_bits, 1);
    my $cm = Qt::Bitmap->new($cm_width, $cm_height, $cm_bits, 1);
    my $custom = Qt::Cursor->new($cb, $cm);

    $label = Qt::Label->new($self);
    $label->setCursor($custom);
    $label->setText('Custom bitmap cursor');
    $label->setAlignment(Qt::AlignCenter);
    $label->setFrameStyle(Qt::Frame::Box | Qt::Frame::Raised);
    $label->setGeometry(10, 110, 540, 40);

    $self->resize(20+5*110, 20+3*50);

    return $self;
}

package main;

use Qt 2.0;
import Qt::app;

$v = CursorView->new;
$app->setMainWidget($v);
$v->show();
exit $app->exec();