The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use X11::Xforms;
#
# Switching cursors demo
#

$cursor = undef;
$animated = undef;
$bitmapcur = undef;
#
# The bitstring deatils were derived from bm1.xbm and bm2.xbm in the 
# DEMOS directory
#
$bm1_width = 16;
$bm1_height = 16;
$bm1_bits = "\x00\x00\x00\x57\x7c\x72\xc4\x52\xc4\x00\x44\x01\x44\x1f\xfc\x22\x40\x42\x40\x44\x40\x43\xc0\x40\x70\x40\x8c\x20\x00\x1f\x00\x00";
$bm2_bits = "\x00\x00\x00\x57\x7c\x72\xfc\x52\xfc\x00\x7c\x01\x7c\x1f\xfc\x22\x40\x42\x40\x44\x40\x43\xc0\x40\x70\x40\x8c\x20\x00\x1f\x00\x00";
#@curs = (14,16,12,70,134,138,136,96);
for ($i=0; $i < 25; ++$i) 
{
	$curs[$i] = $i*2;
}

   fl_set_border_width(-2);
   fl_initialize("FormDemo");
   create_form_cursor();

   fl_set_cursor_color(150,FL_BLACK,FL_RED);

   fl_show_form($cursor,FL_PLACE_CENTER,FL_FULLBORDER,"cursor");
   fl_do_forms();
   exit 0;

# callbacks for form cursor */
sub setcursor_cb
{
   my($ob, $data) = @_;
   fl_set_cursor($ob->window, $data);
}

sub setbitmapcursor_cb
{
  my($ob, $data) = @_;
  if (!defined($bitmapcur))
  {
	$bitmapcur = fl_create_bitmap_cursor($bm1_bits, $bm2_bits, 
                    $bm1_width, $bm1_height,
                    $bm1_width/2, $bm1_height/2);
  }
	
  fl_set_cursor($ob->window, $bitmapcur);

}

sub setanimatedcursor_cb
{
  my($ob, $data) = @_;
  $animated = fl_create_animated_cursor(@curs, 100) if (!defined($animated));
  fl_set_cursor(FL_ObjWin($ob), $animated);
}

sub done_cb
{
    exit(0);
}



sub create_form_cursor
{

  $cursor = fl_bgn_form(FL_NO_BOX, 325, 175);
  $obj = fl_add_box(FL_UP_BOX,0,0,325,175,"");
  $obj = fl_add_frame(FL_EMBOSSED_FRAME,10,10,305,120,"");
  $obj = fl_add_button(FL_NORMAL_BUTTON,20,20,50,25,"Hand");
    fl_set_object_callback($obj,"setcursor_cb",60);
  $obj = fl_add_button(FL_NORMAL_BUTTON,70,20,50,25,"Watch");
    fl_set_object_callback($obj,"setcursor_cb",150);
  $obj = fl_add_button(FL_NORMAL_BUTTON,120,20,60,25,"Invisible");
    fl_set_object_callback($obj,"setcursor_cb",FL_INVISIBLE_CURSOR);
  $obj = fl_add_button(FL_NORMAL_BUTTON,180,20,62,25,"Animated");
    fl_set_object_callback($obj,"setanimatedcursor_cb",0);
  $obj = fl_add_button(FL_NORMAL_BUTTON,242,20,62,25,"BitmapCur");
    fl_set_object_callback($obj,"setbitmapcursor_cb",0);

  $obj = fl_add_button(FL_NORMAL_BUTTON,90,70,140,50,"DefaultCursor");
    fl_set_button_shortcut($obj,"Dd#d",1);
    fl_set_object_callback($obj,"setcursor_cb",FL_DEFAULT_CURSOR);

  $obj = fl_add_button(FL_NORMAL_BUTTON,250,140,60,25,"Done");
    fl_set_object_callback($obj,"done_cb",0);
  fl_end_form();

}