--- Gtk2-GoBoard/GoBoard.pm 2008/06/23 00:28:13 1.4 +++ Gtk2-GoBoard/GoBoard.pm 2008/06/25 04:41:10 1.5 @@ -68,9 +68,10 @@ use Scalar::Util; use POSIX qw(ceil); +use Carp (); use Gtk2; + use Games::Go::SimpleBoard; -use Carp (); use Glib::Object::Subclass Gtk2::AspectFrame::, @@ -139,20 +140,24 @@ or die "$path: $!"; } +our ($board_img, @black_img, @white_img, $shadow_img, + @triangle_img, @square_img, @circle_img, @cross_img); + sub load_images { - @::black_img = load_image "b-01.png"; - @::white_img = map +(load_image "w-0$_.png"), 1,2,3,4,5; - $::shadow_img = load_image "shadow.png"; - @::triangle_img = map +(load_image "triangle-$_.png"), qw(b w); - @::square_img = map +(load_image "square-$_.png"), qw(b w); - @::circle_img = map +(load_image "circle-$_.png"), qw(b w); - $::board_img = load_image "woodgrain-01.jpg"; + $board_img = load_image "woodgrain-01.jpg"; + @black_img = load_image "b-01.png"; + @white_img = map +(load_image "w-0$_.png"), 1,2,3,4,5; + $shadow_img = load_image "shadow.png"; + @triangle_img = map +(load_image "triangle-$_.png"), qw(b w); + @square_img = map +(load_image "square-$_.png" ), qw(b w); + @circle_img = map +(load_image "circle-$_.png" ), qw(b w); + @cross_img = map +(load_image "cross-$_.png" ), qw(b w); } sub INIT_INSTANCE { my $self = shift; - @::black_img + @black_img or load_images; $self->double_buffered (0); @@ -332,13 +337,13 @@ my $pixbuf; - my ($bw, $bh) = ($::board_img->get_width, $::board_img->get_height); + my ($bw, $bh) = ($board_img->get_width, $board_img->get_height); if ($w < $bw && $h < $bh) { $pixbuf = new_pixbuf $w, $h, 0; - $::board_img->copy_area (0, 0, $w, $h, $pixbuf, 0, 0); + $board_img->copy_area (0, 0, $w, $h, $pixbuf, 0, 0); } else { - $pixbuf = scale_pixbuf $::board_img, $w, $h, $::config->{speed} ? 'nearest' : 'bilinear', 0; + $pixbuf = scale_pixbuf $board_img, $w, $h, 'bilinear', 0; # nearest for extra speed } my $linew = int ($w / 40 / $size); @@ -362,9 +367,9 @@ $x = $kx[$x] - $hs / 2; $y = $ky[$y] - $hs / 2; # we use the shadow mask... not perfect, but I want to finish this - $::shadow_img->composite ($pixbuf, + $shadow_img->composite ($pixbuf, $x, $y, ($hs + 1) x2, $x, $y, - $hs / $::shadow_img->get_width, $hs / $::shadow_img->get_height, + $hs / $shadow_img->get_width, $hs / $shadow_img->get_height, 'bilinear', 255); }; @@ -492,14 +497,14 @@ my $csize = ceil $size; my $shadow = $size * SHADOW; - for my $stone ($mark & MARK_W ? @::white_img : @::black_img) { + for my $stone ($mark & MARK_W ? @white_img : @black_img) { my $base = new_pixbuf +(ceil $size + $shadow) x2, 1, 0x00000000; # zeroeth the shadow if (~$mark & MARK_GRAYED and $mark & (MARK_B | MARK_W)) { - $::shadow_img->composite ( + $shadow_img->composite ( $base, $shadow, $shadow, $csize, $csize, $shadow, $shadow, - $size / $::shadow_img->get_width, $size / $::shadow_img->get_height, + $size / $shadow_img->get_width, $size / $shadow_img->get_height, 'bilinear', 128 ); } @@ -517,8 +522,8 @@ } # then the small stones (always using the first image) - for ([MARK_SMALL_B, $::black_img[0]], - [MARK_SMALL_W, $::white_img[0]]) { + for ([MARK_SMALL_B, $black_img[0]], + [MARK_SMALL_W, $white_img[0]]) { my ($mask, $img) = @$_; if ($mark & $mask) { $img->composite ( @@ -532,10 +537,11 @@ # and lastly any markers my $dark_bg = ! ! ($mark & MARK_B); - for ([MARK_CIRCLE, $::circle_img[$dark_bg]], - [MARK_TRIANGLE, $::triangle_img[$dark_bg]], - [MARK_SQUARE, $::square_img[$dark_bg]], - [MARK_KO, $::square_img[$dark_bg]]) { + for ([MARK_CIRCLE, $circle_img[$dark_bg]], + [MARK_TRIANGLE, $triangle_img[$dark_bg]], + [MARK_SQUARE, $square_img[$dark_bg]], + [MARK_CROSS, $cross_img[$dark_bg]], + [MARK_KO, $square_img[$dark_bg]]) { my ($mask, $img) = @$_; if ($mark & $mask) { $img->composite (